GNU bug report logs - #57050
[PATCH 0/6] gnu: Update Racket to 8.6. Add Zuo.

Previous Next

Package: guix-patches;

Reported by: Philip McGrath <philip <at> philipmcgrath.com>

Date: Mon, 8 Aug 2022 06:07:02 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #152 received at 57050 <at> debbugs.gnu.org (full text, mbox):

From: "Philip McGrath" <philip <at> philipmcgrath.com>
To: "Liliana Marie Prikler" <liliana.prikler <at> ist.tugraz.at>,
 57050 <at> debbugs.gnu.org
Cc: Liliana Marie Prikler <liliana.prikler <at> gmail.com>,
 Thiago Jung Bauermann <bauermann <at> kolabnow.com>
Subject: Re: [PATCH v2 08/13] gnu: racket: Support cross-compiling the VM
 packages.
Date: Thu, 11 Aug 2022 19:23:15 -0400
Hi,

On Thu, Aug 11, 2022, at 7:58 AM, Liliana Marie Prikler wrote:
> Am Donnerstag, dem 11.08.2022 um 07:08 -0400 schrieb Philip McGrath:
>> Cross-compilation works for 'racket-vm-cgc', 'racket-vm-bc', and
>> 'racket-vm-cs'. These changes are not enough to cross-compile
>> 'racket-minimal' or 'racket': that would require building and loading
>> cross-compilation pluggins for 'racket-vm-cs', which will be much
> plugins
>> easier once we can build the package 'raco-cross'.
>> 
>> * gnu/packages/racket.scm (racket-vm-cgc): Add 'this-package' when
>> cross-compiling.
>> (racket-vm-bc)[native-inputs]: Adjust accordingly.
>> (racket-vm-cs)[native-inputs]: Use 'racket-vm-cs' instead of
>> 'racket-vm-bc' when cross-compiling. Adapt to changes to
>> 'racket-vm-cgc'.
> Is that needed?  Can racket-vm-cs not be "cross-bootstrapped"?

I'm not sure what "cross-bootstrapped" means.

Chez Scheme is more like GCC than LLVM in that it only generates code for one target at a time. Unlike GCC, you don't have a separate executable for each backend: the C part and the pure Scheme part can be shared. For cross-compilation, you generate an "xpatch" file, a compiler plugin somewhat like a bootfile, for the target machine type. You use it by loading it into a running `scheme` process: AIUI it, as a side-effect, mutates parts of the compiler to turn it into a compiler for the target architecture. Once an "xpatch" is loaded, some parts of the host functionality are no longer accessible. Racket provides a somewhat more convenient interface, including the ability to run a copy of itself in a subprocess to drive the compilation. In keeping with Racket's overall design, the VM layer provides only primitive hooks, leaving it up to packages to provide higher-level interfaces that deal with managing native- and cross-compiled files in parallel, dependency management, and other issues.

The shorter version is that I asked Matthew Flatt how he recommended managing cross-compilation, and he strongly suggested first getting non-cross package builds working well, then reusing as much of `raco cross` as possible.

-Philip




This bug report was last modified 2 years and 318 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.