buildRustPackage: factor out install phase to cargoInstallHook
This commit is contained in:
parent
056f697397
commit
9757c7101a
@ -293,6 +293,8 @@ attributes can also be used:
|
|||||||
variable `buildAndTestSubdir` can be used to build a crate in a
|
variable `buildAndTestSubdir` can be used to build a crate in a
|
||||||
Cargo workspace. Additional maturin flags can be passed through
|
Cargo workspace. Additional maturin flags can be passed through
|
||||||
`maturinBuildFlags`.
|
`maturinBuildFlags`.
|
||||||
|
* `cargoInstallHook`: install binaries and static/shared libraries
|
||||||
|
that were built using `cargoBuildHook`.
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
, cacert
|
, cacert
|
||||||
, cargo
|
, cargo
|
||||||
, cargoBuildHook
|
, cargoBuildHook
|
||||||
|
, cargoInstallHook
|
||||||
, cargoSetupHook
|
, cargoSetupHook
|
||||||
, fetchCargoTarball
|
, fetchCargoTarball
|
||||||
, runCommandNoCC
|
, runCommandNoCC
|
||||||
@ -87,9 +88,6 @@ let
|
|||||||
originalCargoToml = src + /Cargo.toml; # profile info is later extracted
|
originalCargoToml = src + /Cargo.toml; # profile info is later extracted
|
||||||
};
|
};
|
||||||
|
|
||||||
releaseDir = "target/${shortTarget}/${buildType}";
|
|
||||||
tmpDir = "${releaseDir}-tmp";
|
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
# Tests don't currently work for `no_std`, and all custom sysroots are currently built without `std`.
|
# Tests don't currently work for `no_std`, and all custom sysroots are currently built without `std`.
|
||||||
@ -99,16 +97,16 @@ assert useSysroot -> !(args.doCheck or true);
|
|||||||
stdenv.mkDerivation ((removeAttrs args ["depsExtraArgs"]) // lib.optionalAttrs useSysroot {
|
stdenv.mkDerivation ((removeAttrs args ["depsExtraArgs"]) // lib.optionalAttrs useSysroot {
|
||||||
RUSTFLAGS = "--sysroot ${sysroot} " + (args.RUSTFLAGS or "");
|
RUSTFLAGS = "--sysroot ${sysroot} " + (args.RUSTFLAGS or "");
|
||||||
} // {
|
} // {
|
||||||
inherit buildAndTestSubdir cargoDeps releaseDir tmpDir;
|
inherit buildAndTestSubdir cargoDeps;
|
||||||
|
|
||||||
cargoBuildFlags = lib.concatStringsSep " " cargoBuildFlags;
|
cargoBuildFlags = lib.concatStringsSep " " cargoBuildFlags;
|
||||||
|
|
||||||
cargoBuildType = "--${buildType}";
|
cargoBuildType = buildType;
|
||||||
|
|
||||||
patchRegistryDeps = ./patch-registry-deps;
|
patchRegistryDeps = ./patch-registry-deps;
|
||||||
|
|
||||||
nativeBuildInputs = nativeBuildInputs ++
|
nativeBuildInputs = nativeBuildInputs ++
|
||||||
[ cacert git cargo cargoBuildHook cargoSetupHook rustc ];
|
[ cacert git cargo cargoBuildHook cargoInstallHook cargoSetupHook rustc ];
|
||||||
|
|
||||||
buildInputs = buildInputs ++ lib.optional stdenv.hostPlatform.isMinGW windows.pthreads;
|
buildInputs = buildInputs ++ lib.optional stdenv.hostPlatform.isMinGW windows.pthreads;
|
||||||
|
|
||||||
@ -144,36 +142,6 @@ stdenv.mkDerivation ((removeAttrs args ["depsExtraArgs"]) // lib.optionalAttrs u
|
|||||||
|
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
|
|
||||||
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
|
|
||||||
rm -rf "$target/../../${buildType}"
|
|
||||||
ln -srf "$target" "$target/../../"
|
|
||||||
done
|
|
||||||
mkdir -p $out/bin $out/lib
|
|
||||||
|
|
||||||
xargs -r cp -t $out/bin <<< $bins
|
|
||||||
find $tmpDir \
|
|
||||||
-maxdepth 1 \
|
|
||||||
-regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \
|
|
||||||
-print0 | xargs -r -0 cp -t $out/lib
|
|
||||||
rmdir --ignore-fail-on-non-empty $out/lib $out/bin
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = { inherit cargoDeps; } // (args.passthru or {});
|
passthru = { inherit cargoDeps; } // (args.passthru or {});
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
@ -17,16 +17,16 @@ cargoBuildHook() {
|
|||||||
cargo build -j $NIX_BUILD_CORES \
|
cargo build -j $NIX_BUILD_CORES \
|
||||||
--target @rustTargetPlatformSpec@ \
|
--target @rustTargetPlatformSpec@ \
|
||||||
--frozen \
|
--frozen \
|
||||||
${cargoBuildType} \
|
--${cargoBuildType} \
|
||||||
${cargoBuildFlags}
|
${cargoBuildFlags}
|
||||||
)
|
)
|
||||||
|
|
||||||
runHook postBuild
|
|
||||||
|
|
||||||
if [ ! -z "${buildAndTestSubdir-}" ]; then
|
if [ ! -z "${buildAndTestSubdir-}" ]; then
|
||||||
popd
|
popd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
|
||||||
echo "Finished cargoBuildHook"
|
echo "Finished cargoBuildHook"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
49
pkgs/build-support/rust/hooks/cargo-install-hook.sh
Normal file
49
pkgs/build-support/rust/hooks/cargo-install-hook.sh
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
cargoInstallPostBuildHook() {
|
||||||
|
echo "Executing cargoInstallPostBuildHook"
|
||||||
|
|
||||||
|
releaseDir=target/@shortTarget@/$cargoBuildType
|
||||||
|
tmpDir="${releaseDir}-tmp";
|
||||||
|
|
||||||
|
mkdir -p $tmpDir
|
||||||
|
cp -r ${releaseDir}/* $tmpDir/
|
||||||
|
bins=$(find $tmpDir \
|
||||||
|
-maxdepth 1 \
|
||||||
|
-type f \
|
||||||
|
-executable ! \( -regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \))
|
||||||
|
|
||||||
|
echo "Finished cargoInstallPostBuildHook"
|
||||||
|
}
|
||||||
|
|
||||||
|
cargoInstallHook() {
|
||||||
|
echo "Executing cargoInstallHook"
|
||||||
|
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
# rename the output dir to a architecture independent one
|
||||||
|
|
||||||
|
releaseDir=target/@shortTarget@/$cargoBuildType
|
||||||
|
tmpDir="${releaseDir}-tmp";
|
||||||
|
|
||||||
|
mapfile -t targets < <(find "$NIX_BUILD_TOP" -type d | grep "${tmpDir}$")
|
||||||
|
for target in "${targets[@]}"; do
|
||||||
|
rm -rf "$target/../../${cargoBuildType}"
|
||||||
|
ln -srf "$target" "$target/../../"
|
||||||
|
done
|
||||||
|
mkdir -p $out/bin $out/lib
|
||||||
|
|
||||||
|
xargs -r cp -t $out/bin <<< $bins
|
||||||
|
find $tmpDir \
|
||||||
|
-maxdepth 1 \
|
||||||
|
-regex ".*\.\(so.[0-9.]+\|so\|a\|dylib\)" \
|
||||||
|
-print0 | xargs -r -0 cp -t $out/lib
|
||||||
|
rmdir --ignore-fail-on-non-empty $out/lib $out/bin
|
||||||
|
runHook postInstall
|
||||||
|
|
||||||
|
echo "Finished cargoInstallHook"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [ -z "${installPhase-}" ]; then
|
||||||
|
installPhase=cargoInstallHook
|
||||||
|
postBuildHooks+=(cargoInstallPostBuildHook)
|
||||||
|
fi
|
@ -36,6 +36,15 @@ in {
|
|||||||
};
|
};
|
||||||
} ./cargo-build-hook.sh) {};
|
} ./cargo-build-hook.sh) {};
|
||||||
|
|
||||||
|
cargoInstallHook = callPackage ({ }:
|
||||||
|
makeSetupHook {
|
||||||
|
name = "cargo-install-hook.sh";
|
||||||
|
deps = [ ];
|
||||||
|
substitutions = {
|
||||||
|
inherit shortTarget;
|
||||||
|
};
|
||||||
|
} ./cargo-install-hook.sh) {};
|
||||||
|
|
||||||
cargoSetupHook = callPackage ({ }:
|
cargoSetupHook = callPackage ({ }:
|
||||||
makeSetupHook {
|
makeSetupHook {
|
||||||
name = "cargo-setup-hook.sh";
|
name = "cargo-setup-hook.sh";
|
||||||
|
@ -12,7 +12,7 @@ rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
buildRustPackage = callPackage ../../../build-support/rust {
|
buildRustPackage = callPackage ../../../build-support/rust {
|
||||||
inherit rustc cargo cargoBuildHook cargoSetupHook fetchCargoTarball;
|
inherit rustc cargo cargoBuildHook cargoInstallHook cargoSetupHook fetchCargoTarball;
|
||||||
};
|
};
|
||||||
|
|
||||||
rustcSrc = callPackage ./rust-src.nix {
|
rustcSrc = callPackage ./rust-src.nix {
|
||||||
@ -26,5 +26,5 @@ rec {
|
|||||||
# Hooks
|
# Hooks
|
||||||
inherit (callPackage ../../../build-support/rust/hooks {
|
inherit (callPackage ../../../build-support/rust/hooks {
|
||||||
inherit cargo;
|
inherit cargo;
|
||||||
}) cargoBuildHook cargoSetupHook maturinBuildHook;
|
}) cargoBuildHook cargoInstallHook cargoSetupHook maturinBuildHook;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user