Skip to content

Commit

Permalink
Rebuild llvm spuriously less frequently
Browse files Browse the repository at this point in the history
I noticed that `x check` was rebuilding rustc_llvm basically every time I modified
a source file. I tracked this down to the following env variable change:
```
cargo::core::compiler::fingerprint:     dirty: EnvVarChanged { name: "REAL_LIBRARY_PATH", old_value: Some("/home/jyn/.local/lib/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib"), new_value: None }
```

The problem was that I had installed rust-analyzer from rustup, not as a
standalone tool. As a result, rustup sets
`LD_LIBRARY_PATH=$(rustc --print target-libdir)` in the environment
under the assumption that rust-analyzer needs it to link to
rustc_private crates. This is not in fact the case; RA does not link to
rustc_private. But rustup does not know this. Ideally we would make
rustup smarter, but that takes a while because rustup has infrequent
releases.

In the meantime, as a workaround, be a little more selective about when we forward
LD_LIBRARY_PATH. See the new comment for more details.
  • Loading branch information
jyn514 committed Mar 11, 2025
1 parent 385970f commit a191eb0
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/bootstrap/src/core/builder/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,14 @@ impl Builder<'_> {
// needs to not accidentally link to libLLVM in stage0/lib.
cargo.env("REAL_LIBRARY_PATH_VAR", helpers::dylib_path_var());
if let Some(e) = env::var_os(helpers::dylib_path_var()) {
cargo.env("REAL_LIBRARY_PATH", e);
// We only need the original LIBRARY_PATH when using system llvm. In all other cases, we can
// just discard it. This is useful because rust-analyzer sometimes has a different
// LIBRARY_PATH than a baseline environment, causing spurious rebuilds.
let ci_llvm = self.config.llvm_from_ci && target == self.build.build;
let prebuilt_llvm = self.config.target_config.get(&target).and_then(|conf| conf.llvm_config.as_ref()).is_some();
if prebuilt_llvm && !ci_llvm {
cargo.env("REAL_LIBRARY_PATH", e);
}
}

// Set a flag for `check`/`clippy`/`fix`, so that certain build
Expand Down

0 comments on commit a191eb0

Please sign in to comment.