diff options
| author | Amos Wenger <amoswenger@gmail.com> | 2022-07-25 17:52:38 +0200 |
|---|---|---|
| committer | Amos Wenger <amoswenger@gmail.com> | 2022-07-25 17:52:38 +0200 |
| commit | 2c2520fbb48b977a805b46af79e4016a4394e719 (patch) | |
| tree | a20f7e4d852d5c4c9eef3bc1551b2268cad7ce18 | |
| parent | 696775153dffaa701bcabe67b5fe601db862c4f4 (diff) | |
| download | rust-2c2520fbb48b977a805b46af79e4016a4394e719.tar.gz rust-2c2520fbb48b977a805b46af79e4016a4394e719.zip | |
Allow specifying sysroot OR sysroot_src
| -rw-r--r-- | crates/project-model/src/workspace.rs | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs index 63882466fa4..b144006b44e 100644 --- a/crates/project-model/src/workspace.rs +++ b/crates/project-model/src/workspace.rs @@ -230,16 +230,26 @@ impl ProjectWorkspace { project_json: ProjectJson, target: Option<&str>, ) -> Result<ProjectWorkspace> { - let sysroot = match project_json.sysroot_src.clone() { - Some(sysroot_src) => { - // if `sysroot` isn't specified (only `sysroot_src`), we won't have - // a real sysroot path, that's fine. it's just used to discover - // the standalone `proc-macro-srv` binary. - let sysroot = project_json.sysroot.clone().unwrap_or_else(|| sysroot_src.clone()); + let sysroot = match (project_json.sysroot.clone(), project_json.sysroot_src.clone()) { + (Some(sysroot), Some(sysroot_src)) => Some(Sysroot::load(sysroot, sysroot_src)?), + (Some(sysroot), None) => { + // assume sysroot is structured like rustup's and guess `sysroot_src` + let sysroot_src = + sysroot.join("lib").join("rustlib").join("src").join("rust").join("library"); + Some(Sysroot::load(sysroot, sysroot_src)?) } - None => None, + (None, Some(sysroot_src)) => { + // assume sysroot is structured like rustup's and guess `sysroot` + let mut sysroot = sysroot_src.clone(); + for _ in 0..5 { + sysroot.pop(); + } + Some(Sysroot::load(sysroot, sysroot_src)?) + } + (None, None) => None, }; + let rustc_cfg = rustc_cfg::get(None, target); Ok(ProjectWorkspace::Json { project: project_json, sysroot, rustc_cfg }) } |
