Re-arrange cc_test to support checking if `linkstatic` was explicitly set.

This is an alternative to having a computed default--if the user set it
explicitly, honor that always, but otherwise, we can consult a computed
default.

PiperOrigin-RevId: 440125009
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl
index 6939ad8..5af3f27 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl
@@ -76,22 +76,36 @@
     providers.extend(test_providers)
     return _handle_legacy_return(ctx, cc_info, providers)
 
-cc_test = rule(
-    implementation = _impl,
-    attrs = _cc_test_attrs,
-    outputs = {
-        # TODO(b/198254254): Handle case for windows.
-        "stripped_binary": "%{name}.stripped",
-        "dwp_file": "%{name}.dwp",
-    },
-    fragments = ["google_cpp", "cpp"],
-    exec_groups = {
-        "cpp_link": exec_group(copy_from_rule = True),
-    },
-    toolchains = [
-        "@//tools/cpp:toolchain_type",
-        "@//tools/cpp:test_runner_toolchain_type",
-    ],
-    incompatible_use_toolchain_transition = True,
-    test = True,
-)
+def make_cc_test(with_linkstatic = False):
+    _cc_test_attrs.update(
+        _linkstatic_explicitly_set = attr.bool(default = with_linkstatic),
+    )
+    return rule(
+        name = "cc_test",
+        implementation = _impl,
+        attrs = _cc_test_attrs,
+        outputs = {
+            # TODO(b/198254254): Handle case for windows.
+            "stripped_binary": "%{name}.stripped",
+            "dwp_file": "%{name}.dwp",
+        },
+        fragments = ["google_cpp", "cpp"],
+        exec_groups = {
+            "cpp_link": exec_group(copy_from_rule = True),
+        },
+        toolchains = [
+            "@//tools/cpp:toolchain_type",
+            "@//tools/cpp:test_runner_toolchain_type",
+        ],
+        incompatible_use_toolchain_transition = True,
+        test = True,
+    )
+
+cc_test_explicit_linkstatic = make_cc_test(with_linkstatic = True)
+cc_test_default_linkstatic = make_cc_test(with_linkstatic = False)
+
+def cc_test_wrapper(**kwargs):
+    if "linkstatic" in kwargs:
+        cc_test_explicit_linkstatic(**kwargs)
+    else:
+        cc_test_default_linkstatic(**kwargs)
diff --git a/src/main/starlark/builtins_bzl/common/exports.bzl b/src/main/starlark/builtins_bzl/common/exports.bzl
index 966a597..11d0a0a 100755
--- a/src/main/starlark/builtins_bzl/common/exports.bzl
+++ b/src/main/starlark/builtins_bzl/common/exports.bzl
@@ -16,7 +16,7 @@
 
 load("@_builtins//:common/cc/cc_import.bzl", "cc_import")
 load("@_builtins//:common/cc/cc_binary_wrapper.bzl", "cc_binary")
-load("@_builtins//:common/cc/cc_test.bzl", "cc_test")
+load("@_builtins//:common/cc/cc_test.bzl", cc_test = "cc_test_wrapper")
 load("@_builtins//:common/cc/experimental_cc_shared_library.bzl", "cc_shared_library", "cc_shared_library_permissions")
 load("@_builtins//:common/objc/objc_import.bzl", "objc_import")
 load("@_builtins//:common/objc/objc_library.bzl", "objc_library")