From dbd3395c90aa443a7c6bad9155e6bfc7053bfbf0 Mon Sep 17 00:00:00 2001 From: Adam Massmann Date: Fri, 22 Jun 2018 14:29:23 -0400 Subject: [PATCH] gnu: Add stalin. * gnu/packages/scheme.scm (stalin): New variable. --- gnu/packages/scheme.scm | 78 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index dba5067e9..dbb545532 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -9,6 +9,7 @@ ;;; Copyright © 2017 John Darrington ;;; Copyright © 2017 Clément Lassieur ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice +;;; Copyright © 2018 Adam Massmann ;;; ;;; This file is part of GNU Guix. ;;; @@ -356,7 +357,7 @@ mashups, office (web agendas, mail clients, ...), etc.") `(#:modules ((guix build gnu-build-system) (guix build utils) (srfi srfi-1)) - + ;; No `configure' script; run "make check" after "make install" as ;; prescribed by README. #:phases @@ -1025,3 +1026,78 @@ 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")) + (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: + ;; + (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+)))) -- 2.17.1