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