diff options
author | Alex Márquez Pérez Muñíz Díaz Puras Thaureaux <alexmarquez@google.com> | 2023-03-14 23:01:47 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-03-14 23:01:47 +0000 |
commit | 52b6de20a8db6f8d394cc6c1b00e314a73b39fc8 (patch) | |
tree | 22084e4c445c00440eed8225bad71865598f1be4 /rules/cc | |
parent | 735384af3fa0c78a83e3ba398e2b6999f7365299 (diff) | |
parent | 35ad4206aabf078010072e6b7e012588506824ba (diff) | |
download | bazel-52b6de20a8db6f8d394cc6c1b00e314a73b39fc8.tar.gz |
Merge "Revert "Revert "Remove alwayslink handling from cc_prebuilt_libr...""
Diffstat (limited to 'rules/cc')
-rw-r--r-- | rules/cc/BUILD.bazel | 3 | ||||
-rw-r--r-- | rules/cc/cc_prebuilt_library_shared.bzl | 7 | ||||
-rw-r--r-- | rules/cc/cc_prebuilt_library_static.bzl | 9 | ||||
-rw-r--r-- | rules/cc/cc_prebuilt_library_static_test.bzl | 74 |
4 files changed, 77 insertions, 16 deletions
diff --git a/rules/cc/BUILD.bazel b/rules/cc/BUILD.bazel index 48c96c28..f5fb2d29 100644 --- a/rules/cc/BUILD.bazel +++ b/rules/cc/BUILD.bazel @@ -22,6 +22,7 @@ load(":cc_library_shared_test.bzl", "cc_library_shared_test_suite") load(":cc_library_static_test.bzl", "cc_library_static_test_suite") load(":cc_object_test.bzl", "cc_object_test_suite") load(":cc_prebuilt_binary_test.bzl", "cc_prebuilt_binary_test_suite") +load(":cc_prebuilt_library_static_test.bzl", "cc_prebuilt_library_static_test_suite") load(":cc_proto_test.bzl", "cc_proto_test_suite") load(":cc_sysprop_library_test.bzl", "cc_gen_sysprop_test_suite") load(":cc_test_test.bzl", "cc_test_test_suite") @@ -74,6 +75,8 @@ cc_object_test_suite(name = "cc_object_tests") cc_prebuilt_binary_test_suite(name = "cc_prebuilt_binary_tests") +cc_prebuilt_library_static_test_suite(name = "cc_prebuilt_library_static_tests") + cc_proto_test_suite(name = "cc_proto_tests") clang_tidy_test_suite(name = "clang_tidy_tests") diff --git a/rules/cc/cc_prebuilt_library_shared.bzl b/rules/cc/cc_prebuilt_library_shared.bzl index cc20c53a..d713a928 100644 --- a/rules/cc/cc_prebuilt_library_shared.bzl +++ b/rules/cc/cc_prebuilt_library_shared.bzl @@ -25,10 +25,3 @@ def cc_prebuilt_library_shared( alwayslink = alwayslink, **kwargs ) - - native.cc_import( - name = name + "_alwayslink", - shared_library = shared_library, - alwayslink = True, - **kwargs - ) diff --git a/rules/cc/cc_prebuilt_library_static.bzl b/rules/cc/cc_prebuilt_library_static.bzl index 5f6ce637..4276ebca 100644 --- a/rules/cc/cc_prebuilt_library_static.bzl +++ b/rules/cc/cc_prebuilt_library_static.bzl @@ -15,7 +15,6 @@ def cc_prebuilt_library_static( name, static_library, - alwayslink = None, export_includes = [], export_system_includes = [], **kwargs): @@ -26,13 +25,5 @@ def cc_prebuilt_library_static( native.cc_import( name = name, static_library = static_library, - alwayslink = alwayslink, - **kwargs - ) - - native.cc_import( - name = name + "_alwayslink", - static_library = static_library, - alwayslink = True, **kwargs ) diff --git a/rules/cc/cc_prebuilt_library_static_test.bzl b/rules/cc/cc_prebuilt_library_static_test.bzl new file mode 100644 index 00000000..5a386e4c --- /dev/null +++ b/rules/cc/cc_prebuilt_library_static_test.bzl @@ -0,0 +1,74 @@ +""" +Copyright (C) 2022 The Android Open Source Project + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") +load("//build/bazel/rules/cc:cc_prebuilt_library_static.bzl", "cc_prebuilt_library_static") + +def _cc_prebuilt_library_static_alwayslink_test_impl(ctx): + env = analysistest.begin(ctx) + target = analysistest.target_under_test(env) + expected_lib = ctx.attr.expected_lib + cc_info = target[CcInfo] + linker_inputs = cc_info.linking_context.linker_inputs.to_list() + libs_to_link = [] + for l in linker_inputs: + libs_to_link += l.libraries + + has_alwayslink = False + libs = {} + for lib_to_link in libs_to_link: + lib = lib_to_link.static_library.basename + libs[lib_to_link.static_library] = lib_to_link.alwayslink + if lib == expected_lib: + has_alwayslink = lib_to_link.alwayslink + if has_alwayslink: + break + asserts.true(env, has_alwayslink, "\nExpected to find the static library `%s` unconditionally in the linker_input, with alwayslink set:\n\t%s" % (expected_lib, str(libs))) + + return analysistest.end(env) + +_cc_prebuilt_library_static_alwayslink_test = analysistest.make( + _cc_prebuilt_library_static_alwayslink_test_impl, + attrs = {"expected_lib": attr.string()}, +) + +def _cc_prebuilt_library_static_given_alwayslink_lib(): + name = "_cc_prebuilt_library_static_given_alwayslink_lib" + test_name = name + "_test" + lib = "libfoo.a" + + cc_prebuilt_library_static( + name = name, + static_library = lib, + alwayslink = True, + tags = ["manual"], + ) + + _cc_prebuilt_library_static_alwayslink_test( + name = test_name, + target_under_test = name, + expected_lib = lib, + ) + + return test_name + +def cc_prebuilt_library_static_test_suite(name): + native.test_suite( + name = name, + tests = [ + _cc_prebuilt_library_static_given_alwayslink_lib(), + ], + ) |