diff options
author | Yureka <yuka@yuka.dev> | 2024-01-05 00:47:52 +0100 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2024-01-15 22:34:02 +0100 |
commit | 48a6213611bb3b12bb19e0b72abcf03908eabea0 (patch) | |
tree | f43a233f7279607e7ed8b977394760fb6c07c720 /pkgs/build-support | |
parent | b8076b893eacf2e6bec67453fbf4d421ee28ff03 (diff) | |
download | nixlib-48a6213611bb3b12bb19e0b72abcf03908eabea0.tar nixlib-48a6213611bb3b12bb19e0b72abcf03908eabea0.tar.gz nixlib-48a6213611bb3b12bb19e0b72abcf03908eabea0.tar.bz2 nixlib-48a6213611bb3b12bb19e0b72abcf03908eabea0.tar.lz nixlib-48a6213611bb3b12bb19e0b72abcf03908eabea0.tar.xz nixlib-48a6213611bb3b12bb19e0b72abcf03908eabea0.tar.zst nixlib-48a6213611bb3b12bb19e0b72abcf03908eabea0.zip |
rust: use lld on pkgsStatic aarch64
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/rust/lib/default.nix | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/pkgs/build-support/rust/lib/default.nix b/pkgs/build-support/rust/lib/default.nix index 6645715eb2c8..e70b8229d356 100644 --- a/pkgs/build-support/rust/lib/default.nix +++ b/pkgs/build-support/rust/lib/default.nix @@ -12,13 +12,20 @@ rec { # hostPlatform-targeted compiler -- for example, `-m64` being # passed on a build=x86_64/host=aarch64 compilation. envVars = let + + # As a workaround for https://github.com/rust-lang/rust/issues/89626 use lld on pkgsStatic aarch64 + shouldUseLLD = platform: platform.isAarch64 && platform.isStatic && !stdenv.isDarwin; + ccForBuild = "${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"; cxxForBuild = "${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++"; linkerForBuild = ccForBuild; ccForHost = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"; cxxForHost = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"; - linkerForHost = ccForHost; + linkerForHost = if shouldUseLLD stdenv.targetPlatform + && !stdenv.cc.bintools.isLLVM + then "${buildPackages.lld}/bin/ld.lld" + else ccForHost; # Unfortunately we must use the dangerous `targetPackages` here # because hooks are artificially phase-shifted one slot earlier @@ -26,7 +33,10 @@ rec { # a targetPlatform to them). ccForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc"; cxxForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++"; - linkerForTarget = ccForTarget; + linkerForTarget = if shouldUseLLD targetPackages.stdenv.targetPlatform + && !targetPackages.stdenv.cc.bintools.isLLVM # whether stdenv's linker is lld already + then "${buildPackages.lld}/bin/ld.lld" + else ccForTarget; rustBuildPlatform = stdenv.buildPlatform.rust.rustcTarget; rustBuildPlatformSpec = stdenv.buildPlatform.rust.rustcTargetSpec; |