Skip to content

Commit f919ad8

Browse files
authored
Unrolled build for rust-lang#132782
Rollup merge of rust-lang#132782 - onur-ozkan:cleanup, r=jieyouxu improvements on initial sysroot and libdir finding logics Stabilized initial sysroot and libdir path resolution logic to work without dry-run conditions and utilized initial sysroot more broadly.
2 parents 5bbbc09 + 27323aa commit f919ad8

File tree

5 files changed

+24
-54
lines changed

5 files changed

+24
-54
lines changed

src/bootstrap/src/core/build_steps/test.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1064,7 +1064,7 @@ impl Step for Tidy {
10641064
if builder.config.channel == "dev" || builder.config.channel == "nightly" {
10651065
builder.info("fmt check");
10661066
if builder.initial_rustfmt().is_none() {
1067-
let inferred_rustfmt_dir = builder.initial_rustc.parent().unwrap();
1067+
let inferred_rustfmt_dir = builder.initial_sysroot.join("bin");
10681068
eprintln!(
10691069
"\
10701070
ERROR: no `rustfmt` binary found in {PATH}

src/bootstrap/src/core/builder/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1262,7 +1262,7 @@ impl<'a> Builder<'a> {
12621262
pub fn sysroot_libdir_relative(&self, compiler: Compiler) -> &Path {
12631263
match self.config.libdir_relative() {
12641264
Some(relative_libdir) if compiler.stage >= 1 => relative_libdir,
1265-
_ if compiler.stage == 0 => &self.build.initial_libdir,
1265+
_ if compiler.stage == 0 => &self.build.initial_relative_libdir,
12661266
_ => Path::new("lib"),
12671267
}
12681268
}

src/bootstrap/src/core/config/config.rs

+6-8
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ pub struct Config {
379379
pub initial_cargo: PathBuf,
380380
pub initial_rustc: PathBuf,
381381
pub initial_cargo_clippy: Option<PathBuf>,
382+
pub initial_sysroot: PathBuf,
382383

383384
#[cfg(not(test))]
384385
initial_rustfmt: RefCell<RustfmtState>,
@@ -1563,8 +1564,6 @@ impl Config {
15631564
);
15641565
}
15651566

1566-
config.initial_cargo_clippy = cargo_clippy;
1567-
15681567
config.initial_rustc = if let Some(rustc) = rustc {
15691568
if !flags.skip_stage0_validation {
15701569
config.check_stage0_version(&rustc, "rustc");
@@ -1580,19 +1579,18 @@ impl Config {
15801579
.join(exe("rustc", config.build))
15811580
};
15821581

1582+
config.initial_sysroot = config.initial_rustc.ancestors().nth(2).unwrap().into();
1583+
1584+
config.initial_cargo_clippy = cargo_clippy;
1585+
15831586
config.initial_cargo = if let Some(cargo) = cargo {
15841587
if !flags.skip_stage0_validation {
15851588
config.check_stage0_version(&cargo, "cargo");
15861589
}
15871590
cargo
15881591
} else {
15891592
config.download_beta_toolchain();
1590-
config
1591-
.out
1592-
.join(config.build)
1593-
.join("stage0")
1594-
.join("bin")
1595-
.join(exe("cargo", config.build))
1593+
config.initial_sysroot.join("bin").join(exe("cargo", config.build))
15961594
};
15971595

15981596
// NOTE: it's important this comes *after* we set `initial_rustc` just above.

src/bootstrap/src/core/download.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,8 @@ impl Config {
427427
let version = &self.stage0_metadata.compiler.version;
428428
let host = self.build;
429429

430-
let bin_root = self.out.join(host).join("stage0");
431-
let clippy_stamp = bin_root.join(".clippy-stamp");
432-
let cargo_clippy = bin_root.join("bin").join(exe("cargo-clippy", host));
430+
let clippy_stamp = self.initial_sysroot.join(".clippy-stamp");
431+
let cargo_clippy = self.initial_sysroot.join("bin").join(exe("cargo-clippy", host));
433432
if cargo_clippy.exists() && !program_out_of_date(&clippy_stamp, date) {
434433
return cargo_clippy;
435434
}

src/bootstrap/src/lib.rs

+14-41
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ pub struct Build {
158158
initial_rustc: PathBuf,
159159
initial_cargo: PathBuf,
160160
initial_lld: PathBuf,
161-
initial_libdir: PathBuf,
161+
initial_relative_libdir: PathBuf,
162162
initial_sysroot: PathBuf,
163163

164164
// Runtime state filled in later on
@@ -312,46 +312,19 @@ impl Build {
312312
let in_tree_llvm_info = config.in_tree_llvm_info.clone();
313313
let in_tree_gcc_info = config.in_tree_gcc_info.clone();
314314

315-
let initial_target_libdir_str = if config.dry_run() {
316-
"/dummy/lib/path/to/lib/".to_string()
317-
} else {
318-
output(
319-
Command::new(&config.initial_rustc)
320-
.arg("--target")
321-
.arg(config.build.rustc_target_arg())
322-
.arg("--print")
323-
.arg("target-libdir"),
324-
)
325-
};
315+
let initial_target_libdir_str =
316+
config.initial_sysroot.join("lib/rustlib").join(config.build).join("lib");
317+
326318
let initial_target_dir = Path::new(&initial_target_libdir_str).parent().unwrap();
327319
let initial_lld = initial_target_dir.join("bin").join("rust-lld");
328320

329-
let initial_sysroot = if config.dry_run() {
330-
"/dummy".to_string()
331-
} else {
332-
output(Command::new(&config.initial_rustc).arg("--print").arg("sysroot"))
333-
}
334-
.trim()
335-
.to_string();
336-
337-
// FIXME(Zalathar): Determining this path occasionally fails locally for
338-
// unknown reasons, so we print some extra context to help track down why.
339-
let find_initial_libdir = || {
340-
let initial_libdir =
341-
initial_target_dir.parent()?.parent()?.strip_prefix(&initial_sysroot).ok()?;
342-
Some(initial_libdir.to_path_buf())
343-
};
344-
let Some(initial_libdir) = find_initial_libdir() else {
345-
panic!(
346-
"couldn't determine `initial_libdir`:
347-
- config.initial_rustc: {rustc:?}
348-
- initial_target_libdir_str: {initial_target_libdir_str:?}
349-
- initial_target_dir: {initial_target_dir:?}
350-
- initial_sysroot: {initial_sysroot:?}
351-
",
352-
rustc = config.initial_rustc,
353-
);
354-
};
321+
let initial_relative_libdir = initial_target_dir
322+
.ancestors()
323+
.nth(2)
324+
.unwrap()
325+
.strip_prefix(&config.initial_sysroot)
326+
.expect("Couldn’t determine initial relative libdir.")
327+
.to_path_buf();
355328

356329
let version = std::fs::read_to_string(src.join("src").join("version"))
357330
.expect("failed to read src/version");
@@ -380,11 +353,11 @@ impl Build {
380353
}
381354

382355
let mut build = Build {
356+
initial_lld,
357+
initial_relative_libdir,
383358
initial_rustc: config.initial_rustc.clone(),
384359
initial_cargo: config.initial_cargo.clone(),
385-
initial_lld,
386-
initial_libdir,
387-
initial_sysroot: initial_sysroot.into(),
360+
initial_sysroot: config.initial_sysroot.clone(),
388361
local_rebuild: config.local_rebuild,
389362
fail_fast: config.cmd.fail_fast(),
390363
doc_tests: config.cmd.doc_tests(),

0 commit comments

Comments
 (0)