git.iko.soy/typeable/nixpkgs
on master help sign in
Merge pull request #138321 from obsidiansystems/fix-build-rust-crate-cross

buildRustCrate: Fix some things for cross builds

commitf1f320d4ac05b5996f065e6a7d63121cd91f5b19 authorJohn Ericson <git@JohnEricson.me> dateWed 6 Oct 2021, 18:06 (5 years ago) parentc2cf3eb811f849
3 files changed+16−4
pkgs/build-support/rust/build-rust-crate/build-crate.nix+2−1 pkgs/build-support/rust/build-rust-crate/configure-crate.nix+2−2 pkgs/build-support/rust/build-rust-crate/default.nix+12−1
pkgs/build-support/rust/build-rust-crate/build-crate.nix+2−1
@@ -15,8 +15,9 @@
1515 "--remap-path-prefix=$NIX_BUILD_TOP=/"
1616 (mkRustcDepArgs dependencies crateRenames)
1717 (mkRustcFeatureArgs crateFeatures)
18+ ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
19+ "--target" (rust.toRustTargetSpec stdenv.hostPlatform)
1820 ] ++ extraRustcOpts
19− ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "--target ${rust.toRustTargetSpec stdenv.hostPlatform} -C linker=${stdenv.hostPlatform.config}-gcc"
2021 # since rustc 1.42 the "proc_macro" crate is part of the default crate prelude
2122 # https://github.com/rust-lang/cargo/commit/4d64eb99a4#diff-7f98585dbf9d30aa100c8318e2c77e79R1021-R1022
2223 ++ lib.optional (lib.elem "proc-macro" crateType) "--extern proc_macro"
pkgs/build-support/rust/build-rust-crate/configure-crate.nix+2−2
@@ -13,7 +13,7 @@
1313, crateRenames
1414, crateVersion
1515, extraLinkFlags
16−, extraRustcOpts
16+, extraRustcOptsForBuildRs
1717, libName
1818, libPath
1919, release
@@ -24,7 +24,7 @@ let version_ = lib.splitString "-" crateVersion;
2424 version = lib.splitVersion (lib.head version_);
2525 rustcOpts = lib.foldl' (opts: opt: opts + " " + opt)
2626 (if release then "-C opt-level=3" else "-C debuginfo=2")
27− (["-C codegen-units=$NIX_BUILD_CORES"] ++ extraRustcOpts);
27+ (["-C codegen-units=$NIX_BUILD_CORES"] ++ extraRustcOptsForBuildRs);
2828 buildDeps = mkRustcDepArgs buildDependencies crateRenames;
2929 authors = lib.concatStringsSep ":" crateAuthors;
3030 optLevel = if release then 3 else 0;
pkgs/build-support/rust/build-rust-crate/default.nix+12−1
@@ -172,6 +172,11 @@ crate_: lib.makeOverridable
172172 # Example: [ "-Z debuginfo=2" ]
173173 # Default: []
174174 , extraRustcOpts
175+ # A list of extra options to pass to rustc when building a build.rs.
176+ #
177+ # Example: [ "-Z debuginfo=2" ]
178+ # Default: []
179+ , extraRustcOptsForBuildRs
175180 # Whether to enable building tests.
176181 # Use true to enable.
177182 # Default: false
@@ -228,6 +233,7 @@ crate_: lib.makeOverridable
228233 nativeBuildInputs_ = nativeBuildInputs;
229234 buildInputs_ = buildInputs;
230235 extraRustcOpts_ = extraRustcOpts;
236+ extraRustcOptsForBuildRs_ = extraRustcOptsForBuildRs;
231237 buildTests_ = buildTests;
232238
233239 # crate2nix has a hack for the old bash based build script that did split
@@ -308,12 +314,16 @@ crate_: lib.makeOverridable
308314 lib.optionals (crate ? extraRustcOpts) crate.extraRustcOpts
309315 ++ extraRustcOpts_
310316 ++ (lib.optional (edition != null) "--edition ${edition}");
317+ extraRustcOptsForBuildRs =
318+ lib.optionals (crate ? extraRustcOptsForBuildRs) crate.extraRustcOptsForBuildRs
319+ ++ extraRustcOptsForBuildRs_
320+ ++ (lib.optional (edition != null) "--edition ${edition}");
311321
312322
313323 configurePhase = configureCrate {
314324 inherit crateName buildDependencies completeDeps completeBuildDeps crateDescription
315325 crateFeatures crateRenames libName build workspace_member release libPath crateVersion
316− extraLinkFlags extraRustcOpts
326+ extraLinkFlags extraRustcOptsForBuildRs
317327 crateAuthors crateHomepage verbose colors;
318328 };
319329 buildPhase = buildCrate {
@@ -337,6 +347,7 @@ crate_: lib.makeOverridable
337347 release = crate_.release or true;
338348 verbose = crate_.verbose or true;
339349 extraRustcOpts = [ ];
350+ extraRustcOptsForBuildRs = [ ];
340351 features = [ ];
341352 nativeBuildInputs = [ ];
342353 buildInputs = [ ];