rustc: fix >=1.68 host!=build
Our `rustc.nix` adds a `--target` flag for the host when doing a host!=target build, but neglects to add a `--target` flag for the buildPlatform when doing a build!=(host==target) build. This commit corrects that. Before rustc 1.68 omitting the --target flag for the buildPlatform did not cause any problems. As of rustc 1.68, build!=host without a --target for the build will fail like below (with hundreds more "cannot find std::" errors. ``` $ nix build -f . -L pkgsCross.aarch64-multiplatform.rustc ... Copying stage1 library from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / aarch64-unknown-linux-gnu) Uplifting stage1 library (x86_64-unknown-linux-gnu -> aarch64-unknown-linux-gnu) Copying stage2 library from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / aarch64-unknown-linux-gnu) Building stage2 tool rust-analyzer-proc-macro-srv (aarch64-unknown-linux-gnu) Compiling autocfg v1.1.0 Compiling libc v0.2.135 Compiling cfg-if v1.0.0 Compiling proc-macro2 v1.0.47 Compiling quote v1.0.21 Compiling unicode-ident v1.0.5 Compiling syn v1.0.102 Compiling once_cell v1.15.0 Compiling parking_lot_core v0.9.4 Compiling serde_derive v1.0.145 Compiling hashbrown v0.12.3 Compiling scopeguard v1.1.0 Compiling smallvec v1.10.0 Compiling log v0.4.17 Compiling serde v1.0.145 Compiling rustc-hash v1.1.0 error[E0463]: can't find crate for `std` error: cannot find macro `println` in this scope --> /nix/tmp/nix-build-rustc-aarch64-unknown-linux-gnu-1.68.2.drv-0/rustc-1.68.2-src/vendor/libc-0.2.135/build.rs:7:5 | 7 | println!("cargo:rerun-if-changed=build.rs"); | ^^^^^^^ error: cannot find macro `println` in this scope --> /nix/tmp/nix-build-rustc-aarch64-unknown-linux-gnu-1.68.2.drv-0/rustc-1.68.2-src/vendor/libc-0.2.135/build.rs:16:9 | 16 | println!( | ^^^^^^^ error: cannot find macro `println` in this scope --> /nix/tmp/nix-build-rustc-aarch64-unknown-linux-gnu-1.68.2.drv-0/rustc-1.68.2-src/vendor/libc-0.2.135/build.rs:29:13 | 29 | println!("cargo:rustc-cfg=freebsd10") | ^^^^^^^ ```
This commit is contained in:
parent
1e2c3e2e13
commit
53b6e1a3c5
@ -79,11 +79,19 @@ in stdenv.mkDerivation rec {
|
||||
"--enable-vendor"
|
||||
"--build=${rust.toRustTargetSpec stdenv.buildPlatform}"
|
||||
"--host=${rust.toRustTargetSpec stdenv.hostPlatform}"
|
||||
# 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.
|
||||
# std is built for all platforms in --target.
|
||||
"--target=${concatStringsSep "," ([
|
||||
(rust.toRustTargetSpec stdenv.targetPlatform)
|
||||
|
||||
# (build!=target): When cross-building a compiler we need to add
|
||||
# the build platform as well so rustc can compile build.rs
|
||||
# scripts.
|
||||
] ++ optionals (stdenv.buildPlatform != stdenv.targetPlatform) [
|
||||
(rust.toRustTargetSpec stdenv.buildPlatform)
|
||||
|
||||
# (host!=target): When building a cross-targeting compiler we
|
||||
# need to add the host platform as well so rustc can compile
|
||||
# build.rs scripts.
|
||||
] ++ optionals (stdenv.hostPlatform != stdenv.targetPlatform) [
|
||||
(rust.toRustTargetSpec stdenv.hostPlatform)
|
||||
])}"
|
||||
|
Loading…
Reference in New Issue
Block a user