Skip to content

Commit 56e9020

Browse files
quvalcopybara-github
authored andcommitted
cc_library: propagate data dependencies via implementation_deps.
Sources from `implementation_deps` aren't propagated for compilation, but their runfiles may still be needed in runtime; they currently aren't provided, which seems like a bug (reproduction in [gist](https://gist.github.com/quval/2cc5b2cd323a10ae6a9375f326a296c2)). Closes #18416. PiperOrigin-RevId: 537010768 Change-Id: I76f95d6c59d79786febfb7a4ac7f9204fc194456
1 parent d51c75f commit 56e9020

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/main/starlark/builtins_bzl/common/cc/cc_library.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,9 @@ def _cc_library_impl(ctx):
277277
for dep in ctx.attr.deps:
278278
runfiles_list.append(dep[DefaultInfo].default_runfiles)
279279

280+
for dep in ctx.attr.implementation_deps:
281+
runfiles_list.append(dep[DefaultInfo].default_runfiles)
282+
280283
runfiles = ctx.runfiles().merge_all(runfiles_list)
281284

282285
default_runfiles = ctx.runfiles(files = cc_helper.get_dynamic_libraries_for_runtime(linking_context_for_runfiles, True))

src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,6 +2005,44 @@ public void testImplementationDepsLinkingContextIsPropagated() throws Exception
20052005
.contains("bin foo/libimplementation_dep.a");
20062006
}
20072007

2008+
@Test
2009+
public void testImplementationDepsRunfilesArePropagated() throws Exception {
2010+
useConfiguration("--experimental_cc_implementation_deps");
2011+
scratch.file(
2012+
"foo/BUILD",
2013+
"cc_binary(",
2014+
" name = 'bin',",
2015+
" srcs = ['bin.cc'],",
2016+
" deps = ['lib'],",
2017+
")",
2018+
"cc_library(",
2019+
" name = 'lib',",
2020+
" srcs = ['lib.cc'],",
2021+
" deps = ['public_dep'],",
2022+
")",
2023+
"cc_library(",
2024+
" name = 'public_dep',",
2025+
" srcs = ['public_dep.cc'],",
2026+
" hdrs = ['public_dep.h'],",
2027+
" implementation_deps = ['implementation_dep'],",
2028+
" deps = ['interface_dep'],",
2029+
")",
2030+
"cc_library(",
2031+
" name = 'interface_dep',",
2032+
" data = ['data/interface.txt'],",
2033+
")",
2034+
"cc_library(",
2035+
" name = 'implementation_dep',",
2036+
" data = ['data/implementation.txt'],",
2037+
")");
2038+
2039+
ConfiguredTarget lib = getConfiguredTarget("//foo:bin");
2040+
assertThat(
2041+
artifactsToStrings(
2042+
lib.get(DefaultInfo.PROVIDER).getDefaultRunfiles().getAllArtifacts()))
2043+
.containsAtLeast("src foo/data/interface.txt", "src foo/data/implementation.txt");
2044+
}
2045+
20082046
@Test
20092047
public void testImplementationDepsConfigurationHostSucceeds() throws Exception {
20102048
useConfiguration("--experimental_cc_implementation_deps");

0 commit comments

Comments
 (0)