Skip to content

Commit 310c97b

Browse files
committed
Fix caching issue when building tools.
1 parent 0cd7ff7 commit 310c97b

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/bootstrap/bin/rustc.rs

+4
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ fn main() {
7676
cmd.env("RUST_BACKTRACE", "1");
7777
}
7878

79+
if let Ok(lint_flags) = env::var("RUSTC_LINT_FLAGS") {
80+
cmd.args(lint_flags.split_whitespace());
81+
}
82+
7983
if target.is_some() {
8084
// The stage0 compiler has a special sysroot distinct from what we
8185
// actually downloaded, so we just always pass the `--sysroot` option,

src/bootstrap/builder.rs

+14-4
Original file line numberDiff line numberDiff line change
@@ -1130,22 +1130,32 @@ impl<'a> Builder<'a> {
11301130
cargo.env("RUSTC_VERBOSE", self.verbosity.to_string());
11311131

11321132
if source_type == SourceType::InTree {
1133+
let mut lint_flags = Vec::new();
11331134
// When extending this list, add the new lints to the RUSTFLAGS of the
11341135
// build_bootstrap function of src/bootstrap/bootstrap.py as well as
11351136
// some code doesn't go through this `rustc` wrapper.
1136-
rustflags.arg("-Wrust_2018_idioms");
1137-
rustflags.arg("-Wunused_lifetimes");
1137+
lint_flags.push("-Wrust_2018_idioms");
1138+
lint_flags.push("-Wunused_lifetimes");
11381139

11391140
if self.config.deny_warnings {
1140-
rustflags.arg("-Dwarnings");
1141+
lint_flags.push("-Dwarnings");
11411142
}
11421143

11431144
// FIXME(#58633) hide "unused attribute" errors in incremental
11441145
// builds of the standard library, as the underlying checks are
11451146
// not yet properly integrated with incremental recompilation.
11461147
if mode == Mode::Std && compiler.stage == 0 && self.config.incremental {
1147-
rustflags.arg("-Aunused-attributes");
1148+
lint_flags.push("-Aunused-attributes");
11481149
}
1150+
// This does not use RUSTFLAGS due to caching issues with Cargo.
1151+
// Clippy is treated as an "in tree" tool, but shares the same
1152+
// cache as other "submodule" tools. With these options set in
1153+
// RUSTFLAGS, that causes *every* shared dependency to be rebuilt.
1154+
// By injecting this into the rustc wrapper, this circumvents
1155+
// Cargo's fingerprint detection. This is fine because lint flags
1156+
// are always ignored in dependencies. Eventually this should be
1157+
// fixed via better support from Cargo.
1158+
cargo.env("RUSTC_LINT_FLAGS", lint_flags.join(" "));
11491159
}
11501160

11511161
if let Mode::Rustc | Mode::Codegen = mode {

0 commit comments

Comments
 (0)