Rollup merge of #129418 - petrochenkov:libsearch2, r=jieyouxu
rustc: Simplify getting sysroot library directory It was very non-obvious that `sess.target_tlib_path`, `make_target_lib_path(...)`, and `sess.target_filesearch(...).search_paths()` result in the same sysroot library directory paths. They are however, indeed the same, because `sess.target_tlib_path` is initialized to `make_target_lib_path(...)` on `Session` creation, and they are used interchangeably. There are still some redundant calls to `make_target_lib_path` and other inconsistent ways to obtain sysroot directories, but fixing that requires some behavior changes, while this PR is a pure refactoring. Some places in the compiler even disagree on the number of sysroots - 1 (explicit `--sysroot` *or* default sysroot), 2 (explicit `--sysroot` *and* default sysroot), or an unclear number of `sysroot_candidates` every of which is considered. The logic currently using `sess.target_tlib_path` or equivalents assumes one sysroot.
This commit is contained in:
commit
42cd3c60df
3 changed files with 14 additions and 45 deletions
|
@ -5,14 +5,11 @@ use std::{env, fs};
|
|||
|
||||
use rustc_fs_util::{fix_windows_verbatim_for_gcc, try_canonicalize};
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
use tracing::debug;
|
||||
|
||||
use crate::search_paths::{PathKind, SearchPath};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct FileSearch<'a> {
|
||||
sysroot: &'a Path,
|
||||
triple: &'a str,
|
||||
cli_search_paths: &'a [SearchPath],
|
||||
tlib_path: &'a SearchPath,
|
||||
kind: PathKind,
|
||||
|
@ -32,23 +29,12 @@ impl<'a> FileSearch<'a> {
|
|||
.chain(std::iter::once(self.tlib_path))
|
||||
}
|
||||
|
||||
pub fn get_lib_path(&self) -> PathBuf {
|
||||
make_target_lib_path(self.sysroot, self.triple)
|
||||
}
|
||||
|
||||
pub fn get_self_contained_lib_path(&self) -> PathBuf {
|
||||
self.get_lib_path().join("self-contained")
|
||||
}
|
||||
|
||||
pub fn new(
|
||||
sysroot: &'a Path,
|
||||
triple: &'a str,
|
||||
cli_search_paths: &'a [SearchPath],
|
||||
tlib_path: &'a SearchPath,
|
||||
kind: PathKind,
|
||||
) -> FileSearch<'a> {
|
||||
debug!("using sysroot = {}, triple = {}", sysroot.display(), triple);
|
||||
FileSearch { sysroot, triple, cli_search_paths, tlib_path, kind }
|
||||
FileSearch { cli_search_paths, tlib_path, kind }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -440,22 +440,10 @@ impl Session {
|
|||
}
|
||||
|
||||
pub fn target_filesearch(&self, kind: PathKind) -> filesearch::FileSearch<'_> {
|
||||
filesearch::FileSearch::new(
|
||||
&self.sysroot,
|
||||
self.opts.target_triple.triple(),
|
||||
&self.opts.search_paths,
|
||||
&self.target_tlib_path,
|
||||
kind,
|
||||
)
|
||||
filesearch::FileSearch::new(&self.opts.search_paths, &self.target_tlib_path, kind)
|
||||
}
|
||||
pub fn host_filesearch(&self, kind: PathKind) -> filesearch::FileSearch<'_> {
|
||||
filesearch::FileSearch::new(
|
||||
&self.sysroot,
|
||||
config::host_triple(),
|
||||
&self.opts.search_paths,
|
||||
&self.host_tlib_path,
|
||||
kind,
|
||||
)
|
||||
filesearch::FileSearch::new(&self.opts.search_paths, &self.host_tlib_path, kind)
|
||||
}
|
||||
|
||||
/// Returns a list of directories where target-specific tool binaries are located. Some fallback
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue