From a2f750a6dbdccc62d5f8a63b66ca1c0f1a850f60 Mon Sep 17 00:00:00 2001 From: Thi Don Date: Mon, 16 Oct 2023 02:37:47 -0700 Subject: [PATCH] Collect debug info context from implementation deps Fixes https://github.com/bazelbuild/bazel/issues/19146 Closes #19725. PiperOrigin-RevId: 573751305 Change-Id: I9b5df85dc5e52822b3a0b44fc42d90b727a5abf0 --- .../builtins_bzl/common/cc/cc_library.bzl | 7 ++- .../cpp/CcLibraryConfiguredTargetTest.java | 57 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_library.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_library.bzl index 304b4baac8282b..d8c6a1de8a2e48 100755 --- a/src/main/starlark/builtins_bzl/common/cc/cc_library.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_library.bzl @@ -14,7 +14,9 @@ """cc_library Starlark implementation replacing native""" +load(":common/cc/cc_common.bzl", "cc_common") load(":common/cc/cc_helper.bzl", "cc_helper") +load(":common/cc/cc_info.bzl", "CcInfo") load(":common/cc/semantics.bzl", "semantics") CcInfo = _builtins.toplevel.CcInfo @@ -311,7 +313,10 @@ def _cc_library_impl(ctx): data_runfiles = data_runfiles, )) - debug_context = cc_helper.merge_cc_debug_contexts(compilation_outputs, cc_helper.get_providers(ctx.attr.deps, CcInfo)) + debug_context = cc_helper.merge_cc_debug_contexts( + compilation_outputs, + cc_helper.get_providers(ctx.attr.deps + ctx.attr.implementation_deps, CcInfo), + ) cc_info = CcInfo( compilation_context = compilation_context, linking_context = linking_context, diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java index d7d07937963d94..0cba340e9f7f47 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java @@ -2004,6 +2004,63 @@ public void testImplementationDepsLinkingContextIsPropagated() throws Exception .contains("bin foo/libimplementation_dep.a"); } + @Test + public void testImplementationDepsDebugContextIsPropagated() throws Exception { + useConfiguration( + "--experimental_cc_implementation_deps", + "--fission=yes", + "--features=per_object_debug_info"); + scratch.file( + "foo/BUILD", + "cc_binary(", + " name = 'bin',", + " srcs = ['bin.cc'],", + " deps = ['lib'],", + ")", + "cc_library(", + " name = 'lib',", + " srcs = ['lib.cc'],", + " deps = ['public_dep'],", + ")", + "cc_library(", + " name = 'public_dep',", + " srcs = ['public_dep.cc'],", + " hdrs = ['public_dep.h'],", + " implementation_deps = ['implementation_dep'],", + " deps = ['interface_dep'],", + ")", + "cc_library(", + " name = 'interface_dep',", + " srcs = ['interface_dep.cc'],", + " hdrs = ['interface_dep.h'],", + ")", + "cc_library(", + " name = 'implementation_dep',", + " srcs = ['implementation_dep.cc'],", + " hdrs = ['implementation_dep.h'],", + ")"); + + ConfiguredTarget lib = getConfiguredTarget("//foo:lib"); + assertThat( + lib + .get(CcInfo.PROVIDER) + .getCcDebugInfoContext() + .getTransitiveDwoFiles() + .toList() + .stream() + .map(Artifact::getFilename)) + .contains("public_dep.dwo"); + assertThat( + lib + .get(CcInfo.PROVIDER) + .getCcDebugInfoContext() + .getTransitiveDwoFiles() + .toList() + .stream() + .map(Artifact::getFilename)) + .contains("implementation_dep.dwo"); + } + @Test public void testImplementationDepsRunfilesArePropagated() throws Exception { useConfiguration("--experimental_cc_implementation_deps");