diff options
author | Daniël de Kok <me@danieldk.eu> | 2021-02-11 17:32:47 +0100 |
---|---|---|
committer | Daniël de Kok <me@danieldk.eu> | 2021-02-11 20:00:12 +0100 |
commit | a8efb2053fd9c1e2fea97699754b5071e94c1649 (patch) | |
tree | ad6932dfe121b1ccf2c91ce238a93929dab9d134 /pkgs/build-support/rust/default.nix | |
parent | 198dd776352220e1f3e50c0714874425adaeaa77 (diff) | |
download | nixpkgs-a8efb2053fd9c1e2fea97699754b5071e94c1649.tar nixpkgs-a8efb2053fd9c1e2fea97699754b5071e94c1649.tar.gz nixpkgs-a8efb2053fd9c1e2fea97699754b5071e94c1649.tar.bz2 nixpkgs-a8efb2053fd9c1e2fea97699754b5071e94c1649.tar.lz nixpkgs-a8efb2053fd9c1e2fea97699754b5071e94c1649.tar.xz nixpkgs-a8efb2053fd9c1e2fea97699754b5071e94c1649.tar.zst nixpkgs-a8efb2053fd9c1e2fea97699754b5071e94c1649.zip |
buildRustPackage: factor out build phase to cargoBuildHook
- API change: remove the `target` argument of `buildRustPackage`, the target should always be in sync with the C/C++ compiler that is used. - Gathering of binaries has moved from `buildPhase` to `installPhase`, this simplifies the hook and orders this functionality logically with the installation logic.
Diffstat (limited to 'pkgs/build-support/rust/default.nix')
-rw-r--r-- | pkgs/build-support/rust/default.nix | 61 |
1 files changed, 20 insertions, 41 deletions
diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix index 6741b329a30..19ec71261be 100644 --- a/pkgs/build-support/rust/default.nix +++ b/pkgs/build-support/rust/default.nix @@ -3,6 +3,7 @@ , buildPackages , cacert , cargo +, cargoBuildHook , cargoSetupHook , fetchCargoTarball , runCommandNoCC @@ -37,7 +38,6 @@ , cargoBuildFlags ? [] , buildType ? "release" , meta ? {} -, target ? rust.toRustTargetSpec stdenv.hostPlatform , cargoVendorDir ? null , checkType ? buildType , depsExtraArgs ? {} @@ -71,6 +71,7 @@ let # against the src fixed-output derivation to check consistency. validateCargoDeps = !(cargoHash == "" && cargoSha256 == ""); + target = rust.toRustTargetSpec stdenv.hostPlatform; targetIsJSON = lib.hasSuffix ".json" target; useSysroot = targetIsJSON && !__internal_dontAddSysroot; @@ -86,10 +87,6 @@ let originalCargoToml = src + /Cargo.toml; # profile info is later extracted }; - ccForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"; - cxxForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++"; - ccForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"; - cxxForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"; releaseDir = "target/${shortTarget}/${buildType}"; tmpDir = "${releaseDir}-tmp"; @@ -102,11 +99,17 @@ assert useSysroot -> !(args.doCheck or true); stdenv.mkDerivation ((removeAttrs args ["depsExtraArgs"]) // lib.optionalAttrs useSysroot { RUSTFLAGS = "--sysroot ${sysroot} " + (args.RUSTFLAGS or ""); } // { - inherit cargoDeps; + inherit buildAndTestSubdir cargoDeps releaseDir tmpDir; + + cargoBuildFlags = lib.concatStringsSep " " cargoBuildFlags; + + cargoBuildType = "--${buildType}"; patchRegistryDeps = ./patch-registry-deps; - nativeBuildInputs = nativeBuildInputs ++ [ cacert git cargo cargoSetupHook rustc ]; + nativeBuildInputs = nativeBuildInputs ++ + [ cacert git cargo cargoBuildHook cargoSetupHook rustc ]; + buildInputs = buildInputs ++ lib.optional stdenv.hostPlatform.isMinGW windows.pthreads; patches = cargoPatches ++ patches; @@ -125,38 +128,6 @@ stdenv.mkDerivation ((removeAttrs args ["depsExtraArgs"]) // lib.optionalAttrs u runHook postConfigure ''; - buildPhase = with builtins; args.buildPhase or '' - ${lib.optionalString (buildAndTestSubdir != null) "pushd ${buildAndTestSubdir}"} - runHook preBuild - - ( - set -x - env \ - "CC_${rust.toRustTarget stdenv.buildPlatform}"="${ccForBuild}" \ - "CXX_${rust.toRustTarget stdenv.buildPlatform}"="${cxxForBuild}" \ - "CC_${rust.toRustTarget stdenv.hostPlatform}"="${ccForHost}" \ - "CXX_${rust.toRustTarget stdenv.hostPlatform}"="${cxxForHost}" \ - cargo build -j $NIX_BUILD_CORES \ - ${lib.optionalString (buildType == "release") "--release"} \ - --target ${target} \ - --frozen ${concatStringsSep " " cargoBuildFlags} - ) - - runHook postBuild - - ${lib.optionalString (buildAndTestSubdir != null) "popd"} - - # This needs to be done after postBuild: packages like `cargo` do a pushd/popd in - # the pre/postBuild-hooks that need to be taken into account before gathering - # all binaries to install. - mkdir -p $tmpDir - cp -r $releaseDir/* $tmpDir/ - bins=$(find $tmpDir \ - -maxdepth 1 \ - -type f \ - -executable ! \( -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \)) - ''; - checkPhase = args.checkPhase or (let argstr = "${lib.optionalString (checkType == "release") "--release"} --target ${target} --frozen"; threads = if cargoParallelTestThreads then "$NIX_BUILD_CORES" else "1"; @@ -173,11 +144,19 @@ stdenv.mkDerivation ((removeAttrs args ["depsExtraArgs"]) // lib.optionalAttrs u strictDeps = true; - inherit releaseDir tmpDir; - installPhase = args.installPhase or '' runHook preInstall + # This needs to be done after postBuild: packages like `cargo` do a pushd/popd in + # the pre/postBuild-hooks that need to be taken into account before gathering + # all binaries to install. + mkdir -p $tmpDir + cp -r $releaseDir/* $tmpDir/ + bins=$(find $tmpDir \ + -maxdepth 1 \ + -type f \ + -executable ! \( -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \)) + # rename the output dir to a architecture independent one mapfile -t targets < <(find "$NIX_BUILD_TOP" -type d | grep '${tmpDir}$') for target in "''${targets[@]}"; do |