Skip to content

Commit 5ad403b

Browse files
oquenchilcopybara-github
authored andcommitted
Fix bug in cc_shared_library and cc_binary runfiles
One bug was in cc_shared_library which was not adding the runfiles of cc_libraries in roots. The other was a regression in cc_binary introduced in the rewrite from Java to Starlark but wasn't caught by any tests. RELNOTES:none PiperOrigin-RevId: 431978572
1 parent 309bc56 commit 5ad403b

4 files changed

Lines changed: 43 additions & 1 deletion

File tree

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,9 @@ def _collect_runfiles(ctx, feature_configuration, cc_toolchain, libraries, cc_li
296296
runtime_objects_for_coverage.extend(_runfiles_function(ctx, transitive_info_collection, True).to_list())
297297
runtime_objects_for_coverage.extend(_runfiles_function(ctx, transitive_info_collection, False).to_list())
298298

299+
for dynamic_dep in ctx.attr.dynamic_deps:
300+
builder = builder.merge(dynamic_dep[DefaultInfo].default_runfiles)
301+
299302
builder = builder.merge_all(runfiles_is_static + runfiles_is_not_static)
300303
if linking_mode == _LINKING_DYNAMIC:
301304
dynamic_runtime_lib = cc_toolchain.dynamic_runtime_lib(feature_configuration = feature_configuration)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,12 @@ def _cc_shared_library_impl(ctx):
498498
runfiles = runfiles.merge(dep[DefaultInfo].data_runfiles)
499499
transitive_debug_files.append(dep[OutputGroupInfo].rule_impl_debug_files)
500500

501+
precompiled_only_dynamic_libraries_runfiles = []
502+
for precompiled_dynamic_library in precompiled_only_dynamic_libraries:
503+
precompiled_only_dynamic_libraries_runfiles.append(precompiled_dynamic_library.dynamic_library)
504+
if precompiled_dynamic_library.resolved_symlink_dynamic_library != None:
505+
precompiled_only_dynamic_libraries_runfiles.append(precompiled_dynamic_library.resolved_symlink_dynamic_library)
506+
501507
for export in ctx.attr.roots:
502508
exports[str(export.label)] = True
503509

src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test_cc_shared_library/BUILD.builtin_test

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
load(":starlark_tests.bzl", "additional_inputs_test", "build_failure_test", "debug_files_test", "linking_suffix_test", "paths_test")
1+
load(":starlark_tests.bzl", "additional_inputs_test", "build_failure_test", "debug_files_test", "linking_suffix_test", "paths_test", "runfiles_test")
22

33
LINKABLE_MORE_THAN_ONCE = "LINKABLE_MORE_THAN_ONCE"
44

@@ -369,6 +369,14 @@ debug_files_test(
369369
target_under_test = ":binary",
370370
)
371371

372+
runfiles_test(
373+
name = "runfiles_test",
374+
target_under_test = ":binary",
375+
is_linux = select({
376+
"//src/conditions:linux": True,
377+
"//conditions:default": False}),
378+
)
379+
372380
build_failure_test(
373381
name = "static_deps_error_test",
374382
messages = select({

src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test_cc_shared_library/starlark_tests.bzl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,28 @@ def _debug_files_test_impl(ctx):
146146
return analysistest.end(env)
147147

148148
debug_files_test = analysistest.make(_debug_files_test_impl)
149+
150+
def _runfiles_test_impl(ctx):
151+
env = analysistest.begin(ctx)
152+
if not ctx.attr.is_linux:
153+
return analysistest.end(env)
154+
155+
target_under_test = analysistest.target_under_test(env)
156+
actual_files = []
157+
for runfile in target_under_test[DefaultInfo].default_runfiles.files.to_list():
158+
actual_files.append(runfile.basename)
159+
expected = [
160+
"libfoo_so.so",
161+
"libbar_so.so",
162+
]
163+
for expected_file in expected:
164+
asserts.true(env, expected_file in actual_files, expected_file + " not found in actual files:\n" + "\n".join(actual_files))
165+
166+
return analysistest.end(env)
167+
168+
runfiles_test = analysistest.make(
169+
_runfiles_test_impl,
170+
attrs = {
171+
"is_linux": attr.bool(),
172+
},
173+
)

0 commit comments

Comments
 (0)