diff options
Diffstat (limited to 'pkgs/build-support/rust/build-rust-crate/build-crate.nix')
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/build-crate.nix | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/pkgs/build-support/rust/build-rust-crate/build-crate.nix b/pkgs/build-support/rust/build-rust-crate/build-crate.nix index 7484b3ad0290e..3af13fe70a7de 100644 --- a/pkgs/build-support/rust/build-rust-crate/build-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/build-crate.nix @@ -1,5 +1,5 @@ { lib, stdenv -, mkRustcDepArgs, mkRustcFeatureArgs, needUnstableCLI +, mkRustcDepArgs, mkRustcFeatureArgs, needUnstableCLI, rustc }: { crateName, @@ -27,6 +27,10 @@ # since rustc 1.42 the "proc_macro" crate is part of the default crate prelude # https://github.com/rust-lang/cargo/commit/4d64eb99a4#diff-7f98585dbf9d30aa100c8318e2c77e79R1021-R1022 ++ lib.optional (lib.elem "proc-macro" crateType) "--extern proc_macro" + ++ lib.optional (stdenv.hostPlatform.linker == "lld") # Needed when building for targets that use lld. e.g. 'wasm32-unknown-unknown' + "-C linker=${rustc.llvmPackages.lld}/bin/lld" + ++ lib.optional (stdenv.hasCC && stdenv.hostPlatform.linker != "lld") + "-C linker=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc" ; rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; @@ -39,10 +43,7 @@ ++ (map (x: "--crate-type ${x}") crateType) ); - binRustcOpts = lib.concatStringsSep " " ( - [ "-C linker=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc" ] ++ - baseRustcOpts - ); + binRustcOpts = lib.concatStringsSep " " baseRustcOpts; build_bin = if buildTests then "build_bin_test" else "build_bin"; in '' |