From unknown Wed Jun 25 03:51:21 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#55321 <55321@debbugs.gnu.org> To: bug#55321 <55321@debbugs.gnu.org> Subject: Status: Document building for foreign architectures Reply-To: bug#55321 <55321@debbugs.gnu.org> Date: Wed, 25 Jun 2025 10:51:21 +0000 retitle 55321 Document building for foreign architectures reassign 55321 guix-patches submitter 55321 Mathieu Othacehe severity 55321 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Sun May 08 13:52:44 2022 Received: (at submit) by debbugs.gnu.org; 8 May 2022 17:52:44 +0000 Received: from localhost ([127.0.0.1]:55178 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nnl5H-00056o-MG for submit@debbugs.gnu.org; Sun, 08 May 2022 13:52:44 -0400 Received: from lists.gnu.org ([209.51.188.17]:50072) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nnl5G-00056g-13 for submit@debbugs.gnu.org; Sun, 08 May 2022 13:52:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52816) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nnl5F-0007OO-Pd for guix-patches@gnu.org; Sun, 08 May 2022 13:52:41 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36414) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nnl5F-0007Vp-HB for guix-patches@gnu.org; Sun, 08 May 2022 13:52:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:Subject:To:From:in-reply-to: references; bh=zs2yC3ksNgeH7c/mVW3VnIuYiMusMkdsvNpPTZ+KG2g=; b=A3R69Aaxc6ZWFH BqzFyi5xKtsb7AYHcf4ahgri4uKv/NrPRZIhgLYPxGsM9bTLFcMCnHGrm/2SSiAbx3okMlHbHg3XF h3qtmDz1GDEXgbuR8kPTeNCzrXlGzbAxkanz7eYR365tR9dD6GBZXlww2mZul2kxI+V+Z5Q2WLXVB SjDDcj+fok4M9mxELC7eNPwuHpwv53PSBUHz8iPGExtpa4txZ6qKJLUN3r2is0IcyhA5J743xdOiP n55mcxGt5E3Ss+ZAqOe48tbs8c/15h4zYa/hlcLydwIhwHKcHzlouuQwugYI5XTps6avyymalxeYr Smk4LxFBL9UZBcKkIFOw==; Received: from 71.125.192.77.rev.sfr.net ([77.192.125.71]:40362 helo=meije) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nnl5E-0002lN-Uf for guix-patches@gnu.org; Sun, 08 May 2022 13:52:41 -0400 From: Mathieu Othacehe To: guix-patches@gnu.org Subject: Document building for foreign architectures User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) Date: Sun, 08 May 2022 19:52:38 +0200 Message-ID: <87k0avdi8p.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) --=-=-= Content-Type: text/plain Hello, This is a follow-up of https://issues.guix.gnu.org/55220 that is still in discussion. If we were to create a top 10 of the most asked questions on #guix, "What is --target, what's the difference with --system?", and "Why --system=aarch64-linux isn't working on my machine?" would be in good position I guess. This patch builds upon the proposed introduction of --list-systems/--list-targets options as well as --system/--target argument checking to document how to build for foreign architectures. I hope that this will shed some light on the matter. Thanks, Mathieu --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-scripts-build-Highlight-the-current-system-with-list.patch >From e1fde962a334c6a5c0f855aaf3e11fa9ea73b2d0 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Sun, 8 May 2022 18:52:33 +0200 Subject: [PATCH 1/2] scripts: build: Highlight the current system with --list-systems. * guix/scripts/build.scm (list-systems): Highlight it. --- guix/scripts/build.scm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm index a09c54451f..4383a399a0 100644 --- a/guix/scripts/build.scm +++ b/guix/scripts/build.scm @@ -21,6 +21,7 @@ (define-module (guix scripts build) #:use-module (guix ui) + #:use-module (guix colors) #:use-module (guix scripts) #:autoload (guix import json) (json->scheme-file) #:use-module (guix store) @@ -342,8 +343,15 @@ (define (list-systems) "Print the available systems." (display (G_ "The available systems are:\n")) (newline) - (format #t "~{ - ~a ~%~}" - (sort (systems) stringFrom 3d70b0f67a0bcbe16d6f5eaea47410a3f526af05 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Sun, 8 May 2022 19:43:47 +0200 Subject: [PATCH 2/2] doc: Add a 'Foreign architectures' chapter. * doc/guix.texi ("Foreign architectures"): New chapter. --- doc/guix.texi | 173 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 172 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index 1dc1474ec7..55c0049411 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -41,7 +41,7 @@ Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021= Julien Lepiller@* Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Christopher Bain= es@* Copyright @copyright{} 2017, 2018, 2019 Cl=C3=A9ment Lassieur@* -Copyright @copyright{} 2017, 2018, 2020, 2021 Mathieu Othacehe@* +Copyright @copyright{} 2017, 2018, 2020, 2021, 2022 Mathieu Othacehe@* Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017, 2018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@* @@ -173,6 +173,7 @@ Weblate} (@pxref{Translating Guix}). * Development:: Guix-aided software development. * Programming Interface:: Using Guix in Scheme. * Utilities:: Package management commands. +* Foreign architectures:: Build for foreign architectures. * System Configuration:: Configuring the operating system. * Home Configuration:: Configuring the home environment. * Documentation:: Browsing software user manuals. @@ -320,6 +321,10 @@ Invoking @command{guix build} * Additional Build Options:: Options specific to 'guix build'. * Debugging Build Failures:: Real life packaging experience. =20 +Foreign architectures +* Using cross-compilation:: Build for foreign architecture using cross-co= mpilation. +* Using native building:: Build for foreign architectures natively. + System Configuration =20 * Using the Configuration System:: Customizing your GNU system. @@ -14814,6 +14819,172 @@ Session_PID: 4278 @end table @end table =20 +@node Foreign architectures +@chapter Foreign architectures + +You might need to use GNU Guix to produce packages (@pxref{Invoking guix +package}), packs (@pxref{Invoking guix pack}) or even full systems +(@pxref{Invoking guix system}) targeting computers with different CPU +architectures than the one of your current CPU. + +GNU Guix supports two distinct mechanisms to target foreign +architectures: + +@enumerate +@item +The first one is the traditional +@uref{https://en.wikipedia.org/wiki/Cross_compiler,cross-compilation} +mechanism. +@item +The second one, called native building, consists in building using the +CPU instruction set of the foreign system you are targeting. It often +requires emulation, using the QEMU program for instance. +@end enumerate + +@menu +* Using cross-compilation:: Build for foreign architecture using cross-co= mpilation. +* Using native building:: Build for foreign architectures natively. +@end menu + +@node Using cross-compilation +@section Using cross-compilation + +@cindex foreign architectures +The GNU Guix commands supporting cross-compilation are proposing the +@option{--list-targets} and @option{--target} options. + +The @option{--list-targets} option lists all the supported targets that +can be passed as an argument to @option{--target}. + +@example +$ guix build --list-targets +The available targets are: + + - aarch64-linux-gnu + - arm-linux-gnueabihf + - i586-pc-gnu + - i686-linux-gnu + - i686-w64-mingw32 + - mips64el-linux-gnu + - powerpc-linux-gnu + - powerpc64le-linux-gnu + - riscv64-linux-gnu + - s390x-linux-gnu + - x86_64-linux-gnu + - x86_64-w64-mingw32 +@end example + +The targets are specified as GNU triplets (@pxref{Specifying Target +Triplets, GNU configuration triplets,, autoconf, Autoconf}). + +Those triplets are passed to GCC and the other underlying compilers +possibly involved when building a package, a system image or any other +GNU Guix output. + +@example +$ guix build --target=3Daarch64-linux-gnu hello +/gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12 + +$ file /gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12/bin/hello +/gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12/bin/hello: ELF +64-bit LSB executable, ARM aarch64 @dots{} +@end example + +The major benefit of cross-compilation is that there are no performance +penalties compared to emulation using QEMU. There are however higher +risks that some packages are failing to cross-compile because few GNU +Guix users are using this mecanism extensively. + +@node Using native building +@section Using native building + +The GNU Guix commands supporting to impersonate a specific system are +proposing the @option{--list-systems} and @option{--system} options. + +The @option{--list-systems} option lists all the supported systems that +can be passed as an argument to @option{--system}. + +@example +$ guix build --list-systems +The available systems are: + + - x86_64-linux [current] + - aarch64-linux + - armhf-linux + - i586-gnu + - i686-linux + - mips64el-linux + - powerpc-linux + - powerpc64le-linux + - riscv64-linux + - s390x-linux + +$ guix build --system=3Di686-linux hello +/gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12 + +$ file /gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12/bin/hello +/gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12/bin/hello: ELF +32-bit LSB executable, Intel 80386 @dots{} +@end example + +In the above example, the GNU Guix current system is @var{x86_64-linux}. +The @var{hello} package is however built for the @var{i686-linux} +system. + +This is possible because the @var{i686} CPU instruction set is a subset +of the @var{x86_64}, hence @var{i686} targeting binaries can be run on +@var{x86_64}. + +Still in the context of the previous example, if picking the +@var{aarch64-linux} system and the @command{guix build +--system=3Daarch64-linux hello} has to build some derivations, an extra +step might be needed. + +The @var{aarch64-linux} targeting binaries cannot directly be run on a +@var{x86_64-linux} system. An emulation layer is requested. The GNU +Guix daemon can take advantage of the Linux kernel +@uref{https://en.wikipedia.org/wiki/Binfmt_misc,binfmt_misc} mechanism +for that. In short, the Linux kernel can defer the execution of a +binary targeting a foreign platform, here @var{aarch64-linux}, to a +userspace program, usually an emulator. + +There is a GNU Guix service that registers QEMU as a backend for the +@code{binfmt_misc} mechanism (@pxref{Virtualization Services, +@code{qemu-binfmt-service-type}}). On Debian based foreign +distributions, the alternative would be the @code{qemu-user-static} +package. + +If the @code{binfmt_misc} mechanism is not setup correctly, the building +will fail this way: + +@example +$ guix build --system=3Darmhf-linux hello --check +@dots{} +@ unsupported-platform /gnu/store/jjn969pijv7hff62025yxpfmc8zy0aq0-hello-2= .12.drv aarch64-linux +while setting up the build environment: a `aarch64-linux' is required to +build `/gnu/store/jjn969pijv7hff62025yxpfmc8zy0aq0-hello-2.12.drv', but +I am a `x86_64-linux'@dots{} +@end example + +whereas, with the @code{binfmt_misc} mechanism correctly linked with +QEMU, one can expect to see: + +@example +$ guix build --system=3Darmhf-linux hello --check + +@end example + +The main advantage of native building compared to cross-compiling, is +that more packages are likely to build correctly. However it comes at a +price: compilation backed by QEMU is @emph{way slower} than +cross-compilation, because every instruction needs to be emulated. + +The availability of substitutes for the architecture targeted by the +@code{--system} option can mitigate this problem. An other way to work +around it is to install GNU Guix on a machine which CPU is supporting +the targeted instruction set, an set it up as an offload machine +(@pxref{Daemon Offload Setup}). + @node System Configuration @chapter System Configuration =20 --=20 2.36.0 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat May 21 22:42:20 2022 Received: (at 55321) by debbugs.gnu.org; 22 May 2022 02:42:20 +0000 Received: from localhost ([127.0.0.1]:43321 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nsbXv-0005S5-BK for submit@debbugs.gnu.org; Sat, 21 May 2022 22:42:19 -0400 Received: from mail-qk1-f174.google.com ([209.85.222.174]:33539) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nsbXr-0005Rq-HP for 55321@debbugs.gnu.org; Sat, 21 May 2022 22:42:17 -0400 Received: by mail-qk1-f174.google.com with SMTP id bs17so10701088qkb.0 for <55321@debbugs.gnu.org>; Sat, 21 May 2022 19:42:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=OddAH1edAXXSUHWRZBziU1NPzPrU09UVxm26xCUBDV0=; b=BNlYQSgAQHCuOZNS91hBat1Y7u4jTYUifrv5Syhkt494dtTt2BnpzoNjNiARemGKaF csuH0X0Rgoeq4ISzwnKc7PuOZUNTo3MKJIPdSk7vEvxTqSCUAQQ04reEIbDrytR4HmdR 0a2n6fU/vnDQuNvtEFmk9PL8sLCf9W7vASkvB6eK4GWr5kVvrteA8jYDyaFNU+RUE7gq ysJkJlnCVoiX4C0ds8ktHfG4hlvIT6asdxNY3j9bsaBIESbwPRIWSDNBiJ5C9+2DXBLw YUR5l29gH/R8onDvpLi1dg8TtwK/yUewm8Pb2ZRuFDguXV9ZopYjm9QbGxX+arlpShZI opww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=OddAH1edAXXSUHWRZBziU1NPzPrU09UVxm26xCUBDV0=; b=GYBI3ulalW1B3MZ5FGs48Lia0ieDBtcKdOdr5xun0kzDd23QChyVq5yXo2E5N9irEd PMDQ/btwYbVQ6qHJigfUUhDd4jYAoypIKYsJkR8bgjw1HzzUaY+UxutBLenAXbQz4IhG 4elI/D3Qapr51pnE9eBu4InSFc7jWDzot/nxWOLTUbcAPFk2A+jVbuxdpI0thR8++Inb hX2qgzTrOFGYxMN+LdsSCiV9nmI6nD3XFRFhFsiMalcA3A3CUnAmOY9pT7Z6VpOzfWui OE5QHG8HmvVQkT7fXv4bcNC2e3eIb4rdPeM9iyMSkAw08JyUZ+D4MMDKLi1401lGZN1V cQGQ== X-Gm-Message-State: AOAM530QsoeNmt4galaGoyz5/AKZKcVf9ffuZDkd0l9dKDRRCw4rHHHW C6MWbBX9Kb4I8ZV9KU12gPaqYmGD/f+mYwQ6 X-Google-Smtp-Source: ABdhPJyh+VYsuh3QueHcEQcOMRasvmF7+8nL+EOTtSApv7bh5e+VOF9sqrYibJiT1EFI2ku2h6IWcg== X-Received: by 2002:a05:620a:3711:b0:6a3:83ff:11dc with SMTP id de17-20020a05620a371100b006a383ff11dcmr23448qkb.685.1653187329613; Sat, 21 May 2022 19:42:09 -0700 (PDT) Received: from hurd (dsl-152-80.b2b2c.ca. [66.158.152.80]) by smtp.gmail.com with ESMTPSA id t184-20020a3791c1000000b0069fc13ce209sm2221681qkd.58.2022.05.21.19.42.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 May 2022 19:42:09 -0700 (PDT) From: Maxim Cournoyer To: Mathieu Othacehe Subject: Re: bug#55321: Document building for foreign architectures References: <87k0avdi8p.fsf@gnu.org> Date: Sat, 21 May 2022 22:42:08 -0400 In-Reply-To: <87k0avdi8p.fsf@gnu.org> (Mathieu Othacehe's message of "Sun, 08 May 2022 19:52:38 +0200") Message-ID: <871qwm9tkv.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 55321 Cc: 55321@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi again, Mathieu Othacehe writes: > Hello, > > This is a follow-up of https://issues.guix.gnu.org/55220 that is still > in discussion. > > If we were to create a top 10 of the most asked questions on #guix, > "What is --target, what's the difference with --system?", and "Why > --system=3Daarch64-linux isn't working on my machine?" would be in good > position I guess. > > This patch builds upon the proposed introduction of > --list-systems/--list-targets options as well as --system/--target > argument checking to document how to build for foreign architectures. > > I hope that this will shed some light on the matter. > > Thanks, > > Mathieu > >>>From e1fde962a334c6a5c0f855aaf3e11fa9ea73b2d0 Mon Sep 17 00:00:00 2001 > From: Mathieu Othacehe > Date: Sun, 8 May 2022 18:52:33 +0200 > Subject: [PATCH 1/2] scripts: build: Highlight the current system with > --list-systems. > > * guix/scripts/build.scm (list-systems): Highlight it. > --- > guix/scripts/build.scm | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm > index a09c54451f..4383a399a0 100644 > --- a/guix/scripts/build.scm > +++ b/guix/scripts/build.scm > @@ -21,6 +21,7 @@ >=20=20 > (define-module (guix scripts build) > #:use-module (guix ui) > + #:use-module (guix colors) > #:use-module (guix scripts) > #:autoload (guix import json) (json->scheme-file) > #:use-module (guix store) > @@ -342,8 +343,15 @@ (define (list-systems) > "Print the available systems." > (display (G_ "The available systems are:\n")) > (newline) > - (format #t "~{ - ~a ~%~}" > - (sort (systems) string + (let ((systems* > + (map (lambda (system) > + (if (string=3D? system (%current-system)) > + (highlight > + (string-append system " [current]")) > + system)) > + (systems)))) > + (format #t "~{ - ~a ~%~}" > + (sort systems* string=20=20 > (define (list-targets) > "Print the available targets." > --=20 > 2.36.0 > >>>From 3d70b0f67a0bcbe16d6f5eaea47410a3f526af05 Mon Sep 17 00:00:00 2001 > From: Mathieu Othacehe > Date: Sun, 8 May 2022 19:43:47 +0200 > Subject: [PATCH 2/2] doc: Add a 'Foreign architectures' chapter. > > * doc/guix.texi ("Foreign architectures"): New chapter. > --- > doc/guix.texi | 173 +++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 172 insertions(+), 1 deletion(-) > > diff --git a/doc/guix.texi b/doc/guix.texi > index 1dc1474ec7..55c0049411 100644 > --- a/doc/guix.texi > +++ b/doc/guix.texi > @@ -41,7 +41,7 @@ Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 20= 21 Julien Lepiller@* > Copyright @copyright{} 2016 Alex ter Weele@* > Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Christopher Ba= ines@* > Copyright @copyright{} 2017, 2018, 2019 Cl=C3=A9ment Lassieur@* > -Copyright @copyright{} 2017, 2018, 2020, 2021 Mathieu Othacehe@* > +Copyright @copyright{} 2017, 2018, 2020, 2021, 2022 Mathieu Othacehe@* > Copyright @copyright{} 2017 Federico Beffa@* > Copyright @copyright{} 2017, 2018 Carlo Zancanaro@* > Copyright @copyright{} 2017 Thomas Danckaert@* > @@ -173,6 +173,7 @@ Weblate} (@pxref{Translating Guix}). > * Development:: Guix-aided software development. > * Programming Interface:: Using Guix in Scheme. > * Utilities:: Package management commands. > +* Foreign architectures:: Build for foreign architectures. > * System Configuration:: Configuring the operating system. > * Home Configuration:: Configuring the home environment. > * Documentation:: Browsing software user manuals. > @@ -320,6 +321,10 @@ Invoking @command{guix build} > * Additional Build Options:: Options specific to 'guix build'. > * Debugging Build Failures:: Real life packaging experience. >=20=20 > +Foreign architectures > +* Using cross-compilation:: Build for foreign architecture using cross-= compilation. > +* Using native building:: Build for foreign architectures natively. > + > System Configuration >=20=20 > * Using the Configuration System:: Customizing your GNU system. > @@ -14814,6 +14819,172 @@ Session_PID: 4278 > @end table > @end table >=20=20 > +@node Foreign architectures > +@chapter Foreign architectures > + > +You might need to use GNU Guix to produce packages (@pxref{Invoking guix > +package}), packs (@pxref{Invoking guix pack}) or even full systems > +(@pxref{Invoking guix system}) targeting computers with different CPU > +architectures than the one of your current CPU. Nitpick, but I'd perhaps invert this long sentence to something like "GNU Guix can target computers of different CPU architectures when producing packages, packs or full systems". > + > +GNU Guix supports two distinct mechanisms to target foreign > +architectures: > + > +@enumerate > +@item > +The first one is the traditional > +@uref{https://en.wikipedia.org/wiki/Cross_compiler,cross-compilation} > +mechanism. > +@item > +The second one, called native building, consists in building using the > +CPU instruction set of the foreign system you are targeting. It often > +requires emulation, using the QEMU program for instance. > +@end enumerate Since you are already enumerating the entries, I'd forego with "The first one," and "The second one,", which seems redundant to me. > +@menu > +* Using cross-compilation:: Build for foreign architecture using cross-= compilation. > +* Using native building:: Build for foreign architectures natively. > +@end menu > + > +@node Using cross-compilation > +@section Using cross-compilation > + > +@cindex foreign architectures > +The GNU Guix commands supporting cross-compilation are proposing the > +@option{--list-targets} and @option{--target} options. > + > +The @option{--list-targets} option lists all the supported targets that > +can be passed as an argument to @option{--target}. > + > +@example > +$ guix build --list-targets > +The available targets are: > + > + - aarch64-linux-gnu > + - arm-linux-gnueabihf > + - i586-pc-gnu > + - i686-linux-gnu > + - i686-w64-mingw32 > + - mips64el-linux-gnu > + - powerpc-linux-gnu > + - powerpc64le-linux-gnu > + - riscv64-linux-gnu > + - s390x-linux-gnu > + - x86_64-linux-gnu > + - x86_64-w64-mingw32 > +@end example > + > +The targets are specified as GNU triplets (@pxref{Specifying Target > +Triplets, GNU configuration triplets,, autoconf, Autoconf}). > + > +Those triplets are passed to GCC and the other underlying compilers > +possibly involved when building a package, a system image or any other > +GNU Guix output. > + > +@example > +$ guix build --target=3Daarch64-linux-gnu hello > +/gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12 > + > +$ file /gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12/bin/hello > +/gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12/bin/hello: ELF > +64-bit LSB executable, ARM aarch64 @dots{} > +@end example > + > +The major benefit of cross-compilation is that there are no performance > +penalties compared to emulation using QEMU. There are however higher nitpick: perhaps use singular "no performance penalty". > +risks that some packages are failing to cross-compile because few GNU ^ fail [to cross-compile ...] > +Guix users are using this mecanism extensively. > + > +@node Using native building > +@section Using native building > + > +The GNU Guix commands supporting to impersonate a specific system are ^ "that support impersonating", perhaps? =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 > +proposing the @option{--list-systems} and @option{--system} options. Perhaps s/are proposing/have/. > +The @option{--list-systems} option lists all the supported systems that > +can be passed as an argument to @option{--system}. > + > +@example > +$ guix build --list-systems > +The available systems are: > + > + - x86_64-linux [current] > + - aarch64-linux > + - armhf-linux > + - i586-gnu > + - i686-linux > + - mips64el-linux > + - powerpc-linux > + - powerpc64le-linux > + - riscv64-linux > + - s390x-linux > + > +$ guix build --system=3Di686-linux hello > +/gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12 > + > +$ file /gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12/bin/hello > +/gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12/bin/hello: ELF > +32-bit LSB executable, Intel 80386 @dots{} > +@end example > + > +In the above example, the GNU Guix current system is @var{x86_64-linux}. > +The @var{hello} package is however built for the @var{i686-linux} > +system. > + > +This is possible because the @var{i686} CPU instruction set is a subset > +of the @var{x86_64}, hence @var{i686} targeting binaries can be run on > +@var{x86_64}. > + > +Still in the context of the previous example, if picking the > +@var{aarch64-linux} system and the @command{guix build > +--system=3Daarch64-linux hello} has to build some derivations, an extra > +step might be needed. > + > +The @var{aarch64-linux} targeting binaries cannot directly be run on a > +@var{x86_64-linux} system. An emulation layer is requested. The GNU ^ needed. > +Guix daemon can take advantage of the Linux kernel > +@uref{https://en.wikipedia.org/wiki/Binfmt_misc,binfmt_misc} mechanism > +for that. In short, the Linux kernel can defer the execution of a > +binary targeting a foreign platform, here @var{aarch64-linux}, to a > +userspace program, usually an emulator. > + > +There is a GNU Guix service that registers QEMU as a backend for the > +@code{binfmt_misc} mechanism (@pxref{Virtualization Services, > +@code{qemu-binfmt-service-type}}). On Debian based foreign ^Debian-based > +distributions, the alternative would be the @code{qemu-user-static} > +package. > + > +If the @code{binfmt_misc} mechanism is not setup correctly, the building > +will fail this way: > + > +@example > +$ guix build --system=3Darmhf-linux hello --check > +@dots{} > +@ unsupported-platform /gnu/store/jjn969pijv7hff62025yxpfmc8zy0aq0-hello= -2.12.drv aarch64-linux > +while setting up the build environment: a `aarch64-linux' is required to > +build `/gnu/store/jjn969pijv7hff62025yxpfmc8zy0aq0-hello-2.12.drv', but > +I am a `x86_64-linux'@dots{} > +@end example > + > +whereas, with the @code{binfmt_misc} mechanism correctly linked with > +QEMU, one can expect to see: > + > +@example > +$ guix build --system=3Darmhf-linux hello --check > + > +@end example > + > +The main advantage of native building compared to cross-compiling, is > +that more packages are likely to build correctly. However it comes at a > +price: compilation backed by QEMU is @emph{way slower} than > +cross-compilation, because every instruction needs to be emulated. > + > +The availability of substitutes for the architecture targeted by the > +@code{--system} option can mitigate this problem. An other way to work > +around it is to install GNU Guix on a machine which CPU is supporting > +the targeted instruction set, an set it up as an offload machine > +(@pxref{Daemon Offload Setup}). > + > @node System Configuration > @chapter System Configuration This is very detailed and will cover many use cases that people would have had to figure themselves before. Thank you! LGTM with my small comments above. Maxim From debbugs-submit-bounces@debbugs.gnu.org Sun May 22 09:14:52 2022 Received: (at 55321-done) by debbugs.gnu.org; 22 May 2022 13:14:52 +0000 Received: from localhost ([127.0.0.1]:43954 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nslQ3-000623-Ot for submit@debbugs.gnu.org; Sun, 22 May 2022 09:14:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:40574) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nslQ1-00061p-E8 for 55321-done@debbugs.gnu.org; Sun, 22 May 2022 09:14:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40748) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nslPw-0002s7-7v; Sun, 22 May 2022 09:14:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To: From; bh=HKUpI/AbKTPFcVn2Lo6sfbUO1CSZBrGaRVDhp0koU9Q=; b=Ny+35s1evoJXctJSekz3 ThsBJbgREWki8QYAX+/svHExDm6cb6Mi16dPCF3O9+H3HSJFd7/EjJzTilRmX4cRMfX/oWTDw1HdD kzWYeww4nSujPPwPHk3TXXlHLipBpP2JFRr5NRmiMWl3N1dA+Ge9AOU21IGMNui0qiNJm2BuNswjJ PtVKTHsj3S1sL7b0EoEZDifrbIT3pM/K1yxdokIaP7ikJvAAwZQaVtTcjxXrBeEdM/nfi5FM+M/XR q/EJu+ra2MmlFxWS+898k4stVdQ6iilhjaqCq1leIgeiK0zWgagC9wtQD+cdz6RYhJymJOIWwwibp 5JLd3aW9Hhaoaw==; Received: from [109.190.253.11] (port=41306 helo=meije) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nslPu-00087X-DJ; Sun, 22 May 2022 09:14:43 -0400 From: Mathieu Othacehe To: Maxim Cournoyer Subject: Re: bug#55321: Document building for foreign architectures References: <87k0avdi8p.fsf@gnu.org> <871qwm9tkv.fsf@gmail.com> Date: Sun, 22 May 2022 15:14:37 +0200 In-Reply-To: <871qwm9tkv.fsf@gmail.com> (Maxim Cournoyer's message of "Sat, 21 May 2022 22:42:08 -0400") Message-ID: <87v8txd802.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 55321-done Cc: 55321-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hey, > This is very detailed and will cover many use cases that people would > have had to figure themselves before. > > Thank you! LGTM with my small comments above. I'm glad that you like it and fixed your remarks before pushed the whole series. Thanks Ludo, Maxime and Maxim for having a look to it ;). Mathieu From debbugs-submit-bounces@debbugs.gnu.org Sun May 22 16:47:23 2022 Received: (at 55321) by debbugs.gnu.org; 22 May 2022 20:47:23 +0000 Received: from localhost ([127.0.0.1]:46530 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nssTz-0001bU-27 for submit@debbugs.gnu.org; Sun, 22 May 2022 16:47:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45356) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nssTx-0001bI-P8 for 55321@debbugs.gnu.org; Sun, 22 May 2022 16:47:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46466) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nssTs-0000XS-GF for 55321@debbugs.gnu.org; Sun, 22 May 2022 16:47:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To: From; bh=P6CLd3Dqe+jvkvs+aOpfWqG6p8CD7CXr9dMkTafAncY=; b=d6M3exlYKpZHqEmkc+pW wgd/bguCifuao16y4CqKskUFXugr2/pf6HSG8dqBT4mJ2S5f9ndVWOka3nTVphAlDhBDmw/nisSPs ZDqhncDEeTdKI+yADI5NzWJ+latcMT146RNMCycBs8HVY0mJePBr15ei7xDOn0VCsIjbAoHBG2Uws 71eopa52ED60/le+XW9qfXfTcAuiirAYleF1oyzGgeaDXGAickkdhboQQEWHmziXUi3qVOUpDEmm/ MSe0MIAD9W0qhNDRaKm1s4yVnLo6AmTmvvajfIuIZLcL/B8dtcRKl0G+CTFxC54MjuR0GvDD0EFVi NJ0L9pyawvHs6Q==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:55232 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nssTs-0003ZC-07; Sun, 22 May 2022 16:47:16 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Mathieu Othacehe Subject: Re: bug#55321: Document building for foreign architectures References: <87k0avdi8p.fsf@gnu.org> Date: Sun, 22 May 2022 22:47:13 +0200 In-Reply-To: <87k0avdi8p.fsf@gnu.org> (Mathieu Othacehe's message of "Sun, 08 May 2022 19:52:38 +0200") Message-ID: <874k1hqoq6.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 55321 Cc: 55321@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi! I=E2=80=99m late to the party but I=E2=80=99d like to contribute this: =F0= =9F=91=8D Some nitpicking though: > +Foreign architectures > +* Using cross-compilation:: Build for foreign architecture using cross-= compilation. > +* Using native building:: Build for foreign architectures natively. Please use =E2=80=9Ctitle case=E2=80=9D for node and section names, as in: Foreign Architectures > +You might need to use GNU Guix to produce packages (@pxref{Invoking guix > +package}), packs (@pxref{Invoking guix pack}) or even full systems > +(@pxref{Invoking guix system}) targeting computers with different CPU > +architectures than the one of your current CPU. > + > +GNU Guix supports two distinct mechanisms to target foreign As a rule of thumb, I think it=E2=80=99s good to avoid repeating =E2=80=9CG= NU Guix=E2=80=9D because the reader most likely knows that it=E2=80=99s the manual they=E2= =80=99re reading :-) and because we can often be more precise or less verbose. In this case, we could write: You can build packages, packs, or even full systems targeting computers with a different CPU architecture than the CPU you are using, or running a different operating system. > +@item > +The second one, called native building, consists in building using the > +CPU instruction set of the foreign system you are targeting. It often > +requires emulation, using the QEMU program for instance. > +The targets are specified as GNU triplets (@pxref{Specifying Target s/The targets/Targets/ (or =E2=80=9CCross-compilation targets=E2=80=9D?) > +@node Using native building > +@section Using native building Or: =E2=80=9CNative Builds=E2=80=9D? (=E2=80=9CUsing [=E2=80=A6] building= =E2=80=9D sounds weird to me.) That=E2=80=99s all, thank you! :-) Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Wed May 25 03:49:11 2022 Received: (at 55321) by debbugs.gnu.org; 25 May 2022 07:49:11 +0000 Received: from localhost ([127.0.0.1]:54237 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntllX-0003fk-I7 for submit@debbugs.gnu.org; Wed, 25 May 2022 03:49:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51032) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntllV-0003fX-OX for 55321@debbugs.gnu.org; Wed, 25 May 2022 03:49:10 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:56660) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ntllQ-0008Un-9Z; Wed, 25 May 2022 03:49:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To: From; bh=ACa/DK9QIcEWSpgVfGkO1NfBj4j4grhedQN+00WeLR8=; b=jTnWiiE4dOjdt37ntV9q rlpWa1Xa0B4obbcpO7aZeONokWuxFWUupQAd4F1gMI+nLXAy2s+UbHfGWw3XKLx/xLge3DVqLD+K8 Sqv1L9zkb1ogCLF5XG6XvTwHotkUqMdjuolfXU0TmYF1wc9dtliS6Y2uIuidosjHqAYAKzhvin2T+ ZgEnwIcHwnTT0WQf0f2HhEEsil28rQaPnkUgOcuXMw2h7NoMx+gjusRhDjKyu6iPmZUzAMbFKJuc8 YK0QfsJYmYDsY05iOfNefjj6xzVNU/eUdmnWnsDofZIl7mTM1SQ1Q0mrJc+EwYO8XVoZLVvilf76h Yyewj6/Av5TDww==; Received: from 2a02-8429-81d2-3d01-94c9-8097-ea5c-2774.rev.sfr.net ([2a02:8429:81d2:3d01:94c9:8097:ea5c:2774]:36494 helo=meije) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ntllP-0002dj-KL; Wed, 25 May 2022 03:49:03 -0400 From: Mathieu Othacehe To: Ludovic =?utf-8?Q?Court=C3=A8s?= Subject: Re: bug#55321: Document building for foreign architectures References: <87k0avdi8p.fsf@gnu.org> <874k1hqoq6.fsf@gnu.org> Date: Wed, 25 May 2022 09:49:01 +0200 In-Reply-To: <874k1hqoq6.fsf@gnu.org> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?= =?utf-8?Q?s?= message of "Sun, 22 May 2022 22:47:13 +0200") Message-ID: <87fskyvyqa.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 55321 Cc: 55321@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hey Ludo, > Or: =E2=80=9CNative Builds=E2=80=9D? (=E2=80=9CUsing [=E2=80=A6] buildin= g=E2=80=9D sounds weird to me.) > > That=E2=80=99s all, thank you! :-) Thanks for having a look :) I fixed your remarks in 436afdfe46f6aac173ae161eb52367b7fdc30944. Mathieu From debbugs-submit-bounces@debbugs.gnu.org Wed May 25 09:28:18 2022 Received: (at 55321) by debbugs.gnu.org; 25 May 2022 13:28:18 +0000 Received: from localhost ([127.0.0.1]:54648 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntr3h-0004kq-I1 for submit@debbugs.gnu.org; Wed, 25 May 2022 09:28:18 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59622) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntr3f-0004ka-Co for 55321@debbugs.gnu.org; Wed, 25 May 2022 09:28:15 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:32926) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ntr3a-0000pY-5X for 55321@debbugs.gnu.org; Wed, 25 May 2022 09:28:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To: From; bh=NIiV9S0ksMVtoP1TWT4nbNoauXtWag4UQm0QbL++ijw=; b=E4oHny28gUuan7VPMbTN hShk+YfmdC6EkRlSNvi1VaH45PyOSfIlYq51BxmL5GJ5laSp419un6VN1YFj62+0U3QBgqPHyW7Qa PWKypBpOVkDYuOxoAydyYsZXASLO6YrstIVQRkh4aEstUGpgeMK9X38lvvDCY/9ZAE9DwSO4wP/bD 0sQ5m15A3kXMVaK7KUzcT3adBmpBcqVF3aSd1jQcNf/AYXwNINWj/D8tnrxRXK+y3MBuNXttPYa0Z 7ltcIRVfejl9V+QBN8cl7pv1tDlzt4fCTofFkp38mp5M2fE+RSOm9JckqgEGjjg5S7pxafngG4bm8 BVNbygu7iXMWXw==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:60704 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ntr3Z-0004LC-Eb; Wed, 25 May 2022 09:28:09 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Mathieu Othacehe Subject: Re: bug#55321: Document building for foreign architectures References: <87k0avdi8p.fsf@gnu.org> <874k1hqoq6.fsf@gnu.org> <87fskyvyqa.fsf@gnu.org> Date: Wed, 25 May 2022 15:28:07 +0200 In-Reply-To: <87fskyvyqa.fsf@gnu.org> (Mathieu Othacehe's message of "Wed, 25 May 2022 09:49:01 +0200") Message-ID: <87leuphhco.fsf_-_@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 55321 Cc: 55321@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi, Mathieu Othacehe skribis: >> Or: =E2=80=9CNative Builds=E2=80=9D? (=E2=80=9CUsing [=E2=80=A6] buildi= ng=E2=80=9D sounds weird to me.) >> >> That=E2=80=99s all, thank you! :-) > > Thanks for having a look :) I fixed your remarks in > 436afdfe46f6aac173ae161eb52367b7fdc30944. Neat; there are still non-title-case node/section names though. My preference would be to change along these lines: Using cross-compilation -> Cross-Compilation Using native builds -> Emulated Native Builds (It=E2=80=99s better to agree on these before they=E2=80=99re translated an= d before there are people linking to them out there.) Thanks, Ludo=E2=80=99. From unknown Wed Jun 25 03:51:21 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Thu, 23 Jun 2022 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator