@@ -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
18651868fn 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