summaryrefslogtreecommitdiffstats
path: root/lib/systems
diff options
context:
space:
mode:
Diffstat (limited to 'lib/systems')
-rw-r--r--lib/systems/doubles.nix5
-rw-r--r--lib/systems/examples.nix13
-rw-r--r--lib/systems/parse.nix9
3 files changed, 25 insertions, 2 deletions
diff --git a/lib/systems/doubles.nix b/lib/systems/doubles.nix
index b0bc7dd1188a..07327fa22736 100644
--- a/lib/systems/doubles.nix
+++ b/lib/systems/doubles.nix
@@ -24,6 +24,7 @@ let
"x86_64-redox"
+ "powerpc64-linux"
"powerpc64le-linux"
"riscv32-linux" "riscv64-linux"
@@ -72,7 +73,7 @@ in {
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;
@@ -85,5 +86,5 @@ in {
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"];
}
diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix
index be87fb1d0694..8a43b86db701 100644
--- a/lib/systems/examples.nix
+++ b/lib/systems/examples.nix
@@ -21,6 +21,19 @@ rec {
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;
diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix
index a06ac0d11f74..8e012622ccd0 100644
--- a/lib/systems/parse.nix
+++ b/lib/systems/parse.nix
@@ -337,10 +337,18 @@ rec {
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"; };
musl = {};
@@ -444,6 +452,7 @@ rec {
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;
};