buildRustPackage: support cross-compilation to x86_64-pc-mingw32

This commit is contained in:
Yegor Timoshenko 2019-08-14 09:13:19 +00:00
parent ddf15d321f
commit 0fcffe88db
No known key found for this signature in database
GPG Key ID: B0B0D739BB47A03A

View File

@ -41,12 +41,20 @@ let
cargoDepsCopy="$sourceRoot/${cargoVendorDir}" cargoDepsCopy="$sourceRoot/${cargoVendorDir}"
''; '';
hostConfig = stdenv.hostPlatform.config;
rustHostConfig = {
"x86_64-pc-mingw32" = "x86_64-pc-windows-gnu";
}."${hostConfig}" or hostConfig;
ccForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"; ccForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc";
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}/${buildType}"; releaseDir = "target/${rustHostConfig}/${buildType}";
in stdenv.mkDerivation (args // { in
stdenv.mkDerivation (args // {
inherit cargoDeps; inherit cargoDeps;
patchRegistryDeps = ./patch-registry-deps; patchRegistryDeps = ./patch-registry-deps;
@ -84,7 +92,7 @@ in stdenv.mkDerivation (args // {
[target."${stdenv.buildPlatform.config}"] [target."${stdenv.buildPlatform.config}"]
"linker" = "${ccForBuild}" "linker" = "${ccForBuild}"
${stdenv.lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) '' ${stdenv.lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) ''
[target."${stdenv.hostPlatform.config}"] [target."${rustHostConfig}"]
"linker" = "${ccForHost}" "linker" = "${ccForHost}"
''} ''}
EOF EOF
@ -104,7 +112,7 @@ in stdenv.mkDerivation (args // {
"CXX_${stdenv.hostPlatform.config}"="${cxxForHost}" \ "CXX_${stdenv.hostPlatform.config}"="${cxxForHost}" \
cargo build \ cargo build \
${stdenv.lib.optionalString (buildType == "release") "--release"} \ ${stdenv.lib.optionalString (buildType == "release") "--release"} \
--target ${stdenv.hostPlatform.config} \ --target ${rustHostConfig} \
--frozen ${concatStringsSep " " cargoBuildFlags} --frozen ${concatStringsSep " " cargoBuildFlags}
) )