aboutsummaryrefslogtreecommitdiff
path: root/rules/cc
diff options
context:
space:
mode:
authorAlex Márquez Pérez Muñíz Díaz Puras Thaureaux <alexmarquez@google.com>2023-03-14 23:01:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-03-14 23:01:47 +0000
commit52b6de20a8db6f8d394cc6c1b00e314a73b39fc8 (patch)
tree22084e4c445c00440eed8225bad71865598f1be4 /rules/cc
parent735384af3fa0c78a83e3ba398e2b6999f7365299 (diff)
parent35ad4206aabf078010072e6b7e012588506824ba (diff)
downloadbazel-52b6de20a8db6f8d394cc6c1b00e314a73b39fc8.tar.gz
Merge "Revert "Revert "Remove alwayslink handling from cc_prebuilt_libr...""
Diffstat (limited to 'rules/cc')
-rw-r--r--rules/cc/BUILD.bazel3
-rw-r--r--rules/cc/cc_prebuilt_library_shared.bzl7
-rw-r--r--rules/cc/cc_prebuilt_library_static.bzl9
-rw-r--r--rules/cc/cc_prebuilt_library_static_test.bzl74
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(),
+ ],
+ )