Disallow whole archive for cc_shared_library

RELNOTES:none
PiperOrigin-RevId: 513219096
Change-Id: I75571974cd71622a4fac1cf837bd7db5b36fa75d
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index aa32ea8..e2e61c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -1077,6 +1077,11 @@
       // is not needed).
       return false;
     }
+    if (featureConfiguration
+        .getRequestedFeatures()
+        .contains(CppRuleClasses.FORCE_NO_WHOLE_ARCHIVE)) {
+      return false;
+    }
     if (cppConfig.removeLegacyWholeArchive()) {
       // --incompatible_remove_legacy_whole_archive has been flipped, no --whole-archive for the
       // entire build.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
index 967055d..c21de5d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
@@ -461,6 +461,9 @@
   /** A feature marking that the target needs to link its deps in --whole-archive block. */
   public static final String LEGACY_WHOLE_ARCHIVE = "legacy_whole_archive";
 
+  /** A feature for force disabling whole-archive on a per target and per rule type basis. */
+  public static final String FORCE_NO_WHOLE_ARCHIVE = "force_no_whole_archive";
+
   /**
    * A feature marking that the target generates libraries that should not be put in a
    * --whole-archive block.
diff --git a/src/main/starlark/builtins_bzl/common/cc/experimental_cc_shared_library.bzl b/src/main/starlark/builtins_bzl/common/cc/experimental_cc_shared_library.bzl
index 2c2070c..bd4b0e8 100644
--- a/src/main/starlark/builtins_bzl/common/cc/experimental_cc_shared_library.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/experimental_cc_shared_library.bzl
@@ -398,7 +398,7 @@
     feature_configuration = cc_common.configure_features(
         ctx = ctx,
         cc_toolchain = cc_toolchain,
-        requested_features = ctx.features,
+        requested_features = ctx.features + ["force_no_whole_archive"],
         unsupported_features = ctx.disabled_features,
     )