From 044a8a24ed2361154de316ad0ba82cba8fd7631c Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Mon, 18 Feb 2019 00:10:36 +0100 Subject: [PATCH] buildRustCrate: pass extraRustcOpts to configure crate Previously build flags would not be available during the configure phase while they might be required to build the `build.rs` file. --- .../rust/build-rust-crate/build-crate.nix | 10 ++++----- .../rust/build-rust-crate/configure-crate.nix | 22 +++++++++++++++++-- .../rust/build-rust-crate/default.nix | 4 ++-- 3 files changed, 27 insertions(+), 9 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 252a0ff521fd..0978f7e1756f 100644 --- a/pkgs/build-support/rust/build-rust-crate/build-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/build-crate.nix @@ -8,11 +8,11 @@ let deps = makeDeps dependencies; - rustcOpts = - lib.lists.foldl' (opts: opt: opts + " " + opt) - (if release then "-C opt-level=3" else "-C debuginfo=2") - (["-C codegen-units=1"] ++ extraRustcOpts); - rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; + rustcOpts = + lib.lists.foldl' (opts: opt: opts + " " + opt) + (if release then "-C opt-level=3" else "-C debuginfo=2") + (["-C codegen-units=1"] ++ extraRustcOpts); + rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; # Some platforms have different names for rustc. rustPlatform = 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 7630c6471dcd..700dff8499f9 100644 --- a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix @@ -1,9 +1,27 @@ { lib, stdenv, echo_build_heading, noisily, makeDeps }: -{ build, buildDependencies, colors, completeBuildDeps, completeDeps, crateAuthors, crateFeatures, crateName, crateVersion, extraLinkFlags, libName, libPath, release, target_os, verbose, workspace_member }: +{ build +, buildDependencies +, colors +, completeBuildDeps +, completeDeps +, crateAuthors +, crateFeatures +, crateName +, crateVersion +, extraLinkFlags +, extraRustcOpts +, libName +, libPath +, release +, target_os +, verbose +, workspace_member }: let version_ = lib.splitString "-" crateVersion; versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1; version = lib.splitString "." (lib.head version_); - rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); + rustcOpts = lib.lists.foldl' (opts: opt: opts + " " + opt) + (if release then "-C opt-level=3" else "-C debuginfo=2") + (["-C codegen-units=1"] ++ extraRustcOpts); buildDeps = makeDeps buildDependencies; 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 dbb2f1b80cc9..47a84e5ca2b8 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -136,13 +136,13 @@ stdenv.mkDerivation (rec { (crate.type or ["lib"]); colors = lib.attrByPath [ "colors" ] "always" crate; extraLinkFlags = builtins.concatStringsSep " " (crate.extraLinkFlags or []); + extraRustcOpts = (if crate ? extraRustcOpts then crate.extraRustcOpts else []) ++ extraRustcOpts_; configurePhase = configureCrate { inherit crateName buildDependencies completeDeps completeBuildDeps crateFeatures libName build workspace_member release libPath crateVersion - extraLinkFlags + extraLinkFlags extraRustcOpts crateAuthors verbose colors target_os; }; - extraRustcOpts = (if crate ? extraRustcOpts then crate.extraRustcOpts else []) ++ extraRustcOpts_; buildPhase = buildCrate { inherit crateName dependencies crateFeatures libName release libPath crateType