Skip to content

Commit 5b884c4

Browse files
authored
Merge pull request #20964 from ShoyuVanilla/canonicalize-tgts
fix: Canonicalize `custom-target.json` paths when fetching sysroot metadata
2 parents 00b627d + f09b0a8 commit 5b884c4

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

crates/project-model/src/workspace.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ impl ProjectWorkspace {
374374
sysroot.load_workspace(
375375
&RustSourceWorkspaceConfig::CargoMetadata(sysroot_metadata_config(
376376
config,
377+
workspace_dir,
377378
&targets,
378379
toolchain.clone(),
379380
)),
@@ -480,6 +481,7 @@ impl ProjectWorkspace {
480481
sysroot.load_workspace(
481482
&RustSourceWorkspaceConfig::CargoMetadata(sysroot_metadata_config(
482483
config,
484+
project_json.project_root(),
483485
&targets,
484486
toolchain.clone(),
485487
)),
@@ -535,6 +537,7 @@ impl ProjectWorkspace {
535537
let loaded_sysroot = sysroot.load_workspace(
536538
&RustSourceWorkspaceConfig::CargoMetadata(sysroot_metadata_config(
537539
config,
540+
dir,
538541
&targets,
539542
toolchain.clone(),
540543
)),
@@ -1864,12 +1867,29 @@ fn add_dep_inner(graph: &mut CrateGraphBuilder, from: CrateBuilderId, dep: Depen
18641867

18651868
fn sysroot_metadata_config(
18661869
config: &CargoConfig,
1870+
current_dir: &AbsPath,
18671871
targets: &[String],
18681872
toolchain_version: Option<Version>,
18691873
) -> CargoMetadataConfig {
1874+
// We run `cargo metadata` on sysroot with sysroot dir as a working directory, but still pass
1875+
// the `targets` from the cargo config evaluated from the workspace's `current_dir`.
1876+
// So, we need to *canonicalize* those *might-be-relative-paths-to-custom-target-json-files*.
1877+
//
1878+
// See https://github.com/rust-lang/cargo/blob/f7acf448fc127df9a77c52cc2bba027790ac4931/src/cargo/core/compiler/compile_kind.rs#L171-L192
1879+
let targets = targets
1880+
.iter()
1881+
.map(|target| {
1882+
if target.ends_with(".json") {
1883+
current_dir.join(target).to_string()
1884+
} else {
1885+
target.to_owned()
1886+
}
1887+
})
1888+
.collect();
1889+
18701890
CargoMetadataConfig {
18711891
features: Default::default(),
1872-
targets: targets.to_vec(),
1892+
targets,
18731893
extra_args: Default::default(),
18741894
extra_env: config.extra_env.clone(),
18751895
toolchain_version,

0 commit comments

Comments
 (0)