rust: allow building in debug or release modes

This commit is contained in:
Michael Eden 2019-02-26 00:52:01 -05:00 committed by John Ericson
parent 60761e65ba
commit bdd3c3fdcb

View File

@ -13,11 +13,13 @@
, cargoUpdateHook ? "" , cargoUpdateHook ? ""
, cargoDepsHook ? "" , cargoDepsHook ? ""
, cargoBuildFlags ? [] , cargoBuildFlags ? []
, buildType ? "release"
, cargoVendorDir ? null , cargoVendorDir ? null
, ... } @ args: , ... } @ args:
assert cargoVendorDir == null -> cargoSha256 != "unset"; assert cargoVendorDir == null -> cargoSha256 != "unset";
assert buildType == "release" || buildType == "debug";
let let
cargoDeps = if cargoVendorDir == null cargoDeps = if cargoVendorDir == null
@ -42,7 +44,7 @@ let
cxxForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++"; cxxForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++";
ccForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"; ccForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
cxxForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"; cxxForHost="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++";
releaseDir = "target/${stdenv.hostPlatform.config}/release"; releaseDir = "target/${stdenv.hostPlatform.config}/${buildType}";
in stdenv.mkDerivation (args // { in stdenv.mkDerivation (args // {
inherit cargoDeps; inherit cargoDeps;
@ -98,7 +100,7 @@ in stdenv.mkDerivation (args // {
"CC_${stdenv.hostPlatform.config}"="${ccForHost}" \ "CC_${stdenv.hostPlatform.config}"="${ccForHost}" \
"CXX_${stdenv.hostPlatform.config}"="${cxxForHost}" \ "CXX_${stdenv.hostPlatform.config}"="${cxxForHost}" \
cargo build \ cargo build \
--release \ --${buildType} \
--target ${stdenv.hostPlatform.config} \ --target ${stdenv.hostPlatform.config} \
--frozen ${concatStringsSep " " cargoBuildFlags} --frozen ${concatStringsSep " " cargoBuildFlags}
) )
@ -106,7 +108,7 @@ in stdenv.mkDerivation (args // {
# rename the output dir to a architecture independent one # rename the output dir to a architecture independent one
mapfile -t targets < <(find "$NIX_BUILD_TOP" -type d | grep '${releaseDir}$') mapfile -t targets < <(find "$NIX_BUILD_TOP" -type d | grep '${releaseDir}$')
for target in "''${targets[@]}"; do for target in "''${targets[@]}"; do
rm -rf "$target/../../release" rm -rf "$target/../../${buildType}"
ln -srf "$target" "$target/../../" ln -srf "$target" "$target/../../"
done done