rust: fix on aarch64-linux by using GCC 11 and passing -lgcc
This change switches to using GCC 11 by default on aarch64-linux, as well as passing `-lgcc` to the linker, per #201485. See #201254 and #208412 for wider context on the issue.
This commit is contained in:
parent
ccb3146bf2
commit
8442601c64
|
@ -1,6 +1,8 @@
|
||||||
cargoSetupPostUnpackHook() {
|
cargoSetupPostUnpackHook() {
|
||||||
echo "Executing cargoSetupPostUnpackHook"
|
echo "Executing cargoSetupPostUnpackHook"
|
||||||
|
|
||||||
|
export NIX_LDFLAGS+=" @aarch64LinuxGccWorkaround@"
|
||||||
|
|
||||||
# Some cargo builds include build hooks that modify their own vendor
|
# Some cargo builds include build hooks that modify their own vendor
|
||||||
# dependencies. This copies the vendor directory into the build tree and makes
|
# dependencies. This copies the vendor directory into the build tree and makes
|
||||||
# it writable. If we're using a tarball, the unpackFile hook already handles
|
# it writable. If we're using a tarball, the unpackFile hook already handles
|
||||||
|
|
|
@ -108,6 +108,9 @@ in {
|
||||||
host-config = true
|
host-config = true
|
||||||
target-applies-to-host = true
|
target-applies-to-host = true
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/201254
|
||||||
|
aarch64LinuxGccWorkaround = lib.optionalString (stdenv.isLinux && stdenv.isAarch64 && stdenv.cc.isGNU) "-lgcc";
|
||||||
};
|
};
|
||||||
} ./cargo-setup-hook.sh) {};
|
} ./cargo-setup-hook.sh) {};
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,9 @@ in stdenv.mkDerivation rec {
|
||||||
# when linking stage1 libstd: cc: undefined reference to `__cxa_begin_catch'
|
# when linking stage1 libstd: cc: undefined reference to `__cxa_begin_catch'
|
||||||
optional (stdenv.isLinux && !withBundledLLVM) "--push-state --as-needed -lstdc++ --pop-state"
|
optional (stdenv.isLinux && !withBundledLLVM) "--push-state --as-needed -lstdc++ --pop-state"
|
||||||
++ optional (stdenv.isDarwin && !withBundledLLVM) "-lc++"
|
++ optional (stdenv.isDarwin && !withBundledLLVM) "-lc++"
|
||||||
++ optional stdenv.isDarwin "-rpath ${llvmSharedForHost}/lib");
|
++ optional stdenv.isDarwin "-rpath ${llvmSharedForHost}/lib"
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/201254
|
||||||
|
++ optional (stdenv.isLinux && stdenv.isAarch64 && stdenv.cc.isGNU) "-lgcc");
|
||||||
|
|
||||||
# Increase codegen units to introduce parallelism within the compiler.
|
# Increase codegen units to introduce parallelism within the compiler.
|
||||||
RUSTFLAGS = "-Ccodegen-units=10";
|
RUSTFLAGS = "-Ccodegen-units=10";
|
||||||
|
|
|
@ -15386,6 +15386,8 @@ with pkgs;
|
||||||
rust_1_66 = callPackage ../development/compilers/rust/1_66.nix {
|
rust_1_66 = callPackage ../development/compilers/rust/1_66.nix {
|
||||||
inherit (darwin.apple_sdk.frameworks) CoreFoundation Security SystemConfiguration;
|
inherit (darwin.apple_sdk.frameworks) CoreFoundation Security SystemConfiguration;
|
||||||
llvm_14 = llvmPackages_14.libllvm;
|
llvm_14 = llvmPackages_14.libllvm;
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/201254
|
||||||
|
stdenv = if stdenv.isLinux && stdenv.isAarch64 && stdenv.cc.isGNU then gcc11Stdenv else stdenv;
|
||||||
};
|
};
|
||||||
rust = rust_1_66;
|
rust = rust_1_66;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue