diff --git a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix index 3eaba1736fc..010b0ec6003 100644 --- a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix @@ -13,7 +13,7 @@ , crateRenames , crateVersion , extraLinkFlags -, extraRustcOpts +, extraRustcOptsForBuildRs , libName , libPath , release @@ -24,7 +24,7 @@ let version_ = lib.splitString "-" crateVersion; version = lib.splitVersion (lib.head version_); rustcOpts = lib.foldl' (opts: opt: opts + " " + opt) (if release then "-C opt-level=3" else "-C debuginfo=2") - (["-C codegen-units=$NIX_BUILD_CORES -C incremental=no"] ++ extraRustcOpts); + (["-C codegen-units=$NIX_BUILD_CORES -C incremental=no"] ++ extraRustcOptsForBuildRs); buildDeps = mkRustcDepArgs buildDependencies crateRenames; authors = lib.concatStringsSep ":" crateAuthors; optLevel = if release then 3 else 0; diff --git a/pkgs/build-support/rust/build-rust-crate/default.nix b/pkgs/build-support/rust/build-rust-crate/default.nix index e605c9550e5..9d5151f6e43 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -157,6 +157,11 @@ in # Example: [ "-Z debuginfo=2" ] # Default: [] , extraRustcOpts + # A list of extra options to pass to rustc when building a build.rs. + # + # Example: [ "-Z debuginfo=2" ] + # Default: [] + , extraRustcOptsForBuildRs # Whether to enable building tests. # Use true to enable. # Default: false @@ -198,6 +203,7 @@ let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverr nativeBuildInputs_ = nativeBuildInputs; buildInputs_ = buildInputs; extraRustcOpts_ = extraRustcOpts; + extraRustcOptsForBuildRs_ = extraRustcOptsForBuildRs; buildTests_ = buildTests; # crate2nix has a hack for the old bash based build script that did split @@ -276,12 +282,16 @@ stdenv.mkDerivation (rec { lib.optionals (crate ? extraRustcOpts) crate.extraRustcOpts ++ extraRustcOpts_ ++ (lib.optional (edition != null) "--edition ${edition}"); + extraRustcOptsForBuildRs = + lib.optionals (crate ? extraRustcOptsForBuildRs) crate.extraRustcOptsForBuildRs + ++ extraRustcOptsForBuildRs_ + ++ (lib.optional (edition != null) "--edition ${edition}"); configurePhase = configureCrate { inherit crateName buildDependencies completeDeps completeBuildDeps crateDescription crateFeatures crateRenames libName build workspace_member release libPath crateVersion - extraLinkFlags extraRustcOpts + extraLinkFlags extraRustcOptsForBuildRs crateAuthors crateHomepage verbose colors; }; buildPhase = buildCrate { @@ -302,8 +312,9 @@ stdenv.mkDerivation (rec { rust = rustc; release = crate_.release or true; verbose = crate_.verbose or true; - extraRustcOpts = []; features = []; + extraRustcOpts = []; + extraRustcOptsForBuildRs = []; nativeBuildInputs = []; buildInputs = []; crateOverrides = defaultCrateOverrides;