emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#62231: closed (Chez Scheme for Racket build on aarch64 (patch attach


From: GNU bug Tracking System
Subject: bug#62231: closed (Chez Scheme for Racket build on aarch64 (patch attached))
Date: Sun, 26 Mar 2023 14:27:02 +0000

Your message dated Sun, 26 Mar 2023 16:26:33 +0200
with message-id <87ilenbnc6.fsf_-_@gnu.org>
and subject line Re: bug#62231: Chez Scheme for Racket build on aarch64 (patch 
attached)
has caused the debbugs.gnu.org bug report #62231,
regarding Chez Scheme for Racket build on aarch64 (patch attached)
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
62231: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=62231
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: Chez Scheme for Racket build on aarch64 (patch attached) Date: Fri, 17 Mar 2023 00:23:46 +0100 User-agent: mu4e 1.8.13; emacs 29.0.60

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!

Attachment: chez-racket-aarch64.patch
Description: Text Data


--- End Message ---
--- Begin Message --- Subject: Re: bug#62231: Chez Scheme for Racket build on aarch64 (patch attached) Date: Sun, 26 Mar 2023 16:26:33 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Hi,

Tim Johann <t1m@phrogstar.de> skribis:

> commit e3c514db745d48e5ef7f7abb7b45037341298b17
> Author: Tim Johann <t1m@phrogstar.de>
> Date:   Fri Mar 24 21:09:52 2023 +0100
>
>     gnu: chez-scheme-for-racket-bootstrap-bootfiles: change for aarch64.
>     
>     * gnu/packages/chez.scm (chez-scheme-for-racket-bootstrap-bootfiles):
>       Temporary change for build on aarch64, making racket available on 
> aarch64.
>       Architecture autodetect in rktboot only addresses x86 archs, so far.
>       This work-around sets the architecture, looked up in translation table,
>       explicitly.  The long term solution should be to fix rktboot to include
>       other natively supported architectures in the autodetect mechanism.
>         cf. https://github.com/racket/racket/issues/3948
>       [arguments] use --machine even when architecture is supported by 
> Racket's
>       fork of ChezScheme.

Applied!

Thank you Tim, and thanks Philip for reviewing.

Tim: please use ‘git format-patch’ in the future; the format here cannot
be ingested as-is by ‘git am’.

Ludo’.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]