[rust-project] Add "proc_macro" as dep for proc macro targets This CL also fixes a bug in the rust_tool selection. Change-Id: Ib7a87aaa83f72a332158c56f12f70cdfed05cf98 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/9620 Commit-Queue: Petr Hosek <phosek@google.com> Reviewed-by: Petr Hosek <phosek@google.com>
diff --git a/src/gn/rust_project_writer.cc b/src/gn/rust_project_writer.cc index 2e17eb4..e4ad28f 100644 --- a/src/gn/rust_project_writer.cc +++ b/src/gn/rust_project_writer.cc
@@ -281,7 +281,7 @@ // Check what sysroot this target needs. Add it to the crate list if it // hasn't already been added. auto rust_tool = - target->toolchain()->GetToolForSourceTypeAsRust(SourceFile::SOURCE_RS); + target->toolchain()->GetToolForTargetFinalOutputAsRust(target); auto current_sysroot = rust_tool->GetSysroot(); if (current_sysroot != "" && sysroot_lookup.count(current_sysroot) == 0) { AddSysroot(build_settings, current_sysroot, sysroot_lookup, crate_list); @@ -332,6 +332,12 @@ AddSysrootDependencyToCrate(&crate, sysroot, "core"); AddSysrootDependencyToCrate(&crate, sysroot, "alloc"); AddSysrootDependencyToCrate(&crate, sysroot, "std"); + + // Proc macros have the proc_macro crate as a direct dependency + if (std::string_view(rust_tool->name()) == + std::string_view(RustTool::kRsToolMacro)) { + AddSysrootDependencyToCrate(&crate, sysroot, "proc_macro"); + } } // Add the rest of the crate dependencies.