diff options
Diffstat (limited to 'src/test')
-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 { |