You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Right now cargoExtraArgs = "--bin bin-target-name" (usually1) doesn't work if you only specify lib.buildPackage (i.e., you don't split out the two lib.buildDepsOnly and lib.buildPackage steps yourself). I think this is due to buildDepsOnly clearing out your project's source code so it can build just the deps; whatever bin target you were looking for isn't there anymore.
A log from this situation:
$ nix log /nix/store/n9xik3k23ksncrhm0byhdq8xj1ibswxi-oxide-hello-deps-0.1.0.drv
cargoArtifacts not set, will not reuse any cargo artifacts
@nix { "action": "setPhase", "phase": "unpackPhase" }
unpacking sources
unpacking source archive /nix/store/czpn6g82n5qlxm1rqibqc6vz0kk94b4n-hello
source root is hello
@nix { "action": "setPhase", "phase": "patchPhase" }
patching sources
Executing configureCargoCommonVars
@nix { "action": "setPhase", "phase": "configurePhase" }
configuring
will append /build/hello/.cargo-home/config.toml with contents of /nix/store/1f6wsb6l4r1cqcggvv3dz12iz53sshl7-vendor-cargo-deps/config.toml
default configurePhase, nothing to do
@nix { "action": "setPhase", "phase": "buildPhase" }
building
++ command cargo --version
cargo 1.68.0 (115f34552 2023-02-26)
++ command cargo check --profile release --bin oxide-hello
error: no bin target named `oxide-hello`.
Available bin targets:
crane-dummy
This is not a strong necessity for me but it seems like an issue someone else might trip over. Having some additional options for specifying targets (or even packages of a workspace?) to build would make the interface nicer.
Footnotes
In a project I'm working on I got fooled into thinking it would work because the package I was building had a [[bin]] section manually declaring the bin target in Cargo.toml, which I think is why it worked in the buildDepsOnly stage? ↩
The text was updated successfully, but these errors were encountered:
Thanks for reporting this @iliana! It was always the intention to maintain the same project structure (including any targets) between the deps-only and final builds (so that setting --bin whatever would just work out of the box), but it looks like some of that was lost in translation of reducing the chance of invalidating the build caches (i.e. if a new bin/whatever.rs file is added it would require rebuilding everything from scratch...)
In a project I'm working on I got fooled into thinking it would work because the package I was building had a [[bin]] section manually declaring the bin target in Cargo.toml,
Great observation, this is exactly the root of the problem! Although we go to some lengths to preserve targets listed in Cargo.toml we don't consider auto-targets (e.g. files like src/bin/whatever.rs even if not declared as a [[bin]] in Cargo.toml).
The solution here is to expand the dummification logic to also peek at any autotargets (unless autoWHATEVER = false in Cargo.toml) and if present, replace them with the dummy source file
ipetkov
changed the title
Support cargoExtraArgs = "--bin bin-target-name" (or similar)
Support cargoExtraArgs = "--bin bin-target-name" (or similar) when buildPackage is used without explicitly setting cargoArtifactsApr 21, 2024
Right now
cargoExtraArgs = "--bin bin-target-name"
(usually1) doesn't work if you only specifylib.buildPackage
(i.e., you don't split out the twolib.buildDepsOnly
andlib.buildPackage
steps yourself). I think this is due tobuildDepsOnly
clearing out your project's source code so it can build just the deps; whatever bin target you were looking for isn't there anymore.A log from this situation:
This is not a strong necessity for me but it seems like an issue someone else might trip over. Having some additional options for specifying targets (or even packages of a workspace?) to build would make the interface nicer.
Footnotes
In a project I'm working on I got fooled into thinking it would work because the package I was building had a
[[bin]]
section manually declaring the bin target in Cargo.toml, which I think is why it worked in thebuildDepsOnly
stage? ↩The text was updated successfully, but these errors were encountered: