-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Description
Problem
Context: I have a project that is a workspace that contains multiple library crates that are outputting cdylib types.
Bug/Expectation: When I build in the root of the workspace, I would expect running cargo build -p <crate> to be a noop as the workspace cargo build should have built all of it. If running cargo build -p <crate> outputs to a different cache, then I would expect that the cargo build and cargo build -p to not affect each other at all. Instead, whenever I build cargo build, it invalidates the individual cargo build of the crate's dependencies and forces a rebuild...
Steps
https://github.com/Kevin-Reactor/Fingerprint-Repro
Here is a public repo of a minimal reproduction of the issue.
Step 1: Download the repo
Step 2: run cargo build in the root directory
Step 3: run cargo build -p test_2
Step 4: Alternate between running cargo build and CARGO_LOG=cargo::core::compiler::fingerprint=info cargo build -p test_2 and you can see it complain that the fingerprint for serde_yaml has changed
Possible Solution(s)
No response
Notes
I have tested a few configurations, this only seems to happen when the libraries output cdylib, and only happens when there are two crates (i.e. a workspace with only one crate doesn't have this issue)
It also seems to happen with specific crates. quiche and serde_yaml specifically but I have no idea why.
I know that there's an issue with the features of the crates potentially being different between building in root and building with -p, but it makes no sense that this configuration doesn't require rebuilds with lib instead of cdylib and that they don't have any shared features...
Version
cargo 1.70.0 (ec8a8a0ca 2023-04-25)
release: 1.70.0
commit-hash: ec8a8a0cabb0e0cadef58902470f6c7ee7868bdc
commit-date: 2023-04-25
host: x86_64-unknown-linux-gnu
libgit2: 1.6.3 (sys:0.17.0 vendored)
libcurl: 8.0.1-DEV (sys:0.4.61+curl-8.0.1 vendored ssl:OpenSSL/1.1.1t)
os: Ubuntu 22.04 (jammy) [64-bit]