diff options
author | 2017-11-22 08:59:00 -0800 | |
---|---|---|
committer | 2017-11-22 09:02:40 -0800 | |
commit | 96e244dc211ef3277f154f1f03bd0c87347d522a (patch) | |
tree | 2c98c1bd9cec55fb4d9e7e01cb3a36a3f44f83c6 /src/test/java/com/google/devtools | |
parent | 0d6ff477099fdf6c8c1c7d4e2104f9184afe0a2b (diff) |
Move CppConfiguration#isLLVMcompiler, #isLLVMOptimizedFdo, #isLipoOptimization,
and #getDynamicMode to CcToolchainProvider and CppHelper.
Moving toolchain info out of CppConfiguration is required to use platform-based
toolchain resolution in the c++ rules.
PiperOrigin-RevId: 176662686
Diffstat (limited to 'src/test/java/com/google/devtools')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java | 107 |
1 files changed, 107 insertions, 0 deletions
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 d0b6c04f53..65379d294d 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,7 +21,9 @@ import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; +import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig; +import com.google.devtools.common.options.OptionsParsingException; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -85,6 +87,111 @@ public class CcToolchainTest extends BuildViewTestCase { getConfiguredTarget("//a:a"); } + @Test + public void testTurnOffDynamicLinkWhenLipoBinary() throws Exception { + scratch.file( + "a/BUILD", + "filegroup(", + " name='empty')", + "filegroup(", + " name = 'banana',", + " srcs = ['banana1', 'banana2'])", + "cc_toolchain(", + " name = 'b',", + " cpu = 'banana',", + " all_files = ':banana',", + " compiler_files = ':empty',", + " dwp_files = ':empty',", + " linker_files = ':empty',", + " strip_files = ':empty',", + " objcopy_files = ':empty',", + " dynamic_runtime_libs = [':empty'],", + " static_runtime_libs = [':empty'])"); + scratch.file("foo/BUILD", "cc_binary(name='foo')"); + + useConfiguration("--lipo=binary", "--lipo_context=//foo", "--compilation_mode=opt"); + ConfiguredTarget target = getConfiguredTarget("//a:b"); + CcToolchainProvider toolchainProvider = + (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); + assertThat( + CppHelper.getDynamicMode( + target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) + .isEqualTo(DynamicMode.OFF); + + useConfiguration("--lipo=off", "--lipo_context=//foo"); + target = getConfiguredTarget("//a:b"); + toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); + assertThat( + CppHelper.getDynamicMode( + target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) + .isEqualTo(DynamicMode.DEFAULT); + } + + @Test + public void testDynamicMode() throws Exception { + scratch.file( + "a/BUILD", + "filegroup(", + " name='empty')", + "filegroup(", + " name = 'banana',", + " srcs = ['banana1', 'banana2'])", + "cc_toolchain(", + " name = 'b',", + " cpu = 'banana',", + " all_files = ':banana',", + " compiler_files = ':empty',", + " dwp_files = ':empty',", + " linker_files = ':empty',", + " strip_files = ':empty',", + " objcopy_files = ':empty',", + " dynamic_runtime_libs = [':empty'],", + " static_runtime_libs = [':empty'])"); + + // Check defaults. + useConfiguration(); + ConfiguredTarget target = getConfiguredTarget("//a:b"); + CcToolchainProvider toolchainProvider = + (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); + + assertThat( + CppHelper.getDynamicMode( + target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) + .isEqualTo(DynamicMode.DEFAULT); + + // Test "off" + useConfiguration("--dynamic_mode=off"); + target = getConfiguredTarget("//a:b"); + toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); + + assertThat( + CppHelper.getDynamicMode( + target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) + .isEqualTo(DynamicMode.OFF); + + // Test "fully" + useConfiguration("--dynamic_mode=fully"); + target = getConfiguredTarget("//a:b"); + toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); + + assertThat( + CppHelper.getDynamicMode( + target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider)) + .isEqualTo(DynamicMode.FULLY); + + // Check an invalid value for disable_dynamic. + try { + useConfiguration("--dynamic_mode=very"); + fail("OptionsParsingException not thrown."); // COV_NF_LINE + } catch (OptionsParsingException e) { + assertThat(e) + .hasMessageThat() + .isEqualTo( + "While parsing option --dynamic_mode=very: Not a valid dynamic mode: 'very' " + + "(should be off, default or fully)"); + } + } + public void assertInvalidIncludeDirectoryMessage(String entry, String messageRegex) throws Exception { try { |