diff options
author | plf <plf@google.com> | 2018-03-27 08:02:39 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-27 08:04:11 -0700 |
commit | eed7c75c5baa0e83e5915feade3ba4268b42c0f7 (patch) | |
tree | bd5f4d2488acad1cb0d7463b36ec9b68d70fff29 /src/test/java/com | |
parent | f5c8c0bb0f53cd7289d65672955b37ffcff7d6c4 (diff) |
C++: Fixes Blaze crashing on CLIF in toolchains that don't need PIC
For CLIF it doesn't matter whether we use PIC or no-PIC, the important thing
is we get an output protobuf. Before https://github.com/bazelbuild/bazel/commit/35773928532c132e3229b490ad98f4ebfd3e5770, using no-PIC was hardcoded.
In this CL it was decided to generate PIC instead because the toolchains used
by CLIF targets appeared to all have needsPic. In b/73955395 it has been shown
not to be the case.
In this CL I'm changing the logic again to use no-PIC for CLIF and to
circumvent the logic that checks what the configuration and the toolchain say.
At the same time, SWIG also used the method setGenerateNoPic() after the
variable onlySingleOutput was removed in https://github.com/bazelbuild/bazel/commit/4e9c9f93b15dd2594097644c6b9ca5a579c712fb. In this CL I use the
enum to apply PIC and no-PIC in the same cases as before for SWIG.
This CL also refactors the methods and boolean variables used to determine whether to use PIC or not, hopefully making it clearer.
RELNOTES:none
PiperOrigin-RevId: 190615548
Diffstat (limited to 'src/test/java/com')
3 files changed, 16 insertions, 34 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java index 52a29a24d6..e44cd778d2 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java @@ -114,7 +114,8 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase { .setupCrosstool( mockToolsConfig, MockCcSupport.NO_LEGACY_FEATURES_FEATURE, - MockCcSupport.EMPTY_COMPILE_ACTION_CONFIG); + MockCcSupport.EMPTY_COMPILE_ACTION_CONFIG, + MockCcSupport.PIC_FEATURE); useConfiguration(); checkError( @@ -131,7 +132,8 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase { .setupCrosstool( mockToolsConfig, MockCcSupport.NO_LEGACY_FEATURES_FEATURE, - MockCcSupport.EMPTY_STATIC_LIBRARY_ACTION_CONFIG); + MockCcSupport.EMPTY_STATIC_LIBRARY_ACTION_CONFIG, + MockCcSupport.PIC_FEATURE); useConfiguration(); checkError( diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java index f2c7e9c3d4..a3ddc7710d 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.fail; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.packages.util.MockCcSupport; @@ -297,38 +298,19 @@ public class CcToolchainTest extends BuildViewTestCase { " dynamic_runtime_libs = [':empty'],", " static_runtime_libs = [':empty'])"); - useConfiguration("--cpu=piii"); + assertThat(usePicForBinariesWithConfiguration("--cpu=piii")).isFalse(); + assertThat(usePicForBinariesWithConfiguration("--cpu=piii", "-c", "opt")).isFalse(); + assertThat(usePicForBinariesWithConfiguration("--cpu=k8")).isTrue(); + assertThat(usePicForBinariesWithConfiguration("--cpu=k8", "-c", "opt")).isFalse(); + } + + private boolean usePicForBinariesWithConfiguration(String... configuration) throws Exception { + useConfiguration(configuration); ConfiguredTarget target = getConfiguredTarget("//a:b"); CcToolchainProvider toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); - assertThat( - CppHelper.usePicForBinaries( - target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) - .isFalse(); - - useConfiguration("--cpu=piii", "-c", "opt"); - target = getConfiguredTarget("//a:b"); - toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); - assertThat( - CppHelper.usePicForBinaries( - target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) - .isFalse(); - - useConfiguration("--cpu=k8"); - target = getConfiguredTarget("//a:b"); - toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); - assertThat( - CppHelper.usePicForBinaries( - target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) - .isTrue(); - - useConfiguration("--cpu=k8", "-c", "opt"); - target = getConfiguredTarget("//a:b"); - toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); - assertThat( - CppHelper.usePicForBinaries( - target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) - .isFalse(); + RuleContext ruleContext = getRuleContext(target); + return CppHelper.usePicForBinaries(ruleContext, toolchainProvider); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java index 7b588c56ad..f5a42439ff 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java @@ -204,9 +204,7 @@ public class CppLinkstampCompileHelperTest extends BuildViewTestCase { Artifact executable = getExecutable(target); CcToolchainProvider toolchain = CppHelper.getToolchainUsingDefaultCcToolchainAttribute(getRuleContext(target)); - boolean usePic = - CppHelper.usePicObjectsForBinaries( - target.getConfiguration().getFragment(CppConfiguration.class), toolchain); + boolean usePic = CppHelper.usePicForBinaries(getRuleContext(target), toolchain); CppLinkAction generatingAction = (CppLinkAction) getGeneratingAction(executable); |