Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/project-model/src/build_scripts.rs5
-rw-r--r--crates/project-model/src/workspace.rs10
2 files changed, 11 insertions, 4 deletions
diff --git a/crates/project-model/src/build_scripts.rs b/crates/project-model/src/build_scripts.rs
index 6df1273edd..4e5d640f17 100644
--- a/crates/project-model/src/build_scripts.rs
+++ b/crates/project-model/src/build_scripts.rs
@@ -429,8 +429,9 @@ impl WorkspaceBuildScripts {
for p in rustc.packages() {
let package = &rustc[p];
if package.targets.iter().any(|&it| rustc[it].is_proc_macro) {
- if let Some((_, path)) =
- proc_macro_dylibs.iter().find(|(name, _)| *name == package.name)
+ if let Some((_, path)) = proc_macro_dylibs
+ .iter()
+ .find(|(name, _)| *name.trim_start_matches("lib") == package.name)
{
bs.outputs[p].proc_macro_dylib_path = Some(path.clone());
}
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs
index 862d1a8b4a..55aec1a677 100644
--- a/crates/project-model/src/workspace.rs
+++ b/crates/project-model/src/workspace.rs
@@ -940,7 +940,7 @@ fn cargo_to_crate_graph(
if has_private {
// If the user provided a path to rustc sources, we add all the rustc_private crates
// and create dependencies on them for the crates which opt-in to that
- if let Some((rustc_workspace, build_scripts)) = rustc {
+ if let Some((rustc_workspace, rustc_build_scripts)) = rustc {
handle_rustc_crates(
&mut crate_graph,
&mut pkg_to_lib_crate,
@@ -953,7 +953,13 @@ fn cargo_to_crate_graph(
&pkg_crates,
&cfg_options,
override_cfg,
- build_scripts,
+ if rustc_workspace.workspace_root() == cargo.workspace_root() {
+ // the rustc workspace does not use the installed toolchain's proc-macro server
+ // so we need to make sure we don't use the pre compiled proc-macros there either
+ build_scripts
+ } else {
+ rustc_build_scripts
+ },
target_layout,
);
}