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