mirror of https://github.com/rust-lang/rust.git
rust-lld: fallback to the default default sysroot where rustc is currently located
This commit is contained in:
parent
6867d6492b
commit
fab28f2a4d
|
@ -3116,13 +3116,21 @@ fn add_lld_args(
|
||||||
|
|
||||||
let self_contained_linker = self_contained_cli || self_contained_target;
|
let self_contained_linker = self_contained_cli || self_contained_target;
|
||||||
if self_contained_linker && !sess.opts.cg.link_self_contained.is_linker_disabled() {
|
if self_contained_linker && !sess.opts.cg.link_self_contained.is_linker_disabled() {
|
||||||
|
let mut linker_path_exists = false;
|
||||||
for path in sess.get_tools_search_paths(false) {
|
for path in sess.get_tools_search_paths(false) {
|
||||||
|
let linker_path = path.join("gcc-ld");
|
||||||
|
linker_path_exists |= linker_path.exists();
|
||||||
cmd.arg({
|
cmd.arg({
|
||||||
let mut arg = OsString::from("-B");
|
let mut arg = OsString::from("-B");
|
||||||
arg.push(path.join("gcc-ld"));
|
arg.push(linker_path);
|
||||||
arg
|
arg
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if !linker_path_exists {
|
||||||
|
// As an additional sanity check, we do nothing if the sysroot doesn't contain the
|
||||||
|
// linker path at all.
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Implement the "linker flavor" part of this feature by asking `cc` to use some kind of
|
// 2. Implement the "linker flavor" part of this feature by asking `cc` to use some kind of
|
||||||
|
|
|
@ -449,15 +449,24 @@ impl Session {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a list of directories where target-specific tool binaries are located.
|
/// Returns a list of directories where target-specific tool binaries are located. Some fallback
|
||||||
|
/// directories are also returned, for example if `--sysroot` is used but tools are missing
|
||||||
|
/// (#125246): we also add the bin directories to the sysroot where rustc is located.
|
||||||
pub fn get_tools_search_paths(&self, self_contained: bool) -> Vec<PathBuf> {
|
pub fn get_tools_search_paths(&self, self_contained: bool) -> Vec<PathBuf> {
|
||||||
let rustlib_path = rustc_target::target_rustlib_path(&self.sysroot, config::host_triple());
|
let bin_path = filesearch::make_target_bin_path(&self.sysroot, config::host_triple());
|
||||||
let p = PathBuf::from_iter([
|
let fallback_sysroot_paths = filesearch::sysroot_candidates()
|
||||||
Path::new(&self.sysroot),
|
.into_iter()
|
||||||
Path::new(&rustlib_path),
|
.map(|sysroot| filesearch::make_target_bin_path(&sysroot, config::host_triple()));
|
||||||
Path::new("bin"),
|
let search_paths = std::iter::once(bin_path).chain(fallback_sysroot_paths);
|
||||||
]);
|
|
||||||
if self_contained { vec![p.clone(), p.join("self-contained")] } else { vec![p] }
|
if self_contained {
|
||||||
|
// The self-contained tools are expected to be e.g. in `bin/self-contained` in the
|
||||||
|
// sysroot's `rustlib` path, so we add such a subfolder to the bin path, and the
|
||||||
|
// fallback paths.
|
||||||
|
search_paths.flat_map(|path| [path.clone(), path.join("self-contained")]).collect()
|
||||||
|
} else {
|
||||||
|
search_paths.collect()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init_incr_comp_session(&self, session_dir: PathBuf, lock_file: flock::Lock) {
|
pub fn init_incr_comp_session(&self, session_dir: PathBuf, lock_file: flock::Lock) {
|
||||||
|
|
Loading…
Reference in New Issue