From 36efe626c02a72d9cfe813fc829844435f459b91 Mon Sep 17 00:00:00 2001 From: David Zbarsky Date: Tue, 8 Sep 2026 20:40:01 -0400 Subject: [PATCH] Avoid linkstamp scans for nonlinking Rust crates Only binaries, cdylibs, and proc macros linked by rustc register linkstamp compile actions. Collecting linkstamps for Rust libraries flattens each C++ dependency's linker inputs and discards the result. Pass the linking condition into collect_deps while retaining the existing default for its other callers and preserving transitive C++ linker inputs for downstream binaries. Assisted-by: Codex --- rust/private/rustc.bzl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index a7006fb429..21d4ab9559 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -184,7 +184,8 @@ def collect_deps( deps, proc_macro_deps, aliases, - extra_named_deps = None): + extra_named_deps = None, + collect_linkstamps = True): """Walks through dependencies and collects the transitive dependencies. Args: @@ -192,6 +193,7 @@ def collect_deps( proc_macro_deps (list): The proc_macro deps from `filter_deps(ctx)`. aliases (dict): A dict mapping aliased targets to their actual Crate information. extra_named_deps (depset[AliasableDepInfo], optional): Extra named dependencies. + collect_linkstamps (bool, optional): Whether to inspect C++ deps for linkstamps. Returns: tuple: Returns a tuple of: @@ -242,7 +244,7 @@ def collect_deps( cc_info = dep.cc_info dep_build_info = dep.build_info - if cc_info: + if collect_linkstamps and cc_info: for li in cc_info.linking_context.linker_inputs.to_list(): linkstamps.extend(li.linkstamps) @@ -1983,6 +1985,7 @@ def rustc_compile( proc_macro_deps = proc_macro_deps, aliases = crate_info.aliases, extra_named_deps = extra_named_deps, + collect_linkstamps = crate_info.type in ("bin", "cdylib", "proc-macro") and not experimental_use_cc_common_link, ) extra_unsupported_features = [RUST_LINK_CC_FEATURE] if crate_info.type in ["bin", "cdylib"] and dep_info.transitive_noncrates.to_list():