Merge pull request #111345 from r-burns/ppc64-big-endian

Enable PPC64 (big-endian)

Changed files
+32 -5
lib
pkgs
+3 -2
lib/systems/doubles.nix
···
"x86_64-redox"
+
"powerpc64-linux"
"powerpc64le-linux"
"riscv32-linux" "riscv64-linux"
···
darwin = filterDoubles predicates.isDarwin;
freebsd = filterDoubles predicates.isFreeBSD;
# Should be better, but MinGW is unclear.
-
gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; });
+
gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.elfv1; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.elfv2; });
illumos = filterDoubles predicates.isSunOS;
linux = filterDoubles predicates.isLinux;
netbsd = filterDoubles predicates.isNetBSD;
···
embedded = filterDoubles predicates.isNone;
-
mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "armv7a-linux" "aarch64-linux" "powerpc64le-linux"];
+
mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "armv7a-linux" "aarch64-linux" "powerpc64-linux" "powerpc64le-linux"];
}
+13
lib/systems/examples.nix
···
config = "powerpc64le-unknown-linux-musl";
};
+
ppc64-elfv1 = {
+
config = "powerpc64-unknown-linux-elfv1";
+
};
+
ppc64-elfv2 = {
+
config = "powerpc64-unknown-linux-elfv2";
+
};
+
ppc64 = ppc64-elfv2; # default to modern elfv2
+
+
ppc64-musl = {
+
config = "powerpc64-unknown-linux-musl";
+
gcc = { abi = "elfv2"; }; # for gcc configuration
+
};
+
sheevaplug = {
config = "armv5tel-unknown-linux-gnueabi";
} // platforms.sheevaplug;
+9
lib/systems/parse.nix
···
The "gnu" ABI is ambiguous on 32-bit ARM. Use "gnueabi" or "gnueabihf" instead.
'';
}
+
{ assertion = platform: platform.system != "powerpc64-linux";
+
message = ''
+
The "gnu" ABI is ambiguous on big-endian 64-bit PPC. Use "elfv1" or "elfv2" instead.
+
'';
+
}
];
};
gnuabi64 = { abi = "64"; };
+
+
elfv1 = { abi = "elfv1"; };
+
elfv2 = { abi = "elfv2"; };
musleabi = { float = "soft"; };
musleabihf = { float = "hard"; };
···
if lib.versionAtLeast (parsed.cpu.version or "0") "6"
then abis.gnueabihf
else abis.gnueabi
+
else if cpu == "powerpc64" then abis.elfv2
else abis.gnu
else abis.unknown;
};
+1 -1
lib/tests/systems.nix
···
testredox = mseteq redox [ "x86_64-redox" ];
testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
testillumos = mseteq illumos [ "x86_64-solaris" ];
-
testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64le-linux" ];
+
testlinux = mseteq linux [ "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux" "armv7l-linux" "i686-linux" "mipsel-linux" "riscv32-linux" "riscv64-linux" "x86_64-linux" "powerpc64-linux" "powerpc64le-linux" ];
testnetbsd = mseteq netbsd [ "i686-netbsd" "x86_64-netbsd" ];
testopenbsd = mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ];
testwindows = mseteq windows [ "i686-cygwin" "x86_64-cygwin" "i686-windows" "x86_64-windows" ];
+1 -1
pkgs/development/compilers/gcc/common/platform-flags.nix
···
(lib.optional (p ? float) "--with-float=${p.float}")
(lib.optional (p ? mode) "--with-mode=${p.mode}")
(lib.optional
-
(let tp = targetPlatform; in tp.isPower && tp.libc == "glibc" && tp.is64bit && tp.isLittleEndian)
+
(let tp = targetPlatform; in tp.isPower && tp.libc == "glibc" && tp.is64bit)
"--with-long-double-128")
]
+1
pkgs/stdenv/default.nix
···
aarch64-linux = stagesLinux;
mipsel-linux = stagesLinux;
powerpc-linux = /* stagesLinux */ stagesNative;
+
powerpc64-linux = stagesLinux;
powerpc64le-linux = stagesLinux;
x86_64-darwin = stagesDarwin;
x86_64-solaris = stagesNix;
+2
pkgs/stdenv/linux/make-bootstrap-tools-cross.nix
···
armv6l-musl = muslpi;
aarch64-musl = aarch64-multiplatform-musl;
riscv64 = riscv64;
+
powerpc64 = ppc64;
+
powerpc64-musl = ppc64-musl;
powerpc64le = powernv;
powerpc64le-musl = musl-power;
})
+2 -1
pkgs/stdenv/linux/make-bootstrap-tools.nix
···
tarMinimal = gnutar.override { acl = null; };
busyboxMinimal = busybox.override {
-
useMusl = !stdenv.targetPlatform.isRiscV;
+
useMusl = with stdenv.targetPlatform; !isRiscV &&
+
(system == "powerpc64-linux" -> parsed.abi.name != "elfv1");
enableStatic = true;
enableMinimal = true;
extraConfig = ''