summaryrefslogtreecommitdiff
path: root/lib/systems
diff options
context:
space:
mode:
authorOPNA2608 <opna2608@protonmail.com>2025-10-11 20:48:52 +0200
committerOPNA2608 <opna2608@protonmail.com>2025-10-11 20:48:52 +0200
commit8b06bf875c0e494d59430cdf108656debc45f224 (patch)
treeede240d271ea048f3fa1294f76f73e550bc1e43f /lib/systems
parentremnote: 1.21.5 -> 1.21.8 (#451063) (diff)
downloadnixpkgs-8b06bf875c0e494d59430cdf108656debc45f224.tar.gz
lib.systems: Simplify ABI on POWER for rust.rustcTarget
Rust does not know how to parse "gnuabielfv{1,2}", so simplify those down to just "gnu". This obsoletes the manual rustcTarget fix in the ppc64-elfv1 example.
Diffstat (limited to 'lib/systems')
-rw-r--r--lib/systems/default.nix9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/systems/default.nix b/lib/systems/default.nix
index 7e78ceb4827a..96bde04151ae 100644
--- a/lib/systems/default.nix
+++ b/lib/systems/default.nix
@@ -491,6 +491,13 @@ let
}
.${cpu.name} or cpu.name;
vendor_ = final.rust.platform.vendor;
+ abi_ =
+ # We're very explicit about the POWER ELF ABI w/ glibc in our parsing, while Rust is not.
+ # TODO: Somehow ensure that Rust actually *uses* the correct ABI, and not just a libc-based default.
+ if (lib.strings.hasPrefix "powerpc" cpu.name) && (lib.strings.hasPrefix "gnuabielfv" abi.name) then
+ "gnu"
+ else
+ abi.name;
in
# TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
args.rust.rustcTarget or args.rustc.config or (
@@ -501,7 +508,7 @@ let
if final.isWasi then
"${cpu_}-wasip1"
else
- "${cpu_}-${vendor_}-${kernel.name}${optionalString (abi.name != "unknown") "-${abi.name}"}"
+ "${cpu_}-${vendor_}-${kernel.name}${optionalString (abi.name != "unknown") "-${abi_}"}"
);
# The name of the rust target if it is standard, or the json file