C++: Remove gcc flags.

RELNOTES:Added -incompatible_do_not_split_linking_cmdline flag. See #7670
PiperOrigin-RevId: 237794079
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index 563c864..a1bac4b 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -160,7 +160,8 @@
         "--incompatible_require_feature_configuration_for_pic=" + rand.nextBoolean(),
         "--incompatible_strict_argument_ordering=" + rand.nextBoolean(),
         "--incompatible_use_toolchain_providers_in_java_common=" + rand.nextBoolean(),
-        "--internal_skylark_flag_test_canary=" + rand.nextBoolean());
+        "--internal_skylark_flag_test_canary=" + rand.nextBoolean(),
+        "--incompatible_do_not_split_linking_cmdline=" + rand.nextBoolean());
   }
 
   /**
@@ -209,6 +210,7 @@
         .incompatibleStricArgumentOrdering(rand.nextBoolean())
         .incompatibleUseToolchainProvidersInJavaCommon(rand.nextBoolean())
         .internalSkylarkFlagTestCanary(rand.nextBoolean())
+        .incompatibleDoNotSplitLinkingCmdline(rand.nextBoolean())
         .build();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
index 6db2d7d..b4adb26 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
@@ -63,6 +63,9 @@
   public static final String DYNAMIC_LINKING_MODE_FEATURE =
       "feature { name: '" + CppRuleClasses.DYNAMIC_LINKING_MODE + "'}";
 
+  public static final String DO_NOT_SPLIT_LINKING_CMDLINE_FEATURE =
+      "feature { name: '" + CppRuleClasses.DO_NOT_SPLIT_LINKING_CMDLINE + "' enabled: true}";
+
   public static final String STARLARK_DYNAMIC_LINKING_MODE_FEATURE =
       "[feature(name = '" + CppRuleClasses.DYNAMIC_LINKING_MODE + "')]";
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
index f81cf55..fda9ab3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -36,6 +36,7 @@
         "//src/main/java/com/google/devtools/build/lib:core-workspace-rules",
         "//src/main/java/com/google/devtools/build/lib:io",
         "//src/main/java/com/google/devtools/build/lib:packages-internal",
+        "//src/main/java/com/google/devtools/build/lib:skylark_semantics",
         "//src/main/java/com/google/devtools/build/lib:util",
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/actions:localhost_capacity",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
index d7f3811..fbd0e3b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
@@ -52,6 +52,7 @@
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
 import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
+import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.testutil.TestUtils;
 import com.google.devtools.build.lib.util.OS;
 import com.google.devtools.build.lib.util.Pair;
@@ -86,6 +87,11 @@
           }
 
           @Override
+          public StarlarkSemantics getSkylarkSemantics() {
+            return StarlarkSemantics.DEFAULT_SEMANTICS;
+          }
+
+          @Override
           public Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root) {
             return CppLinkActionTest.this.getDerivedArtifact(
                 rootRelativePath, root, ActionsTestUtil.NULL_ARTIFACT_OWNER);
@@ -117,8 +123,11 @@
                     ImmutableSet.of(),
                     "dynamic_library_linker_tool",
                     /* supportsEmbeddedRuntimes= */ true,
-                    /* supportsInterfaceSharedLibraries= */ false))
-            .addAll(CppActionConfigs.getFeaturesToAppearLastInFeaturesList(ImmutableSet.of()))
+                    /* supportsInterfaceSharedLibraries= */ false,
+                    /* doNotSplitLinkingCmdline= */ true))
+            .addAll(
+                CppActionConfigs.getFeaturesToAppearLastInFeaturesList(
+                    ImmutableSet.of(), /* doNotSplitLinkingCmdline= */ true))
             .add(linkCppStandardLibrary)
             .build();
 
@@ -1085,7 +1094,11 @@
   }
 
   @Test
-  public void testSplitExecutableLinkCommand() throws Exception {
+  public void testSplitExecutableLinkCommandStatic() throws Exception {
+    getAnalysisMock()
+        .ccSupport()
+        .setupCrosstool(mockToolsConfig, MockCcSupport.DO_NOT_SPLIT_LINKING_CMDLINE_FEATURE);
+
     RuleContext ruleContext = createDummyRuleContext();
 
     CppLinkAction linkAction = createLinkBuilder(ruleContext, LinkTargetType.EXECUTABLE).build();
@@ -1099,4 +1112,85 @@
 
     assertThat(result.second).contains("-lcpp_standard_library");
   }
+
+  private String removeOutDirectory(String s) {
+    return s.replace("blaze-out", "").replace("bazel-out", "");
+  }
+
+  @Test
+  public void testSplitExecutableLinkCommandDynamicWithNoSplitting() throws Exception {
+    getAnalysisMock()
+        .ccSupport()
+        .setupCrosstool(mockToolsConfig, MockCcSupport.DO_NOT_SPLIT_LINKING_CMDLINE_FEATURE);
+    RuleContext ruleContext = createDummyRuleContext();
+
+    FeatureConfiguration featureConfiguration = getMockFeatureConfiguration(ruleContext);
+
+    CppLinkAction linkAction =
+        createLinkBuilder(
+                ruleContext,
+                LinkTargetType.DYNAMIC_LIBRARY,
+                "dummyRuleContext/out.so",
+                ImmutableList.of(),
+                ImmutableList.of(),
+                featureConfiguration)
+            .setLibraryIdentifier("library")
+            .build();
+    Pair<List<String>, List<String>> result = linkAction.getLinkCommandLine().splitCommandline();
+
+    assertThat(
+            result.first.stream()
+                .map(x -> removeOutDirectory(x))
+                .collect(ImmutableList.toImmutableList()))
+        .containsExactly(
+            "crosstool/gcc_tool", "@/k8-fastbuild/bin/dummyRuleContext/out.so-2.params")
+        .inOrder();
+    assertThat(
+            result.second.stream()
+                .map(x -> removeOutDirectory(x))
+                .collect(ImmutableList.toImmutableList()))
+        .containsExactly(
+            "-shared",
+            "-o",
+            "/k8-fastbuild/bin/dummyRuleContext/out.so",
+            "-Wl,-S",
+            "--sysroot=/usr/grte/v1")
+        .inOrder();
+  }
+
+  @Test
+  @Deprecated
+  // TODO(b/113358321): Remove once #7670 is finished.
+  public void testSplitExecutableLinkCommandDynamicWithSplitting() throws Exception {
+    RuleContext ruleContext = createDummyRuleContext();
+
+    FeatureConfiguration featureConfiguration = getMockFeatureConfiguration(ruleContext);
+
+    CppLinkAction linkAction =
+        createLinkBuilder(
+                ruleContext,
+                LinkTargetType.DYNAMIC_LIBRARY,
+                "dummyRuleContext/out.so",
+                ImmutableList.of(),
+                ImmutableList.of(),
+                featureConfiguration)
+            .setLibraryIdentifier("library")
+            .build();
+    Pair<List<String>, List<String>> result = linkAction.getLinkCommandLine().splitCommandline();
+
+    assertThat(
+            result.first.stream()
+                .map(x -> removeOutDirectory(x))
+                .collect(ImmutableList.toImmutableList()))
+        .containsExactly(
+            "crosstool/gcc_tool",
+            "-shared",
+            "-o",
+            "/k8-fastbuild/bin/dummyRuleContext/out.so",
+            "-Wl,-S",
+            "--sysroot=/usr/grte/v1",
+            "@/k8-fastbuild/bin/dummyRuleContext/out.so-2.params")
+        .inOrder();
+    assertThat(result.second).isEmpty();
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
index f1a3dc6..5ef42f9 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
@@ -788,6 +788,10 @@
 
   @Test
   public void testParamFileLinkVariables() throws Exception {
+    AnalysisMock.get()
+        .ccSupport()
+        .setupCrosstool(
+            mockToolsConfig, "feature {", "  name: 'do_not_split_linking_cmdline'", "}");
     assertThat(
             commandLineForVariables(
                 CppActionNames.CPP_LINK_EXECUTABLE,
@@ -796,7 +800,7 @@
                 "cc_toolchain = toolchain,",
                 "param_file = 'foo/bar/params',",
                 ")"))
-        .contains("-Wl,@foo/bar/params");
+        .contains("@foo/bar/params");
   }
 
   @Test