Closed CryoMyst closed 1 month ago
It's using the wrong rust-std
. You need the one for your target platform. The rust-overlay
example reads the target from your toolchain.toml
. The devenv+fenix version doesn't know anything about targets.
I imagine no one's done this before, so we're missing a nice interface to specify the targets. I managed to get a bit further by overriding the toolchain. It gets stuck on something else later on though.
languages.rust.enable = true;
languages.rust.channel = "nightly";
languages.rust.components = [];
languages.rust.toolchain = pkgs.lib.mkForce (with fenix.packages.${system};
combine [ latest.rustc latest.cargo latest.rust-src targets.x86_64-pc-windows-gnu.latest.rust-std ]
);
@CryoMyst, could you try running the above on your end? I don't have an x86 machine to try this on.
Turns out fenix supports toolchain files!
languages.rust.toolchain =
fenix.packages.${system}.fromToolchainFile {
file = ./toolchain.toml;
sha256 = "sha256-SS4GpScL/PIMXVvrIRJTHQyTEvX5cAXgeXz0zu7MbvU=";
};
@sandydoo
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
devenv.url = "github:cachix/devenv";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = inputs@{ nixpkgs, flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
imports = [
inputs.devenv.flakeModule
];
systems = nixpkgs.lib.systems.flakeExposed;
perSystem = { config, self', inputs', pkgs, system, ... }: {
devenv.shells.default = {
packages = with pkgs; [
rustup
docker
cargo-cross
];
languages.rust.enable = true;
languages.rust.channel = "nightly";
languages.rust.toolchain = pkgs.lib.mkForce (with inputs.fenix.packages.${system};
combine [ latest.rustc latest.cargo latest.rust-src targets.x86_64-pc-windows-gnu.latest.rust-std ]
);
env.RUST_BACKTRACE = "1";
};
};
};
}
Still results in
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ ./build.sh
error: invalid toolchain name: 'c9sfgb6nm54dcagbys51dvjbwbbmbh2r-rustc-1.72.1'
Error:
0: couldn't install toolchain `c9sfgb6nm54dcagbys51dvjbwbbmbh2r-rustc-1.72.1`
1: `rustup toolchain add c9sfgb6nm54dcagbys51dvjbwbbmbh2r-rustc-1.72.1 --profile minimal` failed with exit status: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⋮ 2 frames hidden ⋮
3: cross::rustup::install_toolchain::hdd468ccbb79b9f56
at <unknown source file>:<unknown line>
4: cross::run::hc97f40af300abf4a
at <unknown source file>:<unknown line>
5: cross::main::hcf16ece8b1c21125
at <unknown source file>:<unknown line>
6: std::sys_common::backtrace::__rust_begin_short_backtrace::hb542e52ccc67ec61
at <unknown source file>:<unknown line>
7: main<unknown>
at <unknown source file>:<unknown line>
8: __libc_start_call_main<unknown>
at <unknown source file>:<unknown line>
9: __libc_start_main_impl<unknown>
at <unknown source file>:<unknown line>
10: _start<unknown>
at <unknown source file>:<unknown line>
(devenv)
It's important to set this:
languages.rust.components = [];
Fair, So I did that and rustc
and cargo
were not in path so did this
devenv.shells.default = {
packages = with pkgs; [
rustup
docker
cargo-cross
inputs.fenix.packages.${system}.latest.rustc
inputs.fenix.packages.${system}.latest.cargo
];
languages.rust.enable = true;
languages.rust.channel = "nightly";
languages.rust.components = [];
languages.rust.toolchain = pkgs.lib.mkForce (with inputs.fenix.packages.${system};
combine [ latest.rustc latest.cargo latest.rust-src targets.x86_64-pc-windows-gnu.latest.rust-std ]
);
env.RUST_BACKTRACE = "1";
env.NIX_STORE = "/nix/store"
enterShell = ''
export PATH="${inputs.fenix.packages.${system}.latest.rustc.outPath}/bin:$PATH"
export PATH="${inputs.fenix.packages.${system}.latest.cargo.outPath}/bin:$PATH"
'';
};
Still results in the following
error: invalid toolchain name: 'wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11'
Error:
0: couldn't install toolchain `wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11`
1: `rustup toolchain add wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11 --profile minimal` failed with exit status: 1
...
The paths are /nix/store/4wklwyfpkqxvwhg6y0kzcmczl0yd3vis-cargo-nightly-latest-2023-11-11/bin:/nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11/bin
So it is pulling it from this path.
rustc --print sysroot
/nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11
Tried setting CROSS_CUSTOM_TOOLCHAIN
and CROSS_CUSTOM_TOOLCHAIN_COMPAT
from their source
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ echo $CROSS_CUSTOM_TOOLCHAIN
1
(devenv)
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ echo $CROSS_CUSTOM_TOOLCHAIN_COMPAT
x86_64-pc-windows-gnu
(devenv)
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ cross build -vv --target x86_64-pc-windows-gnu --release
+ cargo metadata --format-version 1 --filter-platform x86_64-pc-windows-gnu
+ rustc --print sysroot
+ rustup toolchain list
+ rustup --verbose toolchain add wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11 --profile minimal
verbose: read metadata version: '12'
error: invalid toolchain name: 'wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11'
Error:
0: couldn't install toolchain `wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11`
1: `rustup --verbose toolchain add wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11 --profile minimal` failed with exit status: 1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⋮ 2 frames hidden ⋮
3: cross::rustup::install_toolchain::hdd468ccbb79b9f56
at <unknown source file>:<unknown line>
4: cross::run::hc97f40af300abf4a
at <unknown source file>:<unknown line>
5: cross::main::hcf16ece8b1c21125
at <unknown source file>:<unknown line>
6: std::sys_common::backtrace::__rust_begin_short_backtrace::hb542e52ccc67ec61
at <unknown source file>:<unknown line>
7: main<unknown>
at <unknown source file>:<unknown line>
8: __libc_start_call_main<unknown>
at <unknown source file>:<unknown line>
9: __libc_start_main_impl<unknown>
at <unknown source file>:<unknown line>
10: _start<unknown>
at <unknown source file>:<unknown line>
(devenv)
Ok so this seems to be slightly better when I use the master branch of https://github.com/cross-rs/cross
env.NIX_STORE = "/nix/store";
env.CROSS_CUSTOM_TOOLCHAIN = "1";
env.CROSS_CUSTOM_TOOLCHAIN_COMPAT = "x86_64-pc-windows-gnu";
enterShell = ''
export PATH="${inputs.fenix.packages.${system}.latest.rustc.outPath}/bin:$PATH"
export PATH="${inputs.fenix.packages.${system}.latest.cargo.outPath}/bin:$PATH"
'';
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ ../cross/target/debug/cross build -vv --target x86_64-pc-windows-gnu --release
+ cargo metadata --format-version 1 --filter-platform x86_64-pc-windows-gnu
+ rustc --print sysroot
+ /nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11/bin/rustc
+ /nix/store/kzbarw9ljqzgrmjx8i9q2s321bsl9ir2-devenv-profile/bin/docker
+ /nix/store/kzbarw9ljqzgrmjx8i9q2s321bsl9ir2-devenv-profile/bin/docker version -f '{{ .Server.Os }},,,{{ .Server.Arch }}'
+ /nix/store/kzbarw9ljqzgrmjx8i9q2s321bsl9ir2-devenv-profile/bin/docker buildx build --progress auto --build-arg 'VERBOSE=1' --label 'org.cross-rs.for-cross-target=x86_64-pc-windows-gnu' --label 'org.cross-rs.runs-with=x86_64-unknown-linux-gnu' --label 'org.cross-rs.workspace_root=/home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test' --tag localhost/cross-rs/cross-custom-cargo_cross_flake_test:x86_64-pc-windows-gnu-1d63a-pre-build --build-arg 'CROSS_CMD=apt-get update' --file /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test/target/x86_64-pc-windows-gnu/Dockerfile.x86_64-pc-windows-gnu-custom --output 'type=docker' /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test
[+] Building 0.3s (6/6) FINISHED docker:default
=> [internal] load build definition from Dockerfile.x86_64-pc-windows-gnu-custom 0.0s
=> => transferring dockerfile: 239B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for ghcr.io/cross-rs/x86_64-pc-windows-gnu:main 0.3s
=> [1/2] FROM ghcr.io/cross-rs/x86_64-pc-windows-gnu:main@sha256:a46f97bb305d0fcabc04c3bd2d59b953f17b039d353af3e2138a785e4fd11e0c 0.0s
=> CACHED [2/2] RUN eval "apt-get update" 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:3f6265cc4fe7d3bb913aedb0806b95a3822a4a0130b5e1c5329e95f03461cfdf 0.0s
=> => naming to localhost/cross-rs/cross-custom-cargo_cross_flake_test:x86_64-pc-windows-gnu-1d63a-pre-build 0.0s
+ /nix/store/kzbarw9ljqzgrmjx8i9q2s321bsl9ir2-devenv-profile/bin/docker run --userns host -e 'PKG_CONFIG_ALLOW_CROSS=1' -e 'XARGO_HOME=/home/cryomyst/.xargo' -e 'CARGO_HOME=/home/cryomyst/.cargo' -e 'CROSS_RUST_SYSROOT=/nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11' -e 'CARGO_TARGET_DIR=/target' -e 'CROSS_RUNNER=' -e CROSS_CUSTOM_TOOLCHAIN -e CROSS_CUSTOM_TOOLCHAIN_COMPAT -e TERM -e CARGO_INSTALL_ROOT -e 'USER=cryomyst' -e 'CROSS_RUSTC_MAJOR_VERSION=1' -e 'CROSS_RUSTC_MINOR_VERSION=0' -e 'CROSS_RUSTC_PATCH_VERSION=0' --name cross-wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11-1ad8a-edf0b1db0-x86_64-pc-windows-gnu-1d63a-1699712572669 --rm --user 1000:100 -v /home/cryomyst/.xargo:/home/cryomyst/.xargo:z -v /home/cryomyst/.cargo:/home/cryomyst/.cargo:z -v /home/cryomyst/.cargo/bin -v /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test:/home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test:z -v /nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11:/nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11:z,ro -v /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test/target:/target:z -w /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test -v /nix/store:/nix/store:z -t localhost/cross-rs/cross-custom-cargo_cross_flake_test:x86_64-pc-windows-gnu-1d63a-pre-build sh -c 'PATH="$PATH":"/nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11/bin" cargo build -vv --target x86_64-pc-windows-gnu --release'
sh: 1: cargo: not found
+ rustup component list --toolchain wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11
Error:
0: could not execute `rustup component list --toolchain wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11`
1: No such file or directory (os error 2)
Location:
/rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/convert/mod.rs:716
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⋮ 5 frames hidden ⋮
6: <T as core::convert::Into<U>>::into::ha6de9877ef1fdbac
at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/convert/mod.rs:716
⋮ 1 frame hidden ⋮
8: cross::errors::CommandError::to_section_report::h4e7cedc47ebc5afe
at /home/cryomyst/Projects/Personal/Other/cross/src/errors.rs:151
9: <std::process::Command as cross::extensions::CommandExt>::run_and_get_output::{{closure}}::h69830eea5e8b12e2
at /home/cryomyst/Projects/Personal/Other/cross/src/extensions.rs:187
10: core::result::Result<T,E>::map_err::hfda0fe2248711ecd
at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/result.rs:829
11: <std::process::Command as cross::extensions::CommandExt>::run_and_get_output::h1e35f4c067c1ad26
at /home/cryomyst/Projects/Personal/Other/cross/src/extensions.rs:186
12: <std::process::Command as cross::extensions::CommandExt>::run_and_get_stdout::h1ee9915c29e46d5d
at /home/cryomyst/Projects/Personal/Other/cross/src/extensions.rs:172
13: cross::rustup::check_component::h6cd0f257aec9c6fe
at /home/cryomyst/Projects/Personal/Other/cross/src/rustup.rs:240
14: cross::warn_on_failure::h7ffd23b875241349
at /home/cryomyst/Projects/Personal/Other/cross/src/lib.rs:493
15: cross::run::h73adc16128454b03
at /home/cryomyst/Projects/Personal/Other/cross/src/lib.rs:644
16: cross::main::h95a7d649eb4f97ef
at /home/cryomyst/Projects/Personal/Other/cross/src/bin/cross.rs:22
17: core::ops::function::FnOnce::call_once::h70c538c954f5e7e8
at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/ops/function.rs:250
⋮ 16 frames hidden ⋮
Run with COLORBT_SHOW_HIDDEN=1 environment variable to disable frame filtering.
Run with RUST_BACKTRACE=full to include source snippets.
(devenv)
So the overlay way works setting the NIX_SHELL and CROSS_CUSTOM_TOOLCHAIN vars
Seems the problem is with the devenv solution above cargo and rustc are in different nix stores locations instead of together. Cross only seems to add the rustc
path to PATH.
@sandydoo What do you think?
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs = {
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
};
};
};
outputs = { self, nixpkgs, flake-utils, rust-overlay }:
flake-utils.lib.eachDefaultSystem
(system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs {
inherit system overlays;
};
# 👇 new! note that it refers to the path ./rust-toolchain.toml
rustToolchain = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./toolchain.toml;
in
with pkgs;
{
devShells.default = mkShell {
# 👇 we can just use `rustToolchain` here:
buildInputs = [ rustToolchain ];
shellHook = ''
export NIX_STORE="/nix/store"
export CROSS_CUSTOM_TOOLCHAIN="1"
export CROSS_CUSTOM_TOOLCHAIN_COMPAT="x86_64-pc-windows-gnu"
'';
};
}
);
}
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ ../cross/target/debug/cross build -vv --target x86_64-pc-windows-gnu --release
+ cargo metadata --format-version 1 --filter-platform x86_64-pc-windows-gnu
+ rustc --print sysroot
+ /nix/store/mwm5ny2zxah1cqd0z12p79vc2dyq4v2l-rust-complete-1.75.0-nightly-2023-11-11/bin/rustc
+ /run/current-system/sw/bin/docker
+ /run/current-system/sw/bin/docker version -f '{{ .Server.Os }},,,{{ .Server.Arch }}'
+ /run/current-system/sw/bin/docker buildx build --progress auto --build-arg 'VERBOSE=1' --label 'org.cross-rs.for-cross-target=x86_64-pc-windows-gnu' --label 'org.cross-rs.runs-with=x86_64-unknown-linux-gnu' --label 'org.cross-rs.workspace_root=/home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test' --tag localhost/cross-rs/cross-custom-cargo_cross_flake_test:x86_64-pc-windows-gnu-1d63a-pre-build --build-arg 'CROSS_CMD=apt-get update' --file /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test/target/x86_64-pc-windows-gnu/Dockerfile.x86_64-pc-windows-gnu-custom --output 'type=docker' /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test
[+] Building 0.5s (6/6) FINISHED docker:default
=> [internal] load build definition from Dockerfile.x86_64-pc-windows-gnu-custom 0.0s
=> => transferring dockerfile: 239B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for ghcr.io/cross-rs/x86_64-pc-windows-gnu:main 0.5s
=> [1/2] FROM ghcr.io/cross-rs/x86_64-pc-windows-gnu:main@sha256:a46f97bb305d0fcabc04c3bd2d59b953f17b039d353af3e2138a785e4fd11e0c 0.0s
=> CACHED [2/2] RUN eval "apt-get update" 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:3f6265cc4fe7d3bb913aedb0806b95a3822a4a0130b5e1c5329e95f03461cfdf 0.0s
=> => naming to localhost/cross-rs/cross-custom-cargo_cross_flake_test:x86_64-pc-windows-gnu-1d63a-pre-build 0.0s
+ /run/current-system/sw/bin/docker run --userns host -e 'PKG_CONFIG_ALLOW_CROSS=1' -e 'XARGO_HOME=/home/cryomyst/.xargo' -e 'CARGO_HOME=/home/cryomyst/.cargo' -e 'CROSS_RUST_SYSROOT=/nix/store/mwm5ny2zxah1cqd0z12p79vc2dyq4v2l-rust-complete-1.75.0-nightly-2023-11-11' -e 'CARGO_TARGET_DIR=/target' -e 'CROSS_RUNNER=' -e CROSS_CUSTOM_TOOLCHAIN -e CROSS_CUSTOM_TOOLCHAIN_COMPAT -e TERM -e 'USER=cryomyst' -e 'CROSS_RUSTC_MAJOR_VERSION=1' -e 'CROSS_RUSTC_MINOR_VERSION=0' -e 'CROSS_RUSTC_PATCH_VERSION=0' --name cross-mwm5ny2zxah1cqd0z12p79vc2dyq4v2l-rust-complete-1.75.0-nightly-2023-11-11-97c53-edf0b1db0-x86_64-pc-windows-gnu-1d63a-1699714618646 --rm --user 1000:100 -v /home/cryomyst/.xargo:/home/cryomyst/.xargo:z -v /home/cryomyst/.cargo:/home/cryomyst/.cargo:z -v /home/cryomyst/.cargo/bin -v /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test:/home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test:z -v /nix/store/mwm5ny2zxah1cqd0z12p79vc2dyq4v2l-rust-complete-1.75.0-nightly-2023-11-11:/nix/store/mwm5ny2zxah1cqd0z12p79vc2dyq4v2l-rust-complete-1.75.0-nightly-2023-11-11:z,ro -v /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test/target:/target:z -w /home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test -v /nix/store:/nix/store:z -t localhost/cross-rs/cross-custom-cargo_cross_flake_test:x86_64-pc-windows-gnu-1d63a-pre-build sh -c 'PATH="$PATH":"/nix/store/mwm5ny2zxah1cqd0z12p79vc2dyq4v2l-rust-complete-1.75.0-nightly-2023-11-11/bin" cargo build -vv --target x86_64-pc-windows-gnu --release'
Fresh windows_x86_64_gnu v0.48.5
Fresh windows-targets v0.48.5
Fresh windows v0.48.0
warning: variable does not need to be mutable
--> /home/cryomyst/.cargo/registry/src/index.crates.io-6f17d22bba15001f/windows-0.48.0/src/core/strings/hstring.rs:69:13
|
69 | let mut ptr = Header::alloc(len)?;
| ----^^^
| |
| help: remove this `mut`
|
= note: `#[warn(unused_mut)]` on by default
warning: `windows` (lib) generated 1 warning
Fresh flake_overlay v0.1.0 (/home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test)
Finished release [optimized] target(s) in 0.00s
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ ls /nix/store/mwm5ny2zxah1cqd0z12p79vc2dyq4v2l-rust-complete-1.75.0-nightly-2023-11-11/bin
cargo cargo-clippy cargo-fmt cargo-miri clippy-driver miri rls rust-analyzer rustc rustdoc rustfmt rust-gdb rust-gdbgui rust-lldb
The devenv does
sh -c 'PATH="$PATH":"/nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11/bin"
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ ls /nix/store/wy8b0x74ny71jvnidysdzgqll5kgms5i-rust-nightly-latest-with-std-2023-11-11/bin
rustc rustdoc rust-gdb rust-gdbgui rust-lldb
(devenv)
[cryomyst@cryo-desktop:~/Projects/Personal/Other/cargo_cross_flake_test]$ ls /nix/store/4wklwyfpkqxvwhg6y0kzcmczl0yd3vis-cargo-nightly-latest-2023-11-11/bin
cargo
(devenv)
You've lost me! Too many things are changing at once.
I've put both shells into a single flake and minimized the differences between them. Both versions now successfully cross-compile for me on x86. https://github.com/sandydoo/cargo_cross_flake_test/blob/13415314a9e83b313e3786bf466b83c2bd214811/flake.nix
I just tried your wip branch (had to replace a hash), am I missing something here?
➜ Other git clone https://github.com/sandydoo/cargo_cross_flake_test cargo_cross_flake_test_sandydoo
Cloning into 'cargo_cross_flake_test_sandydoo'...
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 34 (delta 12), reused 28 (delta 6), pack-reused 0
Receiving objects: 100% (34/34), 11.01 KiB | 704.00 KiB/s, done.
Resolving deltas: 100% (12/12), done.
➜ Other cd cargo_cross_flake_test_sandydoo
➜ cargo_cross_flake_test_sandydoo git:(master) git switch wip
branch 'wip' set up to track 'origin/wip'.
Switched to a new branch 'wip'
➜ cargo_cross_flake_test_sandydoo git:(wip) ./build-flake.sh
error:
… while calling the 'derivationStrict' builtin
at /builtin/derivation.nix:9:12: (source not available)
… while evaluating derivation 'devenv-shell'
whose name attribute is located at /nix/store/v3dzkqmafmjcx98rhaf7zqf34zgv3zyd-source/src/modules/mkNakedShell.nix:63:12
… while evaluating attribute 'args' of derivation 'devenv-shell'
at /nix/store/v3dzkqmafmjcx98rhaf7zqf34zgv3zyd-source/src/modules/mkNakedShell.nix:70:5:
69| # Bring in the dependencies on `nix-build`
70| args = [ "-ec" "${coreutils}/bin/ln -s ${profile} $out; exit 0" ];
| ^
71|
(stack trace truncated; use '--show-trace' to show the full trace)
error: hash mismatch in fixed-output derivation '/nix/store/ls4bx6lyhskgygc9yakn7miac056dna9-channel-rust-nightly.toml.drv':
specified: sha256-0d/UxN6sekF+iQtebQl6jj/AQiT18Uag3CKbsCxc1E0=
got: sha256-iO9RjucunishecHEk6gifAyaP8nFlrFIBfIhh0RBLvc=
➜ cargo_cross_flake_test_sandydoo git:(wip) nvim flake/flake.nix
➜ cargo_cross_flake_test_sandydoo git:(wip) nvim flake.nix
➜ cargo_cross_flake_test_sandydoo git:(wip) ✗ ./build-flake.sh
warning: Git tree '/home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test_sandydoo' is dirty
Error:
0: `rustc --print target-list` failed with exit status: 1
Stderr:
error: command failed: 'rustc'
Caused by:
No such file or directory (os error 2)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⋮ 2 frames hidden ⋮
3: cross::errors::CommandError::to_section_report::haf6db90edbbc2fa1
at <unknown source file>:<unknown line>
4: <std::process::Command as cross::extensions::CommandExt>::run_and_get_stdout::h41183c33031a72dc
at <unknown source file>:<unknown line>
5: cross::rustc::target_list::hb77019062f2d86b9
at <unknown source file>:<unknown line>
6: cross::main::h78080d144cfea61c
at <unknown source file>:<unknown line>
7: std::sys_common::backtrace::__rust_begin_short_backtrace::hbdb628ab08aea082
at <unknown source file>:<unknown line>
8: main<unknown>
at <unknown source file>:<unknown line>
9: __libc_start_call_main<unknown>
at <unknown source file>:<unknown line>
10: __libc_start_main_impl<unknown>
at <unknown source file>:<unknown line>
11: _start<unknown>
at <unknown source file>:<unknown line>
Weird stuff. What do which rustc
and which cross
return when inside nix develop -L .#devenv --impure
? They should point to the devenv profile. The devenv profile should also be in your path
I've run my fixes on GitHub Actions and it all works. It'd be great to figure out what's going wrong with your setup.
As far as devenv is concerned, I would propose exposing the following options:
targets
fromToolchainFile
The targets
option is a bit tricky to implement. rust-std
would need to be fetched from targets.<target-triple>.<channel>.rust-std
.
Thanks @sandydoo , I will try and look deeper into what is causing my builds to fail locally.
@sandydoo does #900 fix this? I've tested with wasm target.
Figured I would give an update and come back to this. For some reason it now works using the same commands I did in the previous attempt? Not sure what we can really determine about why it was failing before. /shrug
➜ Other git clone https://github.com/sandydoo/cargo_cross_flake_test cargo_cross_flake_test_sandydoo
Cloning into 'cargo_cross_flake_test_sandydoo'...
remote: Enumerating objects: 50, done.
remote: Counting objects: 100% (50/50), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 50 (delta 18), reused 41 (delta 9), pack-reused 0
Receiving objects: 100% (50/50), 15.49 KiB | 1.41 MiB/s, done.
Resolving deltas: 100% (18/18), done.
➜ Other cd cargo_cross_flake_test_sandydoo
➜ cargo_cross_flake_test_sandydoo git:(master) git switch wip
branch 'wip' set up to track 'origin/wip'.
Switched to a new branch 'wip'
➜ cargo_cross_flake_test_sandydoo git:(wip) ./build-flake.sh
[+] Building 0.3s (6/6) FINISHED docker:default
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile.x86_64-pc-windows-gnu-custom 0.0s
=> => transferring dockerfile: 240B 0.0s
=> [internal] load metadata for ghcr.io/cross-rs/x86_64-pc-windows-gnu:0.2.5 0.3s
=> [1/2] FROM ghcr.io/cross-rs/x86_64-pc-windows-gnu:0.2.5@sha256:8ba72a5491168af78e52f453f09d204cee330ff09a032 0.0s
=> CACHED [2/2] RUN eval "apt-get update" 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:c4e9d11a6d9ee47e9548cf7bde6c9d27e1d5c7f6790e16a9b17dcaa51bb561bb 0.0s
=> => naming to localhost/cross-rs/cross-custom-cargo_cross_flake_test_sandydoo:x86_64-pc-windows-gnu-7fd0b-pre 0.0s
Compiling windows_x86_64_gnu v0.48.5
Compiling windows-targets v0.48.5
Compiling windows v0.48.0
Compiling flake_overlay v0.1.0 (/home/cryomyst/Projects/Personal/Other/cargo_cross_flake_test_sandydoo)
Finished release [optimized] target(s) in 2.30s
You can now specify targets, does this address the issue?
This seems to work at commit 02196df5a23e511d9fe7b9e80147cb198eceb450 however there were still some extra steps required for cargo-cross (Putting it here for future adventurers).
Something uses rustc --print sysroot
to determine the toolchain triple so you will get the following:
cross build --target "aarch64-unknown-linux-gnu" --verbose
+ cargo metadata --format-version 1 --filter-platform aarch64-unknown-linux-gnu
+ rustc --print sysroot
Error:
0: could not determine os in target triplet
1: unsupported os in target, abi: "mixed", system: "rust"
rustc --print sysroot
/nix/store/8bfii2p5pjdqapng1wxksa116aahacl6-rust-mixed
To fix this I had to use the following to specify it manually.
env.CROSS_CUSTOM_TOOLCHAIN = "1";
env.CROSS_CUSTOM_TOOLCHAIN_COMPAT = "x86_64-pc-windows-gnu";
Other than that it was fine and I was able to run ./build-flake.sh
in my updated test repo https://github.com/CryoMyst/cargo_cross_flake_test without any issues.
This seems to work at commit 02196df5a23e511d9fe7b9e80147cb198eceb450 however there were still some extra steps required for cargo-cross (Putting it here for future adventurers).
Something uses
rustc --print sysroot
to determine the toolchain triple so you will get the following:cross build --target "aarch64-unknown-linux-gnu" --verbose + cargo metadata --format-version 1 --filter-platform aarch64-unknown-linux-gnu + rustc --print sysroot Error: 0: could not determine os in target triplet 1: unsupported os in target, abi: "mixed", system: "rust"
rustc --print sysroot /nix/store/8bfii2p5pjdqapng1wxksa116aahacl6-rust-mixed
To fix this I had to use the following to specify it manually.
env.CROSS_CUSTOM_TOOLCHAIN = "1"; env.CROSS_CUSTOM_TOOLCHAIN_COMPAT = "x86_64-pc-windows-gnu";
Other than that it was fine and I was able to run
./build-flake.sh
in my updated test repo https://github.com/CryoMyst/cargo_cross_flake_test without any issues.
Can we set these flags automatically in some cases?
These environment variables are specific to this tool so I'm not sure this is devenvs responsibility. It might also be changed per build in case of cross compiling to multiple targets.
Devenv does not seem to play nicely with
cargo-cross
which I use a lot for cross compilation.Example
Repo example: https://github.com/CryoMyst/cargo_cross_flake_test
just edit
flake.nix
to switch between devenv and a normal rust overlay.Devenv
flake.nix
Result
Overlay
flake.nix
Result