Package: guix-patches;
Reported by: Philip McGrath <philip <at> philipmcgrath.com>
Date: Fri, 29 Mar 2024 05:17:01 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Philip McGrath <philip <at> philipmcgrath.com>, 70065 <at> debbugs.gnu.org Cc: Katherine Cox-Buday <cox.katherine.e+guix <at> gmail.com>, Andrew Tropin <andrew <at> trop.in>, Skyler Ferris <skyvine <at> protonmail.com> Subject: [bug#70065] [PATCH v2 7/8] gnu: chez-scheme: Update and simplify machine-type handling. Date: Mon, 01 Apr 2024 17:45:29 +0200
Am Montag, dem 01.04.2024 um 02:51 -0400 schrieb Philip McGrath: > Since Chez Scheme 10.0.0 supports all of the backends added in > Racket's > branch, the complexity of '%chez-features-table' is no longer needed. > Ideally, even more of this logic could be maintained upstream, but > this > change will simplify maintenance in the mean time. > > * gnu/packages/chez.scm (target-chez-arch): Recognize loongarch64. > (chez-upsteam-features-for-system): Remove function. > (%chez-features-table): Replace with ... > (define-machine-types, %machine-types): ... this new macro and > variable, > using the list copied directly from the Chez Scheme source code. > (nix-system->pbarch-machine-type): Update docstring, since pbarch > machine types are supported upstream as of Chez Scheme 10.0.0. > (racket-cs-native-supported-system?): Replace with ... > (nix-system->native-chez-machine-type): ... this new function, > implemented using '%machine-types'. > (chez-scheme-for-racket): Update accordingly. > (chez-scheme-for-racket-bootstrap-bootfiles): Likewise. > * gnu/packages/racket.scm (racket-vm-cs): Likewise. > > Change-Id: I46efebaf48cce388075ab4873c16a6f5f9692bb7 > --- > gnu/packages/chez.scm | 197 ++++++++++++++++---------------------- > -- > gnu/packages/racket.scm | 4 +- > 2 files changed, 81 insertions(+), 120 deletions(-) > > diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm > index 807a143f61..4d3f79d9a7 100644 > --- a/gnu/packages/chez.scm > +++ b/gnu/packages/chez.scm > @@ -50,7 +50,7 @@ (define-module (gnu packages chez) > #:use-module (srfi srfi-1) > #:use-module (srfi srfi-26) > #:export (chez-scheme-for-system > - racket-cs-native-supported-system? > + nix-system->native-chez-machine-type > nix-system->pbarch-machine-type > unpack-nanopass)) > > @@ -93,6 +93,8 @@ (define* (target-chez-arch #:optional (system > "ppc32") > ((target-riscv64? system) > "rv64") > + ((string-prefix? "loongarch64-" system) > + "la64") > (else > #f))) > > @@ -127,111 +129,67 @@ (define* (target-chez-os #:optional (system > (or (%current-target-system) > (else > #f))) > > -(define %chez-features-table > - ;; An alist of alists mapping: > - ;; os -> arch -> (or/c #f (listof symbol?)) > - ;; where: > - ;; - `os` is a string for the OS part of a Chez Scheme machine > type; and > - ;; - `arch` is a string for the architecture part of a Chez > machine type. > - ;; > - ;; The absence of an entry for a given arch--os pair means that > neither > - ;; upstream Chez Scheme nor the Racket variant can generate native > code for > - ;; that system. (The Racket variant can still provide support via > its > - ;; ``portable bytecode'' backends and optional compilation to C.) > A value > - ;; of `#f` means that upstream Chez Scheme does not support the > arch--os > - ;; pair at all, but the Racket variant does. A list has the same > meaning as > - ;; a result from `chez-upstream-features-for-system`. > - ;; > - ;; The arch--os pairs marked "commented out" have been commented > out in the > - ;; STeX source for the upstream release notes since the initial > release as > - ;; free software, but they are reported to work and/or have been > described > - ;; as supported by upstream maintainers. > - ;; > - ;; For this overall approach to make sense, we assume that > Racket's variant > - ;; of Chez Scheme can generate native code for a superset of the > platforms > - ;; supported upstream, supports threads on all platforms it > supports at all > - ;; (because they are needed for Racket), and doesn't need > bootstrap > - ;; bootfiles. Those assumptions have held for several years. > - '(;; Linux > - ("le" > - ("i3" threads bootstrap-bootfiles) > - ("a6" threads bootstrap-bootfiles) > - ("arm32" bootstrap-bootfiles) > - ("arm64" . #f) > - ("rv64" . #f) > - ("ppc32" threads)) > - ;; Hurd > - ("gnu" > - ("i3" . #f)) > - ;; FreeBSD > - ("fb" > - ("i3" threads) ;; commented out > - ("a6" threads) ;; commented out > - ("arm32" . #f) > - ("arm64" . #f) > - ("ppc32" . #f)) > - ;; OpenBSD > - ("ob" > - ("i3" threads) ;; commented out > - ("a6" threads) ;; commented out > - ("arm32" . #f) > - ("arm64" . #f) > - ("ppc32" . #f)) > - ;; NetBSD > - ("nb" > - ("i3" threads) ;; commented out > - ("a6" threads) ;; commented out > - ("arm32" . #f) > - ("arm64" . #f) > - ("ppc32" . #f)) > - ;; OpenSolaris / OpenIndiana / Illumos > - ("s2" > - ("i3" threads) ;; commented out > - ("a6" threads)) ;; commented out > - ;; QNX > - ("qnx" > - ("i3" . #f)) > - ;; Windows > - ("nt" > - ("i3" threads bootstrap-bootfiles) > - ("a6" threads bootstrap-bootfiles) > - ;; ^ threads "experiemental", but reportedly fine > - ("arm64" . #f)) > - ;; Darwin > - ("osx" > - ("i3" threads bootstrap-bootfiles) > - ("a6" threads bootstrap-bootfiles) > - ("arm64" . #f) > - ("ppc32" . #f)))) > - > -(define* (chez-upstream-features-for-system #:optional > - (system > - (or (%current-target- > system) > - (%current- > system)))) > - "Return a list of symbols naming features supported by upstream > Chez Scheme > -for the Nix system identifier SYSTEM, or @code{#f} if upstream Chez > Scheme > -does not support SYSTEM at all. > - > -If native threads are supported, the returned list will include > -@code{'threads}. If bootstrap bootfiles for SYSTEM are distributed > in the > -upstream Chez Scheme repository, the returned list will include > -@code{'bootstrap-bootfiles}. Other feature symbols may be added in > the > -future." > - (let ((chez-arch (target-chez-arch system)) > - (chez-os (target-chez-os system))) > - (and=> (assoc-ref %chez-features-table chez-os) > - (cut assoc-ref <> chez-arch)))) > +(define-syntax define-machine-types > + (lambda (stx) > + (syntax-case stx (any) > + ((_ any id0 id ...) > + #`(define #,(datum->syntax #'id0 '%machine-types) > + '(id0 id ...)))))) The datum->syntax call here looks weird. > +;; The following is copied from s/cmacros.ss, line 36, in the Chez > source > +(define-machine-types > + any > + pb tpb You should maybe comment ;; unthreaded threaded > + pb32l tpb32l > + pb32b tpb32b > + pb64l tpb64l > + pb64b tpb64b > + i3nt ti3nt > + i3osx ti3osx > + i3le ti3le > + i3fb ti3fb > + i3ob ti3ob > + i3nb ti3nb > + i3s2 ti3s2 > + i3qnx ti3qnx > + i3gnu ti3gnu > + a6nt ta6nt > + a6osx ta6osx > + a6le ta6le > + a6fb ta6fb > + a6ob ta6ob > + a6nb ta6nb > + a6s2 ta6s2 > + ppc32osx tppc32osx > + ppc32le tppc32le > + ppc32fb tppc32fb > + ppc32ob tppc32ob > + ppc32nb tppc32nb > + arm32le tarm32le > + arm32fb tarm32fb > + arm32ob tarm32ob > + arm32nb tarm32nb > + arm64nt tarm64nt > + arm64osx tarm64osx > + arm64le tarm64le > + arm64fb tarm64fb > + arm64ob tarm64ob > + arm64nb tarm64nb > + rv64le trv64le > + rv64fb trv64fb > + rv64ob trv64ob > + rv64nb trv64nb > + la64le tla64le > +) > > (define* (nix-system->pbarch-machine-type #:optional > (system > (or (%current-target- > system) > (%current-system))) > #:key (threads? #t)) > - "Return a string naming the pseudo–machine type used by Racket's > variant of > -Chez Scheme to represent the appropriate ``pbarch'' backend for > SYSTEM: that > -is, the ``portable bytecode'' backend specialized for SYSTEM's word > size and > -endianness. The result will name the threaded machine type unless > THREADS? is > -provided and is #f." > + "Return a string naming the Chez Scheme machine type of the > appropriate > +``pbarch'' backend for SYSTEM: that is, the ``portable bytecode'' > backend > +specialized for SYSTEM's word size and endianness. The result will > name the > +threaded machine type unless THREADS? is provided as #f." > (string-append (if threads? > "t" > "") > @@ -243,20 +201,23 @@ (define* (nix-system->pbarch-machine-type > #:optional > "l" > "b"))) > > -(define* (racket-cs-native-supported-system? #:optional > - (system > - (or (%current-target- > system) > - (%current- > system)))) > - "Can Racket's variant of Chez Scheme generate native code for > SYSTEM? If > -so, return the applicable machine type as a string. Otherwise, when > SYSTEM > -can use only the ``portable bytecode'' backends, return #f." > - (let ((chez-arch (target-chez-arch system)) > - (chez-os (target-chez-os system))) > - (and (and=> (assoc-ref %chez-features-table chez-os) > - ;; NOT assoc-ref: supported even if cdr is #f > - (cut assoc chez-arch <>)) > - (string-append "t" chez-arch chez-os)))) > - > +(define* (nix-system->native-chez-machine-type #:optional > + (system > + (or (%current- > target-system) > + (%current- > system))) > + #:key (threads? #t)) > + "Return a string naming the Chez Scheme machine type of the > native-code > +backend for SYSTEM, if such a native-code backend exists. > Otherwise, when > +SYSTEM can use only the ``portable bytecode'' backends, return #f. > The result > +will name the threaded machine type unless THREADS? is provided as > #f." > + (let* ((chez-arch (target-chez-arch system)) > + (chez-os (target-chez-os system)) > + (machine > + (and chez-arch chez-os > + (string-append (if threads? "t" "") chez-arch chez- > os)))) > + (and machine > + (memq (string->symbol machine) %machine-types) > + machine))) > ;; > ;; Chez Scheme: > ;; > @@ -300,7 +261,7 @@ (define-public chez-scheme-for-racket > (version "9.9.9-pre-release.23") > (source #f) > (build-system gnu-build-system) > - (inputs `(,@(if (racket-cs-native-supported-system?) > + (inputs `(,@(if (nix-system->native-chez-machine-type) > '() > (list libffi)) > ,chez-scheme-for-racket-bootstrap-bootfiles > @@ -353,10 +314,10 @@ (define-public chez-scheme-for-racket > (search-input-directory %build-inputs > "/include/X11")) > '() > '("--disable-x11")) > - #$(string-append "-m=" (or (racket-cs-native-supported- > system?) > + #$(string-append "-m=" (or (nix-system->native-chez- > machine-type) > (nix-system->pbarch-machine- > type))) > ;; ^ could skip -m= for non-cross non-pbarch builds > - #$@(if (racket-cs-native-supported-system?) > + #$@(if (nix-system->native-chez-machine-type) > #~() > ;; not inferred on non-native platforms: see > ;; https://racket.discourse.group/t/950/9 > @@ -588,7 +549,7 @@ (define-public chez-scheme-for-racket-bootstrap- > bootfiles > (invoke "./configure" > "--force" ; don't complain about missing > bootfiles > #$(string-append > - "-m=" (or (racket-cs-native- > supported-system?) > + "-m=" (or (nix-system->native-chez- > machine-type) > (nix-system->pbarch- > machine-type))) > "ZUO=zuo" > ;; ignore submodules: > diff --git a/gnu/packages/racket.scm b/gnu/packages/racket.scm > index d366f89845..f50f6f3eab 100644 > --- a/gnu/packages/racket.scm > +++ b/gnu/packages/racket.scm > @@ -433,7 +433,7 @@ (define-public racket-vm-cs > (inputs > (let ((inputs (modify-inputs (package-inputs racket-vm-cgc) > (prepend zlib lz4)))) > - (if (racket-cs-native-supported-system?) > + (if (nix-system->native-chez-machine-type) > (modify-inputs inputs > (delete "libffi")) > inputs))) > @@ -461,7 +461,7 @@ (define-public racket-vm-cs > #+(this-package-native-input > "chez-scheme-for-racket") > "/bin/scheme") > - #$@(if (racket-cs-native-supported-system?) > + #$@(if (nix-system->native-chez-machine-type) > #~() > #~(#$(string-append "--enable-mach=" > (nix-system->pbarch- > machine-type)) Cheers
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.