gnu: chez-scheme-for-racket: Fix supported systems.
This commit fixes the treatment of systems like "powerpc-w64-mingw32",
where the combination of architecture and kernel is not supported, even
though both are supported in other combinations. The build failure fixed
in b8fc916951
highlighted this problem:
see also <https://issues.guix.gnu.org/54292#6>. The correct support
status is specified by '%chez-features-table', which was added to
improve 'chez-upstream-features-for-system': this commit uses it to fix
the repair.
Once the issues in <https://racket.discourse.group/t/950> are resolved,
'chez-scheme-for-racket' and 'racket-vm-cs' will be able to run even on
systems for which native code generation is not supported. It's not
clear what behavior would be useful from 'nix-system->chez-machine':
since the current implementation is flawed and easy to misuse, we remove
it for now, replacing the remaining uses with
'racket-cs-native-supported-system?'.
* gnu/packages/chez.scm (nix-system->chez-machine): Remove it.
(racket-cs-native-supported-system?): New variable.
(chez-scheme-for-racket)[supported-systems]: Use it.
* gnu/packages/racket.scm (racket-vm-for-system): Likewise.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
9322697636
commit
4c0ac41ba4
2 changed files with 22 additions and 17 deletions
|
@ -48,7 +48,7 @@
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
#:export (chez-scheme-for-system
|
#:export (chez-scheme-for-system
|
||||||
nix-system->chez-machine
|
racket-cs-native-supported-system?
|
||||||
unpack-nanopass+stex))
|
unpack-nanopass+stex))
|
||||||
|
|
||||||
;; Commentary:
|
;; Commentary:
|
||||||
|
@ -132,19 +132,6 @@ in Chez Scheme machine types, or '#f' if none is defined."
|
||||||
(else
|
(else
|
||||||
#f)))
|
#f)))
|
||||||
|
|
||||||
(define* (nix-system->chez-machine #:optional
|
|
||||||
(system (or (%current-target-system)
|
|
||||||
(%current-system))))
|
|
||||||
"Return the Chez Scheme machine type corresponding to the Nix system
|
|
||||||
identifier SYSTEM, or @code{#f} if the translation of SYSTEM to a Chez Scheme
|
|
||||||
machine type is undefined.
|
|
||||||
|
|
||||||
It is unspecified whether the resulting string will name a threaded or a
|
|
||||||
nonthreaded machine type."
|
|
||||||
(let* ((chez-arch (target-chez-arch system))
|
|
||||||
(chez-os (target-chez-os system)))
|
|
||||||
(and chez-arch chez-os (string-append chez-arch chez-os))))
|
|
||||||
|
|
||||||
(define %chez-features-table
|
(define %chez-features-table
|
||||||
;; An alist of alists mapping:
|
;; An alist of alists mapping:
|
||||||
;; os -> arch -> (or/c #f (listof symbol?))
|
;; os -> arch -> (or/c #f (listof symbol?))
|
||||||
|
@ -233,6 +220,19 @@ future."
|
||||||
(and=> (assoc-ref %chez-features-table chez-os)
|
(and=> (assoc-ref %chez-features-table chez-os)
|
||||||
(cut assoc-ref <> chez-arch))))
|
(cut assoc-ref <> chez-arch))))
|
||||||
|
|
||||||
|
(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?
|
||||||
|
Otherwise, SYSTEM can use only the ``portable bytecode'' backends."
|
||||||
|
(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 <>))
|
||||||
|
#t)))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Chez Scheme:
|
;; Chez Scheme:
|
||||||
;;
|
;;
|
||||||
|
@ -459,7 +459,9 @@ and 32-bit PowerPC architectures.")
|
||||||
(add-after 'unpack 'chdir
|
(add-after 'unpack 'chdir
|
||||||
(lambda args
|
(lambda args
|
||||||
(chdir "racket/src/ChezScheme"))))))))
|
(chdir "racket/src/ChezScheme"))))))))
|
||||||
(supported-systems (filter nix-system->chez-machine
|
;; TODO: How to build pbarch/pbchunks for other systems?
|
||||||
|
;; See https://racket.discourse.group/t/950
|
||||||
|
(supported-systems (filter racket-cs-native-supported-system?
|
||||||
%supported-systems))
|
%supported-systems))
|
||||||
(home-page "https://github.com/racket/ChezScheme")
|
(home-page "https://github.com/racket/ChezScheme")
|
||||||
;; ^ This is downstream of https://github.com/racket/racket,
|
;; ^ This is downstream of https://github.com/racket/racket,
|
||||||
|
|
|
@ -190,8 +190,11 @@
|
||||||
(define* (racket-vm-for-system #:optional
|
(define* (racket-vm-for-system #:optional
|
||||||
(system (or (%current-target-system)
|
(system (or (%current-target-system)
|
||||||
(%current-system))))
|
(%current-system))))
|
||||||
"Return 'racket-vm-cs' if it supports SYSTEM; 'racket-vm-bc' otherwise."
|
"Return 'racket-vm-cs' if we are able to build it for SYSTEM; 'racket-vm-bc'
|
||||||
(if (nix-system->chez-machine system)
|
otherwise."
|
||||||
|
;; Once we figure out the issues in https://racket.discourse.group/t/950,
|
||||||
|
;; we can use 'racket-vm-cs' everywhere.
|
||||||
|
(if (racket-cs-native-supported-system? system)
|
||||||
racket-vm-cs
|
racket-vm-cs
|
||||||
racket-vm-bc))
|
racket-vm-bc))
|
||||||
|
|
||||||
|
|
Reference in a new issue