aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-11-22 08:59:00 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-22 09:02:40 -0800
commit96e244dc211ef3277f154f1f03bd0c87347d522a (patch)
tree2c98c1bd9cec55fb4d9e7e01cb3a36a3f44f83c6 /src/test/java/com/google/devtools/build
parent0d6ff477099fdf6c8c1c7d4e2104f9184afe0a2b (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/build')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java107
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 {