mirror of
git://git.savannah.gnu.org/guix.git
synced 2023-12-14 03:33:07 +01:00
gnu: Add chez-nanopass.
* gnu/packages/chez.scm (nanopass): Rename to ... (chez-nanopass-bootstrap): ... this new variable, and promote it from an origin to a package. (chez-nanopass): New variable. (unpack-nanopass+stex): New variable using 'chez-nanopass-bootstrap'. (chez-scheme-for-racket-bootstrap-bootfiles) (chez-scheme)[native-inputs]: Add 'chez-nanopass-bootstrap'. [arguments]<#:phases>: Adapt 'unpack-nanopass+stex' phase to use the new variable. * gnu/packages/racket.scm (racket-vm-cs): Likewise. (make-unpack-nanopass+stex): Remove it. Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
This commit is contained in:
parent
e8518c43a3
commit
6bca38f282
2 changed files with 98 additions and 43 deletions
|
@ -48,7 +48,8 @@
|
|||
#:use-module (srfi srfi-1)
|
||||
#:export (nix-system->chez-machine
|
||||
chez-machine->nonthreaded
|
||||
chez-machine->threaded))
|
||||
chez-machine->threaded
|
||||
unpack-nanopass+stex))
|
||||
|
||||
(define (chez-machine->nonthreaded machine)
|
||||
"Given a string MACHINE naming a Chez Scheme machine type, returns a string
|
||||
|
@ -159,6 +160,20 @@ If native threads are supported, the returned list will include
|
|||
;; Chez Scheme:
|
||||
;;
|
||||
|
||||
|
||||
(define unpack-nanopass+stex
|
||||
#~(begin
|
||||
(copy-recursively
|
||||
(dirname (search-input-file %build-inputs
|
||||
"lib/chez-scheme/nanopass.ss"))
|
||||
"nanopass"
|
||||
#:keep-mtime? #t)
|
||||
(mkdir-p "stex")
|
||||
(with-output-to-file "stex/Mf-stex"
|
||||
(lambda ()
|
||||
;; otherwise, it will try to download submodules
|
||||
(display "# to placate ../configure")))))
|
||||
|
||||
(define-public chez-scheme
|
||||
(package
|
||||
(name "chez-scheme")
|
||||
|
@ -176,6 +191,9 @@ If native threads are supported, the returned list will include
|
|||
(file-name (git-file-name name version))
|
||||
(snippet #~(begin
|
||||
(use-modules (guix build utils))
|
||||
;; TODO: consider putting this in a (guix ...) or
|
||||
;; (guix build ...) module so it can be shared
|
||||
;; with the Racket origin without cyclic issues.
|
||||
(for-each (lambda (dir)
|
||||
(when (directory-exists? dir)
|
||||
(delete-file-recursively dir)))
|
||||
|
@ -193,9 +211,7 @@ If native threads are supported, the returned list will include
|
|||
;; for X11 clipboard support in expeditor:
|
||||
;; https://github.com/cisco/ChezScheme/issues/9#issuecomment-222057232
|
||||
libx11))
|
||||
(native-inputs
|
||||
(list nanopass ; source only
|
||||
stex-bootstrap))
|
||||
(native-inputs (list chez-nanopass-bootstrap stex-bootstrap))
|
||||
(native-search-paths
|
||||
(list (search-path-specification
|
||||
(variable "CHEZSCHEMELIBDIRS")
|
||||
|
@ -215,14 +231,7 @@ If native threads are supported, the returned list will include
|
|||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'unpack-nanopass+stex
|
||||
(lambda args
|
||||
(copy-recursively #$nanopass
|
||||
"nanopass"
|
||||
#:keep-mtime? #t)
|
||||
(mkdir-p "stex")
|
||||
(with-output-to-file "stex/Mf-stex"
|
||||
(lambda ()
|
||||
;; otherwise, it will try to download submodules
|
||||
(display "# to placate ../configure")))))
|
||||
#$unpack-nanopass+stex))
|
||||
;; NOTE: the custom Chez 'configure' script doesn't allow
|
||||
;; unrecognized flags, such as those automatically added
|
||||
;; by `gnu-build-system`.
|
||||
|
@ -317,7 +326,7 @@ and 32-bit PowerPC architectures.")
|
|||
;; When updating, remember to also update %racket-version in racket.scm.
|
||||
(source #f) ; avoid problematic cycle with racket.scm
|
||||
(inputs `())
|
||||
(native-inputs (list racket-vm-bc))
|
||||
(native-inputs (list chez-nanopass-bootstrap racket-vm-bc))
|
||||
(build-system copy-build-system)
|
||||
;; TODO: cross compilation
|
||||
(arguments
|
||||
|
@ -336,10 +345,7 @@ and 32-bit PowerPC architectures.")
|
|||
(chdir "racket/src/ChezScheme")))
|
||||
(add-after 'chdir 'unpack-nanopass+stex
|
||||
(lambda args
|
||||
(copy-recursively
|
||||
#$nanopass
|
||||
"nanopass"
|
||||
#:keep-mtime? #t)))
|
||||
#$unpack-nanopass+stex))
|
||||
(add-before 'install 'build
|
||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||
(invoke (search-input-file (or native-inputs inputs)
|
||||
|
@ -502,15 +508,79 @@ User's Guix}, among other documents.")
|
|||
(outputs '("out" "doc"))
|
||||
(properties '())))
|
||||
|
||||
(define-public nanopass
|
||||
(let ((version "1.9.2"))
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/nanopass/nanopass-framework-scheme")
|
||||
(commit (string-append "v" version))))
|
||||
(sha256 (base32 "16vjsik9rrzbabbhbxbaha51ppi3f9n8rk59pc6zdyffs0vziy4i"))
|
||||
(file-name (git-file-name "nanopass" version)))))
|
||||
(define-public chez-nanopass-bootstrap
|
||||
(hidden-package
|
||||
(package
|
||||
(name "chez-nanopass")
|
||||
(version "1.9.2")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/nanopass/nanopass-framework-scheme")
|
||||
(commit (string-append "v" version))))
|
||||
(sha256
|
||||
(base32 "16vjsik9rrzbabbhbxbaha51ppi3f9n8rk59pc6zdyffs0vziy4i"))
|
||||
(file-name (git-file-name "nanopass-framework-scheme" version))
|
||||
(snippet
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
(when (file-exists? "doc/user-guide.pdf")
|
||||
(delete-file "doc/user-guide.pdf"))
|
||||
(substitute* "doc/Makefile"
|
||||
(("include ~/stex/Mf-stex")
|
||||
"include $(STEXLIB)/Mf-stex"))))))
|
||||
(build-system copy-build-system)
|
||||
(arguments
|
||||
(list #:install-plan
|
||||
#~`(("nanopass.ss" "lib/chez-scheme/")
|
||||
("nanopass" "lib/chez-scheme/"))))
|
||||
(home-page "https://nanopass.org")
|
||||
(synopsis "DSL for compiler development")
|
||||
(description "The Nanopass framework is an embedded domain-specific
|
||||
language for writing compilers composed of several simple passes that
|
||||
operate over well-defined intermediate languages. The goal of this
|
||||
organization is both to simplify the understanding of each pass, because it
|
||||
is responsible for a single task, and to simplify the addition of new passes
|
||||
anywhere in the compiler. Nanopass reduces the boilerplate required to
|
||||
create compilers, making them easier to understand and maintain.")
|
||||
(license expat))))
|
||||
|
||||
(define-public chez-nanopass
|
||||
(package/inherit chez-nanopass-bootstrap
|
||||
(properties '())
|
||||
;; TODO: cross-compilation
|
||||
(native-inputs (list chez-scheme stex))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments chez-nanopass-bootstrap)
|
||||
((#:install-plan base-plan)
|
||||
#~`(("nanopass.so" "lib/chez-scheme/")
|
||||
("doc/user-guide.pdf" #$(string-append
|
||||
"share/doc/"
|
||||
(package-name this-package)
|
||||
"-"
|
||||
(package-version this-package)
|
||||
"/"))
|
||||
,@#$base-plan))
|
||||
((#:phases base-phases #~%standard-phases)
|
||||
#~(modify-phases #$base-phases
|
||||
(add-before 'install 'compile-and-test
|
||||
(lambda args
|
||||
(invoke "scheme"
|
||||
"--compile-imported-libraries"
|
||||
"--program" "test-all.ss")))
|
||||
(add-after 'compile-and-test 'build-doc
|
||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||
(with-directory-excursion "doc"
|
||||
(invoke "make"
|
||||
(string-append "Scheme="
|
||||
(search-input-file
|
||||
(or native-inputs inputs)
|
||||
"/bin/scheme"))
|
||||
(string-append "STEXLIB="
|
||||
(search-input-directory
|
||||
(or native-inputs inputs)
|
||||
"/lib/stex"))))))))))))
|
||||
|
||||
;;
|
||||
;; Other Chez packages:
|
||||
|
|
|
@ -254,22 +254,6 @@
|
|||
"--enable-origtree"
|
||||
,(string-append "--prefix=" #$output "/opt/racket-vm")))
|
||||
|
||||
(define (make-unpack-nanopass+stex)
|
||||
;; Adapted from chez-scheme.
|
||||
;; Thunked to avoid evaluating 'chez-scheme' too early.
|
||||
;; TODO: Refactor enough to share this directly.
|
||||
#~(begin
|
||||
(copy-recursively
|
||||
#$nanopass
|
||||
"nanopass"
|
||||
#:keep-mtime? #t)
|
||||
(mkdir-p "stex")
|
||||
(with-output-to-file "stex/Mf-stex"
|
||||
(lambda ()
|
||||
;; otherwise, it will try to download submodules
|
||||
(display "# to placate ../configure")))))
|
||||
|
||||
|
||||
(define-public racket-vm-cgc
|
||||
;; Eventually, it may make sense for some vm packages to not be hidden,
|
||||
;; but this one is especially likely to remain hidden.
|
||||
|
@ -387,6 +371,7 @@ collector, 3M (``Moving Memory Manager'').")
|
|||
(modify-inputs (package-native-inputs racket-vm-cgc)
|
||||
(delete "libtool")
|
||||
(prepend chez-scheme-for-racket-bootstrap-bootfiles
|
||||
chez-nanopass-bootstrap
|
||||
racket-vm-bc)))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments racket-vm-cgc)
|
||||
|
@ -395,7 +380,7 @@ collector, 3M (``Moving Memory Manager'').")
|
|||
(add-after 'unpack 'unpack-nanopass+stex
|
||||
(lambda args
|
||||
(with-directory-excursion "racket/src/ChezScheme"
|
||||
#$(make-unpack-nanopass+stex))))
|
||||
#$unpack-nanopass+stex)))
|
||||
(add-after 'unpack-nanopass+stex 'unpack-bootfiles
|
||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||
(with-directory-excursion "racket/src/ChezScheme"
|
||||
|
|
Loading…
Reference in a new issue