about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/bootstrap/src/core/config/config.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
index 6664c5b451c..882bae8aeb6 100644
--- a/src/bootstrap/src/core/config/config.rs
+++ b/src/bootstrap/src/core/config/config.rs
@@ -1452,6 +1452,11 @@ impl Config {
             config.out = crate::utils::helpers::absolute(&config.out);
         }
 
+        // Hacky way to determine the executable suffix for the build target. We cannot use
+        // std::env::consts::EXE_SUFFIX as the build target might not be the target bootstrap was
+        // compiled with.
+        let initial_exe_suffix = if config.build.triple.contains("windows") { ".exe" } else { "" };
+
         config.initial_rustc = if let Some(rustc) = rustc {
             if !flags.skip_stage0_validation {
                 config.check_stage0_version(&rustc, "rustc");
@@ -1459,7 +1464,12 @@ impl Config {
             rustc
         } else {
             config.download_beta_toolchain();
-            config.out.join(config.build.triple).join("stage0/bin/rustc")
+            config
+                .out
+                .join(config.build.triple)
+                .join("stage0")
+                .join("bin")
+                .join(format!("rustc{initial_exe_suffix}"))
         };
 
         config.initial_cargo = if let Some(cargo) = cargo {
@@ -1469,7 +1479,12 @@ impl Config {
             cargo
         } else {
             config.download_beta_toolchain();
-            config.out.join(config.build.triple).join("stage0/bin/cargo")
+            config
+                .out
+                .join(config.build.triple)
+                .join("stage0")
+                .join("bin")
+                .join(format!("cargo{initial_exe_suffix}"))
         };
 
         // NOTE: it's important this comes *after* we set `initial_rustc` just above.