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 causes collisions when NixOS is configured like
``` nix
{ pkgs, ... }:
{
services.udev.packages = [ pkgs.platformio ];
}
```
and would also cause a regression having to add the subirectory to the udev packages path:
``` nix
{ pkgs, ... }:
{
services.udev.packages = [ (pkgs.platformio-core.udev + "/99-platformio-udev.rules") ];
}
```
This commit adds `perl` to `nativeBuildInputs` of abiword, to avoid
the following build failure:
```
abiword-aarch64-unknown-linux-gnu> checking for perl... no
abiword-aarch64-unknown-linux-gnu> configure: error: *** perl program not found
error: build of '/nix/store/v670j4pyqk5vy625gh7w0j2jla1wrz2s-abiword-aarch64-unknown-linux-gnu-3.0.5.drv' on 'ssh://root@192.168.22.102' failed: builder for '/nix/store/v670j4pyqk5vy625gh7w0j2jla1wrz2s-abiword-aarch64-unknown-linux-gnu-3.0.5.drv' failed with exit code 1
error: builder for '/nix/store/v670j4pyqk5vy625gh7w0j2jla1wrz2s-abiword-aarch64-unknown-linux-gnu-3.0.5.drv' failed with exit code 1;
last 10 log lines:
> checking if aarch64-unknown-linux-gnu-g++ -std=c++11 PIC flag -fPIC -DPIC works... yes
> checking if aarch64-unknown-linux-gnu-g++ -std=c++11 static flag -static works... no
> checking if aarch64-unknown-linux-gnu-g++ -std=c++11 supports -c -o file.o... yes
> checking if aarch64-unknown-linux-gnu-g++ -std=c++11 supports -c -o file.o... (cached) yes
> checking whether the aarch64-unknown-linux-gnu-g++ -std=c++11 linker (aarch64-unknown-linux-gnu-ld) supports shared libraries... yes
> checking dynamic linker characteristics... (cached) GNU/Linux ld.so
> checking how to hardcode library paths into programs... immediate
> checking whether ln -s works... yes
> checking for perl... no
> configure: error: *** perl program not found
For full logs, run 'nix log /nix/store/v670j4pyqk5vy625gh7w0j2jla1wrz2s-abiword-aarch64-unknown-linux-gnu-3.0.5.drv'.
```