stdenv/linux: use isCompatible to find bootstrap tools

This avoids part of the issue where things like armv7a don’t work
because the system doesn’t realize it can use the armv7l bootstrap
tools.
This commit is contained in:
Matthew Bauer 2019-04-10 18:38:20 -04:00
parent 59bb1dcbfb
commit dd584d8eeb
2 changed files with 17 additions and 3 deletions

View File

@ -43,8 +43,14 @@ in
"x86_64-linux" = stagesLinux; "x86_64-linux" = stagesLinux;
"armv5tel-linux" = stagesLinux; "armv5tel-linux" = stagesLinux;
"armv6l-linux" = stagesLinux; "armv6l-linux" = stagesLinux;
"armv6m-linux" = stagesLinux;
"armv7a-linux" = stagesLinux; "armv7a-linux" = stagesLinux;
"armv7l-linux" = stagesLinux; "armv7l-linux" = stagesLinux;
"armv7r-linux" = stagesLinux;
"armv7m-linux" = stagesLinux;
"armv8a-linux" = stagesLinux;
"armv8r-linux" = stagesLinux;
"armv8m-linux" = stagesLinux;
"aarch64-linux" = stagesLinux; "aarch64-linux" = stagesLinux;
"mipsel-linux" = stagesLinux; "mipsel-linux" = stagesLinux;
"powerpc-linux" = /* stagesLinux */ stagesNative; "powerpc-linux" = /* stagesLinux */ stagesNative;

View File

@ -13,7 +13,6 @@
"x86_64-linux" = import ./bootstrap-files/x86_64.nix; "x86_64-linux" = import ./bootstrap-files/x86_64.nix;
"armv5tel-linux" = import ./bootstrap-files/armv5tel.nix; "armv5tel-linux" = import ./bootstrap-files/armv5tel.nix;
"armv6l-linux" = import ./bootstrap-files/armv6l.nix; "armv6l-linux" = import ./bootstrap-files/armv6l.nix;
"armv7a-linux" = import ./bootstrap-files/armv7l.nix;
"armv7l-linux" = import ./bootstrap-files/armv7l.nix; "armv7l-linux" = import ./bootstrap-files/armv7l.nix;
"aarch64-linux" = import ./bootstrap-files/aarch64.nix; "aarch64-linux" = import ./bootstrap-files/aarch64.nix;
"mipsel-linux" = import ./bootstrap-files/loongson2f.nix; "mipsel-linux" = import ./bootstrap-files/loongson2f.nix;
@ -26,10 +25,19 @@
"powerpc64le-linux" = import ./bootstrap-files/ppc64le-musl.nix; "powerpc64le-linux" = import ./bootstrap-files/ppc64le-musl.nix;
}; };
}; };
# Try to find an architecture compatible with our current system. We
# just try every bootstrap weve got and test to see if it is
# compatible with or current architecture.
getCompatibleTools = lib.foldl (v: system:
if v != null then v
else if localSystem.isCompatible (lib.systems.elaborate { inherit system; }) then archLookupTable.${system}
else null) null (lib.attrNames archLookupTable);
archLookupTable = table.${localSystem.libc} archLookupTable = table.${localSystem.libc}
or (abort "unsupported libc for the pure Linux stdenv"); or (abort "unsupported libc for the pure Linux stdenv");
files = archLookupTable.${localSystem.system} files = archLookupTable.${localSystem.system} or (if getCompatibleTools != null then getCompatibleTools
or (abort "unsupported platform for the pure Linux stdenv"); else (abort "unsupported platform for the pure Linux stdenv"));
in files in files
}: }: