GNU bug report logs -
#62231
Chez Scheme for Racket build on aarch64 (patch attached)
Previous Next
Reported by: Tim Johann <t1m <at> phrogstar.de>
Date: Fri, 17 Mar 2023 05:03:01 UTC
Severity: normal
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Hi Tim,
On Thursday, March 16, 2023 7:23:46 PM EDT Tim Johann wrote:
> A few weeks ago I wanted to use Racket on Guix on aarch64, but was made
> aware, that Racket was not available as a substitute and it did not build.
> On the other hand, recent versions of Racket were available on Raspberry Pi
> OS which is explicitly running on aarch64. The machine I am running Guix
> on actually is a Raspberry Pi 4B.
>
Thanks again for your investigation of this problem! As I commented on the
upstream issue at <https://github.com/racket/racket/issues/3948>, I still
think this is an upstream bug (and your analysis helped a great deal in finding
the root cause), but the approach in your patch is probably the easiest way to
fix things for Guix users for now. I'd just ask that you add a comment
referencing the upstream issue and with some explanation, because it's not my
preferred long-term approach.
>
> [...]
>
> using the Racket utility
> ../rktboot/main.rkt
> This script would actually accept the flag '--machine' and would set the
> environment variable MACH to the value of the argument following the flag.
>
> The problem is that in the case of aarch64 the recipe would not set the
> flag. In the recipe for chez-scheme-for-racket-bootstrap-bootfiles in
> module (gnu packages chez), we find the lines
> ,----
>
> | #~(invoke
> |
> | (search-input-file (or native-inputs inputs)
> |
> | "/opt/racket-vm/bin/racket")
> |
> | "../rktboot/main.rkt"
> | #$@(if (racket-cs-native-supported-system?)
> |
> | #~()
> | (let ((m (nix-system->pbarch-machine-type)))
> |
> | #~("--machine" #$m)))))))))))))
>
> `----
> and, since `(racket-cs-native-supported-system?)' returns `tarm64le', the
> first branch of the if expression is taken, ommitting the flag.
>
The "rktboot" scripts (which simulate enough of Chez Scheme to bootstrap its
bootfiles) are supposed to be able to infer right machine type for the current
platform, at least if the platform is natively supported. The problem is that
the upstream code to doesn't actually work on architectures other than i386
and x86_64.
> I suggest to change the above code to the following:
> ,----
>
> | #~(invoke
> |
> | (search-input-file (or native-inputs inputs)
> |
> | "/opt/racket-vm/bin/racket")
> |
> | "../rktboot/main.rkt"
> | #$@(let ((m (or (racket-cs-native-supported-system?)
> |
> | (nix-system->pbarch-machine-type))))
> |
> | #~("--machine" #$m))))))))))))
>
> `----
> which sets the flag for natively supported architectures and those supported
> by portable bytecode.
This is a good work-around. The reason I'd like to avoid it in the long run is
that, ideally, I'd like to get us out of the business of managing Chez machine
types and the translation from normal architecture and OS strings. I think
we'll at least be able to eliminate `%chez-features-table` once the ongoing
work to reunify upstream Chez Scheme with Racket's branch is complete.
Reducing the number of places where we have to use these machine-type-
producing functions should help advance that goal, so I'd prefer to have a
comment here reminding us that we can reconsider "--machine" once <https://
github.com/racket/racket/issues/3948> is fixed.
-Philip
[signature.asc (application/pgp-signature, inline)]
This bug report was last modified 2 years and 56 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.