gnu: Add stalin.

* gnu/packages/scheme.scm (stalin): New variable.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Adam Massmann 2018-06-22 14:29:23 -04:00 committed by Ludovic Courtès
parent f69c1a1832
commit 44fa8431be
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 79 additions and 1 deletions

View File

@ -9,6 +9,7 @@
;;; Copyright © 2017 John Darrington <jmd@gnu.org>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -1025,3 +1026,80 @@ the same program, without any interference between them. Foreign functions in C
can be added and values can be defined in the Scheme environment. Being quite a
small program, it is easy to comprehend, get to grips with, and use.")
(license bsd-3))) ; there are no licence headers
(define-public stalin
(let ((commit "ed1c9e339c352b7a6fee40bb2a47607c3466f0be"))
;; FIXME: The Stalin "source" contains C code generated by itself:
;; 'stalin-AMD64.c', etc.
(package
(name "stalin")
(version "0.11")
(source (origin
;; Use Pearlmutter's upstream branch with AMD64 patches
;; applied. Saves us from including those 20M! patches
;; in Guix. For more info, see:
;; <ftp.ecn.purdue.edu/qobi/stalin-0.11-amd64-patches.tgz>
(method git-fetch)
(uri (git-reference
(url "https://github.com/barak/stalin.git")
(commit commit)))
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
"15a5gxj9v7jqlgkg0543gdflw0rbrir7fj5zgifnb33m074wiyhn"))
(modules '((guix build utils)))
(snippet
;; remove gc libs from build, we have them as input
'(begin
(delete-file "gc6.8.tar.gz")
(delete-file-recursively "benchmarks")
(substitute* "build"
((".*gc6.8.*") "")
((" cd \\.\\.") "")
((".*B include/libgc.a") "")
((".*make.*") ""))
#t))))
(build-system gnu-build-system)
(arguments
`(#:make-flags (list "ARCH_OPTS=-freg-struct-return")
#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(include-out (string-append out "/include")))
(invoke "./build")
(for-each (lambda (fname)
(install-file fname include-out))
(find-files "include"))
(substitute* "makefile"
(("\\./include") include-out))
(substitute* "post-make"
(("`pwd`") out))
#t)))
(delete 'check)
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(install-file "stalin.1"
(string-append out "/share/man/man1"))
(install-file "stalin"
(string-append out "/bin"))
#t))))))
(inputs
`(("libx11" ,libx11)))
(propagated-inputs
`(("libgc" ,libgc)))
(supported-systems '("x86_64-linux"))
(home-page "https://engineering.purdue.edu/~qobi/papers/fdlcc.pdf")
(synopsis "Brutally efficient Scheme compiler")
(description
"Stalin is an aggressively optimizing whole-program compiler
for Scheme that does polyvariant interprocedural flow analysis,
flow-directed interprocedural escape analysis, flow-directed
lightweight CPS conversion, flow-directed lightweight closure
conversion, flow-directed interprocedural lifetime analysis, automatic
in-lining, unboxing, and flow-directed program-specific and
program-point-specific low-level representation selection and code
generation.")
(license gpl2+))))