diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2018-05-16 15:05:49 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2018-05-17 20:37:27 +0300 |
commit | 162825f9653f1ba050e40f0ca96d1eb3491a9207 (patch) | |
tree | 6ce31d553d562e0eacf32edeed68e6354f9279e7 | |
parent | 17aca5c4d273c1f514f8623e555660b99ed90fee (diff) | |
download | gnu-guix-162825f9653f1ba050e40f0ca96d1eb3491a9207.tar gnu-guix-162825f9653f1ba050e40f0ca96d1eb3491a9207.tar.gz |
daemon: Allow building for armhf-linux on aarch64-linux.
* nix/libstore/build.cc (canBuildLocally): Allow building armhf-linux
builds on aarch64-linux.
(DerivationGoal::runChild) Throw error if attempting to build for
armhf-linux on an unsupported platform.
* doc/guix.texi (Invoking guix build): Document how to build natively
for armhf-linux on aarch64-linux. Add note that on some aarch64
machines this is unsupported.
-rw-r--r-- | doc/guix.texi | 9 | ||||
-rw-r--r-- | nix/libstore/build.cc | 8 |
2 files changed, 16 insertions, 1 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index a12210db8a..005c0597ad 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -5855,9 +5855,16 @@ information on cross-compilation. An example use of this is on Linux-based systems, which can emulate different personalities. For instance, passing -@code{--system=i686-linux} on an @code{x86_64-linux} system allows you +@code{--system=i686-linux} on an @code{x86_64-linux} system or +@code{--system=armhf-linux} on an @code{aarch64-linux} system allows you to build packages in a complete 32-bit environment. +@quotation Note +Building for an @code{armhf-linux} system is unconditionally enabled on +@code{aarch64-linux} machines, although certain aarch64 chipsets do not +allow for this functionality, notably the ThunderX. +@end quotation + Similarly, when transparent emulation with QEMU and @code{binfmt_misc} is enabled (@pxref{Virtualization Services, @code{qemu-binfmt-service-type}}), you can build for any system for diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc index 34647e6774..c7f32494d0 100644 --- a/nix/libstore/build.cc +++ b/nix/libstore/build.cc @@ -1244,6 +1244,7 @@ static bool canBuildLocally(const string & platform) return platform == settings.thisSystem #if __linux__ || (platform == "i686-linux" && settings.thisSystem == "x86_64-linux") + || (platform == "armhf-linux" && settings.thisSystem == "aarch64-linux") #endif ; } @@ -2220,6 +2221,13 @@ void DerivationGoal::runChild() throw SysError("cannot set i686-linux personality"); } + if (drv.platform == "armhf-linux" && + (settings.thisSystem == "aarch64-linux" || + (!strcmp(utsbuf.sysname, "Linux") && !strcmp(utsbuf.machine, "aarch64")))) { + if (personality(PER_LINUX32) == -1) + throw SysError("cannot set armhf-linux personality"); + } + /* Impersonate a Linux 2.6 machine to get some determinism in builds that depend on the kernel version. */ if ((drv.platform == "i686-linux" || drv.platform == "x86_64-linux") && settings.impersonateLinux26) { |