diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs index 6664c5b451c87..882bae8aeb6a1 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.