[7.0.0] Fix cc_shared_library error with hdr-only libraries (#20228)

Fix cc_shared_library error with hdr-only libraries

cc_libraries with a linker_input with no libraries (either because they
contain only headers or only linkopts) caused errors in
cc_shared_libraries triggered by a check that made sure that a
cc_library wasn't linked more than once into different shared libraries.
That check can be ignored in those cases.

RELNOTES:none

Fixes #19920
Commit
https://github.com/bazelbuild/bazel/commit/886b13fd00b5a17161d9558b6b11dd135355e5cb

PiperOrigin-RevId: 583033207
Change-Id: I227021f33596dbc5a6708fa5a705803094f24665

Co-authored-by: Googler <gnish@google.com>
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl
index 7faa808..a70dea7 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl
@@ -454,6 +454,11 @@
             _add_linker_input_to_dict(linker_input.owner, transitive_exports[owner])
             linker_inputs_count += 1
         elif owner in targets_to_be_linked_statically_map:
+            if semantics.is_bazel and not linker_input.libraries:
+                # TODO(bazel-team): semantics.should_create_empty_archive() should be
+                # cleaned up and return False in every case. cc_libraries shouldn't
+                # produce empty archives. For now issue #19920 is only fixed in Bazel.
+                continue
             if owner in link_once_static_libs_map:
                 # We are building a dictionary that will allow us to give
                 # proper errors for libraries that have been linked multiple
diff --git a/src/main/starlark/builtins_bzl/common/cc/semantics.bzl b/src/main/starlark/builtins_bzl/common/cc/semantics.bzl
index 4e94de7..922e24d 100644
--- a/src/main/starlark/builtins_bzl/common/cc/semantics.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/semantics.bzl
@@ -193,4 +193,5 @@
     check_cc_shared_library_tags = _check_cc_shared_library_tags,
     BUILD_INFO_TRANLATOR_LABEL = "@bazel_tools//tools/build_defs/build_info:cc_build_info",
     CC_PROTO_TOOLCHAIN = "@rules_cc//cc/proto:toolchain_type",
+    is_bazel = True,
 )
diff --git a/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test_cc_shared_library/BUILD.builtin_test b/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test_cc_shared_library/BUILD.builtin_test
index c60473a..dd99fbb 100644
--- a/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test_cc_shared_library/BUILD.builtin_test
+++ b/src/main/starlark/tests/builtins_bzl/cc/cc_shared_library/test_cc_shared_library/BUILD.builtin_test
@@ -156,7 +156,7 @@
         "//conditions:default": [],
     }),
     deps = select({
-        ":is_bazel": ["qux2"],
+        ":is_bazel": ["qux2", "hdr_only"],
         "//conditions:default": [],
     }) + [
         "bar",
@@ -298,7 +298,7 @@
     deps = [
         "barX",
     ] + select({
-        ":is_bazel": ["qux2"],
+        ":is_bazel": ["qux2", "hdr_only"],
         "//conditions:default": [],
     }),
 )
@@ -449,6 +449,17 @@
     srcs = [":private_cc_library.cc"]
 )
 
+genrule(
+    name = "hdr_only_hdr",
+    outs = ["hdr_only_hdr.h"],
+    cmd = "touch $@",
+)
+
+cc_library(
+    name = "hdr_only",
+    hdrs = [":hdr_only_hdr"],
+)
+
 build_failure_test(
     name = "two_dynamic_deps_same_export_in_so_test",
     message = "Two shared libraries in dependencies export the same symbols",