Rollup merge of #104076 - ozkanonur:fix-ci-rustc-sysroot, r=jyn514

fix sysroot issue which appears for ci downloaded rustc

Currently when compiler is downloaded rather than compiled, sysroot is being `ci-rustc-sysroot` because of 7eef946fc0/src/bootstrap/compile.rs (L1125-L1131) this.

And rustdoc is overriding the downloaded one at the end of the process.

With the condition I add, we simply check if the current compiler stage is target build stage, if so use the proper sysroot instead of `ci-rustc-sysroot`.

Resolves #103206
This commit is contained in:
Matthias Krüger 2022-11-19 15:35:20 +01:00 committed by GitHub
commit d6298d3dc8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1121,13 +1121,18 @@ impl Step for Sysroot {
fn run(self, builder: &Builder<'_>) -> Interned<PathBuf> { fn run(self, builder: &Builder<'_>) -> Interned<PathBuf> {
let compiler = self.compiler; let compiler = self.compiler;
let host_dir = builder.out.join(&compiler.host.triple); let host_dir = builder.out.join(&compiler.host.triple);
let sysroot = if compiler.stage == 0 {
let sysroot_dir = |stage| {
if stage == 0 {
host_dir.join("stage0-sysroot") host_dir.join("stage0-sysroot")
} else if builder.download_rustc() { } else if builder.download_rustc() && compiler.stage != builder.top_stage {
host_dir.join("ci-rustc-sysroot") host_dir.join("ci-rustc-sysroot")
} else { } else {
host_dir.join(format!("stage{}", compiler.stage)) host_dir.join(format!("stage{}", stage))
}
}; };
let sysroot = sysroot_dir(compiler.stage);
let _ = fs::remove_dir_all(&sysroot); let _ = fs::remove_dir_all(&sysroot);
t!(fs::create_dir_all(&sysroot)); t!(fs::create_dir_all(&sysroot));
@ -1138,9 +1143,15 @@ impl Step for Sysroot {
"Cross-compiling is not yet supported with `download-rustc`", "Cross-compiling is not yet supported with `download-rustc`",
); );
// #102002, cleanup stage1 and stage0-sysroot folders when using download-rustc so people don't use old versions of the toolchain by accident. // #102002, cleanup old toolchain folders when using download-rustc so people don't use them by accident.
let _ = fs::remove_dir_all(host_dir.join("stage1")); for stage in 0..=2 {
let _ = fs::remove_dir_all(host_dir.join("stage0-sysroot")); if stage != compiler.stage {
let dir = sysroot_dir(stage);
if !dir.ends_with("ci-rustc-sysroot") {
let _ = fs::remove_dir_all(dir);
}
}
}
// Copy the compiler into the correct sysroot. // Copy the compiler into the correct sysroot.
let ci_rustc_dir = let ci_rustc_dir =