gnu: Add stalin.
* gnu/packages/scheme.scm (stalin): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
f69c1a1832
commit
44fa8431be
|
@ -9,6 +9,7 @@
|
||||||
;;; Copyright © 2017 John Darrington <jmd@gnu.org>
|
;;; Copyright © 2017 John Darrington <jmd@gnu.org>
|
||||||
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
|
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
|
||||||
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||||
|
;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; 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
|
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.")
|
small program, it is easy to comprehend, get to grips with, and use.")
|
||||||
(license bsd-3))) ; there are no licence headers
|
(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+))))
|
||||||
|
|
Loading…
Reference in New Issue