]> git.lizzy.rs Git - rust.git/commitdiff
fix #102002, Delete the stage1 and stage0-sysroot directories when using download...
authoryukang <moorekang@gmail.com>
Mon, 19 Sep 2022 16:53:46 +0000 (00:53 +0800)
committeryukang <moorekang@gmail.com>
Mon, 19 Sep 2022 16:58:16 +0000 (00:58 +0800)
src/bootstrap/compile.rs
src/bootstrap/tool.rs

index c13e83f6c86126c82563b80f224f6252bf6dfc2e..51268a16d6342f0b7615c9feb693130dbfe5b800 100644 (file)
@@ -1099,10 +1099,11 @@ fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
     /// 1-3.
     fn run(self, builder: &Builder<'_>) -> Interned<PathBuf> {
         let compiler = self.compiler;
+        let host_dir = builder.out.join(&compiler.host.triple);
         let sysroot = if compiler.stage == 0 {
-            builder.out.join(&compiler.host.triple).join("stage0-sysroot")
+            host_dir.join("stage0-sysroot")
         } else {
-            builder.out.join(&compiler.host.triple).join(format!("stage{}", compiler.stage))
+            host_dir.join(format!("stage{}", compiler.stage))
         };
         let _ = fs::remove_dir_all(&sysroot);
         t!(fs::create_dir_all(&sysroot));
@@ -1113,6 +1114,11 @@ fn run(self, builder: &Builder<'_>) -> Interned<PathBuf> {
                 builder.config.build, compiler.host,
                 "Cross-compiling is not yet supported with `download-rustc`",
             );
+
+            // #102002, cleanup stage1 and stage0-sysroot folders when using download-rustc
+            let _ = fs::remove_dir_all(host_dir.join("stage1"));
+            let _ = fs::remove_dir_all(host_dir.join("stage0-sysroot"));
+
             // Copy the compiler into the correct sysroot.
             let ci_rustc_dir =
                 builder.config.out.join(&*builder.config.build.triple).join("ci-rustc");
index 5d0c7d2bd9d44c49a9682e79a08ca2cfcc6b56d1..6a11e04f6309932beff061f33b2cff5009ba84ac 100644 (file)
@@ -512,8 +512,10 @@ fn run(self, builder: &Builder<'_>) -> PathBuf {
         // Similar to `compile::Assemble`, build with the previous stage's compiler. Otherwise
         // we'd have stageN/bin/rustc and stageN/bin/rustdoc be effectively different stage
         // compilers, which isn't what we want. Rustdoc should be linked in the same way as the
-        // rustc compiler it's paired with, so it must be built with the previous stage compiler.
-        let build_compiler = builder.compiler(target_compiler.stage - 1, builder.config.build);
+        // rustc compiler it's paired with, so it must be built with the previous stage compiler,
+        // if download_rustc is true, we will use the same target stage.
+        let target_stage = target_compiler.stage - if builder.download_rustc() { 0 } else { 1 };
+        let build_compiler = builder.compiler(target_stage, builder.config.build);
 
         // When using `download-rustc` and a stage0 build_compiler, copying rustc doesn't actually
         // build stage0 libstd (because the libstd in sysroot has the wrong ABI). Explicitly build