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:
Philip McGrath 2022-02-27 16:29:15 -05:00 committed by Liliana Marie Prikler
parent e8518c43a3
commit 6bca38f282
No known key found for this signature in database
GPG key ID: 442A84B8C70E2F87
2 changed files with 98 additions and 43 deletions

View file

@ -48,7 +48,8 @@
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:export (nix-system->chez-machine #:export (nix-system->chez-machine
chez-machine->nonthreaded chez-machine->nonthreaded
chez-machine->threaded)) chez-machine->threaded
unpack-nanopass+stex))
(define (chez-machine->nonthreaded machine) (define (chez-machine->nonthreaded machine)
"Given a string MACHINE naming a Chez Scheme machine type, returns a string "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: ;; 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 (define-public chez-scheme
(package (package
(name "chez-scheme") (name "chez-scheme")
@ -176,6 +191,9 @@ If native threads are supported, the returned list will include
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(snippet #~(begin (snippet #~(begin
(use-modules (guix build utils)) (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) (for-each (lambda (dir)
(when (directory-exists? dir) (when (directory-exists? dir)
(delete-file-recursively 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: ;; for X11 clipboard support in expeditor:
;; https://github.com/cisco/ChezScheme/issues/9#issuecomment-222057232 ;; https://github.com/cisco/ChezScheme/issues/9#issuecomment-222057232
libx11)) libx11))
(native-inputs (native-inputs (list chez-nanopass-bootstrap stex-bootstrap))
(list nanopass ; source only
stex-bootstrap))
(native-search-paths (native-search-paths
(list (search-path-specification (list (search-path-specification
(variable "CHEZSCHEMELIBDIRS") (variable "CHEZSCHEMELIBDIRS")
@ -215,14 +231,7 @@ If native threads are supported, the returned list will include
#~(modify-phases %standard-phases #~(modify-phases %standard-phases
(add-after 'unpack 'unpack-nanopass+stex (add-after 'unpack 'unpack-nanopass+stex
(lambda args (lambda args
(copy-recursively #$nanopass #$unpack-nanopass+stex))
"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")))))
;; NOTE: the custom Chez 'configure' script doesn't allow ;; NOTE: the custom Chez 'configure' script doesn't allow
;; unrecognized flags, such as those automatically added ;; unrecognized flags, such as those automatically added
;; by `gnu-build-system`. ;; by `gnu-build-system`.
@ -317,7 +326,7 @@ and 32-bit PowerPC architectures.")
;; When updating, remember to also update %racket-version in racket.scm. ;; When updating, remember to also update %racket-version in racket.scm.
(source #f) ; avoid problematic cycle with racket.scm (source #f) ; avoid problematic cycle with racket.scm
(inputs `()) (inputs `())
(native-inputs (list racket-vm-bc)) (native-inputs (list chez-nanopass-bootstrap racket-vm-bc))
(build-system copy-build-system) (build-system copy-build-system)
;; TODO: cross compilation ;; TODO: cross compilation
(arguments (arguments
@ -336,10 +345,7 @@ and 32-bit PowerPC architectures.")
(chdir "racket/src/ChezScheme"))) (chdir "racket/src/ChezScheme")))
(add-after 'chdir 'unpack-nanopass+stex (add-after 'chdir 'unpack-nanopass+stex
(lambda args (lambda args
(copy-recursively #$unpack-nanopass+stex))
#$nanopass
"nanopass"
#:keep-mtime? #t)))
(add-before 'install 'build (add-before 'install 'build
(lambda* (#:key native-inputs inputs #:allow-other-keys) (lambda* (#:key native-inputs inputs #:allow-other-keys)
(invoke (search-input-file (or native-inputs inputs) (invoke (search-input-file (or native-inputs inputs)
@ -502,15 +508,79 @@ User's Guix}, among other documents.")
(outputs '("out" "doc")) (outputs '("out" "doc"))
(properties '()))) (properties '())))
(define-public nanopass (define-public chez-nanopass-bootstrap
(let ((version "1.9.2")) (hidden-package
(origin (package
(method git-fetch) (name "chez-nanopass")
(uri (git-reference (version "1.9.2")
(url "https://github.com/nanopass/nanopass-framework-scheme") (source
(commit (string-append "v" version)))) (origin
(sha256 (base32 "16vjsik9rrzbabbhbxbaha51ppi3f9n8rk59pc6zdyffs0vziy4i")) (method git-fetch)
(file-name (git-file-name "nanopass" version))))) (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: ;; Other Chez packages:

View file

@ -254,22 +254,6 @@
"--enable-origtree" "--enable-origtree"
,(string-append "--prefix=" #$output "/opt/racket-vm"))) ,(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 (define-public racket-vm-cgc
;; Eventually, it may make sense for some vm packages to not be hidden, ;; Eventually, it may make sense for some vm packages to not be hidden,
;; but this one is especially likely to remain 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) (modify-inputs (package-native-inputs racket-vm-cgc)
(delete "libtool") (delete "libtool")
(prepend chez-scheme-for-racket-bootstrap-bootfiles (prepend chez-scheme-for-racket-bootstrap-bootfiles
chez-nanopass-bootstrap
racket-vm-bc))) racket-vm-bc)))
(arguments (arguments
(substitute-keyword-arguments (package-arguments racket-vm-cgc) (substitute-keyword-arguments (package-arguments racket-vm-cgc)
@ -395,7 +380,7 @@ collector, 3M (``Moving Memory Manager'').")
(add-after 'unpack 'unpack-nanopass+stex (add-after 'unpack 'unpack-nanopass+stex
(lambda args (lambda args
(with-directory-excursion "racket/src/ChezScheme" (with-directory-excursion "racket/src/ChezScheme"
#$(make-unpack-nanopass+stex)))) #$unpack-nanopass+stex)))
(add-after 'unpack-nanopass+stex 'unpack-bootfiles (add-after 'unpack-nanopass+stex 'unpack-bootfiles
(lambda* (#:key native-inputs inputs #:allow-other-keys) (lambda* (#:key native-inputs inputs #:allow-other-keys)
(with-directory-excursion "racket/src/ChezScheme" (with-directory-excursion "racket/src/ChezScheme"