diff options
| author | Joshua Nelson <jnelson@cloudflare.com> | 2022-03-10 08:47:53 -0600 |
|---|---|---|
| committer | Joshua Nelson <jnelson@cloudflare.com> | 2022-03-10 17:25:29 -0600 |
| commit | 25a7d2d540656e0499a43bfd01243250f2a25d7a (patch) | |
| tree | ba89d9430d3f61853651fa6c9936c08f25be4a41 | |
| parent | 687e53ebfe107fb81288df0273e581c55fd411a4 (diff) | |
| download | rust-25a7d2d540656e0499a43bfd01243250f2a25d7a.tar.gz rust-25a7d2d540656e0499a43bfd01243250f2a25d7a.zip | |
Fix `cargo run tidy`
When I implemented rust-only bootstrapping in https://github.com/rust-lang/rust/pull/92260, I neglected to test stage0 tools - it turns out they were broken because they couldn't find the sysroot of the initial bootstrap compiler. This fixes stage0 tools by using `rustc --print sysroot` instead of assuming rustc is already in a sysroot and hard-coding the relative directory.
| -rw-r--r-- | src/bootstrap/lib.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 2ae63858ff6..91a0e40ca18 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -117,6 +117,7 @@ use std::os::unix::fs::symlink as symlink_file; use std::os::windows::fs::symlink_file; use filetime::FileTime; +use once_cell::sync::OnceCell; use crate::builder::Kind; use crate::config::{LlvmLibunwind, TargetSelection}; @@ -892,7 +893,12 @@ impl Build { /// Returns the sysroot of the snapshot compiler. fn rustc_snapshot_sysroot(&self) -> &Path { - self.initial_rustc.parent().unwrap().parent().unwrap() + static SYSROOT_CACHE: OnceCell<PathBuf> = once_cell::sync::OnceCell::new(); + SYSROOT_CACHE.get_or_init(|| { + let mut rustc = Command::new(&self.initial_rustc); + rustc.args(&["--print", "sysroot"]); + output(&mut rustc).trim().into() + }) } /// Runs a command, printing out nice contextual information if it fails. |
