rustc: add host platform to --target when building cross-compiler

As of 1.48, std is only built for platforms in --target. If the host platform is
not included, the resulting rustc can't compile build.rs scripts.
This commit is contained in:
Ben Wolsieffer 2020-12-12 15:18:30 -05:00
parent f947634aee
commit 5a923e552c

View file

@ -11,7 +11,7 @@
}: }:
let let
inherit (stdenv.lib) optionals optional optionalString; inherit (stdenv.lib) optionals optional optionalString concatStringsSep;
inherit (darwin.apple_sdk.frameworks) Security; inherit (darwin.apple_sdk.frameworks) Security;
llvmSharedForBuild = pkgsBuildBuild.llvm_10.override { enableSharedLibraries = true; }; llvmSharedForBuild = pkgsBuildBuild.llvm_10.override { enableSharedLibraries = true; };
@ -72,7 +72,14 @@ in stdenv.mkDerivation rec {
"--enable-vendor" "--enable-vendor"
"--build=${rust.toRustTargetSpec stdenv.buildPlatform}" "--build=${rust.toRustTargetSpec stdenv.buildPlatform}"
"--host=${rust.toRustTargetSpec stdenv.hostPlatform}" "--host=${rust.toRustTargetSpec stdenv.hostPlatform}"
"--target=${rust.toRustTargetSpec stdenv.targetPlatform}" # std is built for all platforms in --target. When building a cross-compiler
# we need to add the host platform as well so rustc can compile build.rs
# scripts.
"--target=${concatStringsSep "," ([
(rust.toRustTargetSpec stdenv.targetPlatform)
] ++ optionals (stdenv.hostPlatform != stdenv.targetPlatform) [
(rust.toRustTargetSpec stdenv.hostPlatform)
])}"
"${setBuild}.cc=${ccForBuild}" "${setBuild}.cc=${ccForBuild}"
"${setHost}.cc=${ccForHost}" "${setHost}.cc=${ccForHost}"