Skip to content

Commit 0f9cc8a

Browse files
authored
Rollup merge of rust-lang#72728 - o01eg:fix-72661, r=Mark-Simulacrum
Make bootstrap aware of relative libdir in stage0 compiler Follows up rust-lang#72692 Fixes rust-lang#72661
2 parents 177e698 + c0ac2e8 commit 0f9cc8a

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

src/bootstrap/builder.rs

+1
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,7 @@ impl<'a> Builder<'a> {
648648
pub fn sysroot_libdir_relative(&self, compiler: Compiler) -> &Path {
649649
match self.config.libdir_relative() {
650650
Some(relative_libdir) if compiler.stage >= 1 => relative_libdir,
651+
_ if compiler.stage == 0 => &self.build.initial_libdir,
651652
_ => Path::new("lib"),
652653
}
653654
}

src/bootstrap/lib.rs

+29-7
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ pub struct Build {
243243
initial_rustc: PathBuf,
244244
initial_cargo: PathBuf,
245245
initial_lld: PathBuf,
246+
initial_libdir: PathBuf,
246247

247248
// Runtime state filled in later on
248249
// C/C++ compilers and archiver for all targets
@@ -344,18 +345,39 @@ impl Build {
344345
// we always try to use git for LLVM builds
345346
let in_tree_llvm_info = channel::GitInfo::new(false, &src.join("src/llvm-project"));
346347

347-
let initial_sysroot = config.initial_rustc.parent().unwrap().parent().unwrap();
348-
let initial_lld = initial_sysroot
349-
.join("lib")
350-
.join("rustlib")
351-
.join(config.build)
352-
.join("bin")
353-
.join("rust-lld");
348+
let initial_target_libdir_str = if config.dry_run {
349+
"/dummy/lib/path/to/lib/".to_string()
350+
} else {
351+
output(
352+
Command::new(&config.initial_rustc)
353+
.arg("--target")
354+
.arg(config.build)
355+
.arg("--print")
356+
.arg("target-libdir"),
357+
)
358+
};
359+
let initial_target_dir = Path::new(&initial_target_libdir_str).parent().unwrap();
360+
let initial_lld = initial_target_dir.join("bin").join("rust-lld");
361+
362+
let initial_sysroot = if config.dry_run {
363+
"/dummy".to_string()
364+
} else {
365+
output(Command::new(&config.initial_rustc).arg("--print").arg("sysroot"))
366+
};
367+
let initial_libdir = initial_target_dir
368+
.parent()
369+
.unwrap()
370+
.parent()
371+
.unwrap()
372+
.strip_prefix(initial_sysroot.trim())
373+
.unwrap()
374+
.to_path_buf();
354375

355376
let mut build = Build {
356377
initial_rustc: config.initial_rustc.clone(),
357378
initial_cargo: config.initial_cargo.clone(),
358379
initial_lld,
380+
initial_libdir,
359381
local_rebuild: config.local_rebuild,
360382
fail_fast: config.cmd.fail_fast(),
361383
doc_tests: config.cmd.doc_tests(),

0 commit comments

Comments
 (0)