Allow unlimited number of additional linker inputs for cc_shared_library RELNOTES:none PiperOrigin-RevId: 295908805 Change-Id: I42a727d6ab0f4d342036df39a131d66ecd62734e
diff --git a/examples/experimental_cc_shared_library.bzl b/examples/experimental_cc_shared_library.bzl index 24cb7a6..a95fc3b 100644 --- a/examples/experimental_cc_shared_library.bzl +++ b/examples/experimental_cc_shared_library.bzl
@@ -289,7 +289,10 @@ ) additional_inputs = [ctx.file.visibility_file] - user_link_flags.extend(ctx.attr.user_link_flags) + for user_link_flag in ctx.attr.user_link_flags: + user_link_flags.append(ctx.expand_location(user_link_flag, targets = ctx.attr.additional_linker_inputs)) + + additional_inputs.extend(ctx.files.additional_linker_inputs) linking_outputs = cc_common.link( actions = ctx.actions, @@ -365,6 +368,7 @@ cc_shared_library = rule( implementation = _cc_shared_library_impl, attrs = { + "additional_linker_inputs": attr.label_list(allow_files = True), "dynamic_deps": attr.label_list(providers = [CcSharedLibraryInfo]), "exports": attr.label_list(providers = [CcInfo], aspects = [graph_structure_aspect]), "preloaded_deps": attr.label_list(providers = [CcInfo]),
diff --git a/examples/test_cc_shared_library/BUILD b/examples/test_cc_shared_library/BUILD index b5c942c..875390b 100644 --- a/examples/test_cc_shared_library/BUILD +++ b/examples/test_cc_shared_library/BUILD
@@ -1,6 +1,6 @@ load("//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") load("//examples:experimental_cc_shared_library.bzl", "cc_shared_library") -load(":starlark_tests.bzl", "linking_suffix_test") +load(":starlark_tests.bzl", "additional_inputs_test", "linking_suffix_test") cc_test( name = "cc_test", @@ -18,12 +18,16 @@ cc_shared_library( name = "foo_so", + additional_linker_inputs = [":additional_script.txt"], dynamic_deps = ["bar_so"], preloaded_deps = ["preloaded_dep"], static_deps = [ "//examples/test_cc_shared_library:qux", ], - user_link_flags = ["-Wl,-rpath,kittens"], + user_link_flags = [ + "-Wl,-rpath,kittens", + "-Wl,--script=$(location :additional_script.txt)", + ], visibility_file = "foo.lds", exports = [ "foo", @@ -141,3 +145,8 @@ name = "linking_action_test", target_under_test = ":foo_so", ) + +additional_inputs_test( + name = "additional_inputs_test", + target_under_test = ":foo_so", +)
diff --git a/examples/test_cc_shared_library/additional_script.txt b/examples/test_cc_shared_library/additional_script.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/test_cc_shared_library/additional_script.txt
diff --git a/examples/test_cc_shared_library/starlark_tests.bzl b/examples/test_cc_shared_library/starlark_tests.bzl index 9c9f3ac..3c4cc43 100644 --- a/examples/test_cc_shared_library/starlark_tests.bzl +++ b/examples/test_cc_shared_library/starlark_tests.bzl
@@ -16,3 +16,21 @@ return analysistest.end(env) linking_suffix_test = analysistest.make(_linking_suffix_test_impl) + +def _additional_inputs_test_impl(ctx): + env = analysistest.begin(ctx) + + target_under_test = analysistest.target_under_test(env) + actions = analysistest.target_actions(env) + + found = False + for arg in actions[1].argv: + if arg.find("-Wl,--script=") != -1: + asserts.equals(env, "examples/test_cc_shared_library/additional_script.txt", arg[13:]) + found = True + break + asserts.true(env, found, "Should have seen option --script=") + + return analysistest.end(env) + +additional_inputs_test = analysistest.make(_additional_inputs_test_impl)