Skip to content

Commit

Permalink
Auto merge of #99130 - jyn514:std-cache-invalidation, r=Mark-Simulacrum
Browse files Browse the repository at this point in the history
Fix `x build library/std compiler/rustc`

Previously, this was broken because of improper caching:
1. `StepDescription::maybe_run` builds `Compile::Std`, which only built `std` and not `proc_macro`
1. `Std` calls `builder.ensure(StdLink)`
1. `Rustc` calls `ensure(Std)`, which builds all crates, including `proc_macro`
1. `Rustc` calls `ensure(StdLink)`. `ensure` would see that it had already been run and do nothing.  <-- bug is here
1. Cargo gives an error that `proc_macro` doesn't exist.

This fixes the caching by adding `crates` to `StdLink`, so it will get rerun if the crates that are built change.

Fixes #99129.
  • Loading branch information
bors committed Jul 11, 2022
2 parents adaddb5 + 7d4bd54 commit a51fb2b
Showing 1 changed file with 38 additions and 22 deletions.
60 changes: 38 additions & 22 deletions src/bootstrap/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ impl Step for Std {
|| builder.config.keep_stage_std.contains(&compiler.stage)
{
builder.info("Warning: Using a potentially old libstd. This may not behave well.");
builder.ensure(StdLink { compiler, target_compiler: compiler, target });
builder.ensure(StdLink::from_std(self, compiler));
return;
}

Expand All @@ -122,11 +122,7 @@ impl Step for Std {
copy_third_party_objects(builder, &compiler, target);
copy_self_contained_objects(builder, &compiler, target);

builder.ensure(StdLink {
compiler: compiler_to_use,
target_compiler: compiler,
target,
});
builder.ensure(StdLink::from_std(self, compiler_to_use));
return;
}

Expand All @@ -149,11 +145,10 @@ impl Step for Std {
false,
);

builder.ensure(StdLink {
compiler: builder.compiler(compiler.stage, builder.config.build),
target_compiler: compiler,
target,
});
builder.ensure(StdLink::from_std(
self,
builder.compiler(compiler.stage, builder.config.build),
));
}
}

Expand Down Expand Up @@ -394,6 +389,19 @@ struct StdLink {
pub compiler: Compiler,
pub target_compiler: Compiler,
pub target: TargetSelection,
/// Not actually used; only present to make sure the cache invalidation is correct.
crates: Interned<Vec<String>>,
}

impl StdLink {
fn from_std(std: Std, host_compiler: Compiler) -> Self {
Self {
compiler: host_compiler,
target_compiler: std.compiler,
target: std.target,
crates: std.crates,
}
}
}

impl Step for StdLink {
Expand Down Expand Up @@ -614,7 +622,7 @@ impl Step for Rustc {
if builder.config.keep_stage.contains(&compiler.stage) {
builder.info("Warning: Using a potentially old librustc. This may not behave well.");
builder.info("Warning: Use `--keep-stage-std` if you want to rebuild the compiler when it changes");
builder.ensure(RustcLink { compiler, target_compiler: compiler, target });
builder.ensure(RustcLink::from_rustc(self, compiler));
return;
}

Expand All @@ -623,11 +631,7 @@ impl Step for Rustc {
builder.ensure(Rustc::new(compiler_to_use, target));
builder
.info(&format!("Uplifting stage1 rustc ({} -> {})", builder.config.build, target));
builder.ensure(RustcLink {
compiler: compiler_to_use,
target_compiler: compiler,
target,
});
builder.ensure(RustcLink::from_rustc(self, compiler_to_use));
return;
}

Expand Down Expand Up @@ -688,11 +692,10 @@ impl Step for Rustc {
false,
);

builder.ensure(RustcLink {
compiler: builder.compiler(compiler.stage, builder.config.build),
target_compiler: compiler,
target,
});
builder.ensure(RustcLink::from_rustc(
self,
builder.compiler(compiler.stage, builder.config.build),
));
}
}

Expand Down Expand Up @@ -807,6 +810,19 @@ struct RustcLink {
pub compiler: Compiler,
pub target_compiler: Compiler,
pub target: TargetSelection,
/// Not actually used; only present to make sure the cache invalidation is correct.
crates: Interned<Vec<String>>,
}

impl RustcLink {
fn from_rustc(rustc: Rustc, host_compiler: Compiler) -> Self {
Self {
compiler: host_compiler,
target_compiler: rustc.compiler,
target: rustc.target,
crates: rustc.crates,
}
}
}

impl Step for RustcLink {
Expand Down

0 comments on commit a51fb2b

Please sign in to comment.