Hi Guix Team, tl;dr; The recipe for package 'chez-scheme-for-racket-bootstrap-bootfiles' (a dependency for racket-8.*) needs to use the --machine flag to build on aarch64 (and possibly also ppc32, the other non-x86 architectures supported by the Racket fork of Chez Scheme). I therefore suggest the attached patch to make building and using Racket possible on aarch64 Guix. End of tl;dr; 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. So, I dug deeper to find that the problem is that the package chez-scheme-for-racket-bootstrap-bootfiles fails with the error ,---- | string-append: contract violation | expected: string? | given: #f | argument position: 1st | other arguments...: | ".def" | context...: | /tmp/guix-build-chez-scheme-for-racket-bootstrap-bootfiles-9.9.9-pre-release.14.drv-0/source/racket/src/rktboot/machine-def.rkt:6:0: open-file-with-machine.def-redirect | error: in phase 'build': uncaught exception: | %exception #<&invoke-error program: "/gnu/store/0n4skakcg05bbq9sq7g00j2zm25xh4wa-racket-vm-bc-8.8/opt/racket-vm/bin/racket" arguments: ("../rktboot/main.rkt") exit-status: 1 term-signal: #f stop-signal: #f> | phase `build' failed after 14.3 seconds | command "/gnu/store/0n4skakcg05bbq9sq7g00j2zm25xh4wa-racket-vm-bc-8.8/opt/racket-vm/bin/racket" "../rktboot/main.rkt" failed with status 1 | builder for `/gnu/store/d04mbj02vzjv0ljcqy2lxs33scz7kjz0-chez-scheme-for-racket-bootstrap-bootfiles-9.9.9-pre-release.14.drv' failed with exit code 1 | @ build-failed /gnu/store/d04mbj02vzjv0ljcqy2lxs33scz7kjz0-chez-scheme-for-racket-bootstrap-bootfiles-9.9.9-pre-release.14.drv - 1 builder for `/gnu/store/d04mbj02vzjv0ljcqy2lxs33scz7kjz0-chez-scheme-for-racket-bootstrap-bootfiles-9.9.9-pre-release.14.drv' failed with exit code 1 `---- (see, e.g. the build [442314 on ci.guix.gnu.org]). The Racket fork of Chez is natively supported on aarch64, which is supported by comments in module (gnu packages chez), so I went on to find that machine architecture is communicated in the build process by setting the environment variable MACH. I haven't looked to verify this, but it seems that this environment variable is normally set to a guessed value by the zuo build process (zuo for 'make' in Mandarin?). The Guix build recipe for chez-scheme-for-racket-bootstrap-bootfiles, though, is not configuring the whole downloaded racket source package but takes the shortcut of just building ChezScheme in the subdirectory racket/src/ChezScheme 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. 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. The package (and subsequently Racket) builds on aarch64, the build on x86_64 seems to be unaffected. It is a simple change which would make a huge difference for Guix users who want to be able to play with Racket on an aarch64 machine. Cheers Tim Lá Fhéile Pádraig sona dhaoibh! [442314 on ci.guix.gnu.org]