aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-11-22 13:26:12 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-22 13:28:21 -0800
commit6c91871f49e966128f18e2986449b4c19939c14e (patch)
tree16e2b533619d12695ab42a6ea6417e2f8ccd56ba /src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
parentfa484fd91ed3421d9685bdfe2a9851681bbcaa4f (diff)
Move CppConfiguration's treatment of pic, --start-lib/--end-lib, and fission to
CppHelper. In CppHelper, CcToolchainProvider and CppConfiguration are used sepereately, allowing toolchain information to be removed from CppConfiguration. This is necessary to introduce hermetic toolchains, which require that toolchain information be seperated from the configuration, into the c++ rules. PiperOrigin-RevId: 176694160
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java254
1 files changed, 254 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 65379d294d..d94be0f8cb 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
@@ -59,6 +59,260 @@ public class CcToolchainTest extends BuildViewTestCase {
}
@Test
+ public void testInterfaceSharedObjects() 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'])");
+ getAnalysisMock()
+ .ccSupport()
+ .setupCrosstool(
+ mockToolsConfig,
+ CrosstoolConfig.CToolchain.newBuilder()
+ .setSupportsInterfaceSharedObjects(false)
+ .buildPartial());
+ useConfiguration();
+
+ ConfiguredTarget target = getConfiguredTarget("//a:b");
+ CcToolchainProvider toolchainProvider =
+ (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useInterfaceSharedObjects(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ useConfiguration("--interface_shared_objects");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useInterfaceSharedObjects(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ getAnalysisMock()
+ .ccSupport()
+ .setupCrosstool(
+ mockToolsConfig,
+ CrosstoolConfig.CToolchain.newBuilder()
+ .setSupportsInterfaceSharedObjects(true)
+ .buildPartial());
+ useConfiguration();
+
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useInterfaceSharedObjects(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isTrue();
+
+ useConfiguration("--nointerface_shared_objects");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useInterfaceSharedObjects(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+ }
+
+ @Test
+ public void testFission() 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'])");
+
+ // Default configuration: disabled.
+ getAnalysisMock()
+ .ccSupport()
+ .setupCrosstool(
+ mockToolsConfig,
+ CrosstoolConfig.CToolchain.newBuilder().setSupportsFission(true).buildPartial());
+ useConfiguration();
+ ConfiguredTarget target = getConfiguredTarget("//a:b");
+ CcToolchainProvider toolchainProvider =
+ (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ // Mode-specific settings.
+ useConfiguration("-c", "dbg", "--fission=dbg");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isTrue();
+
+ useConfiguration("-c", "dbg", "--fission=opt");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ useConfiguration("-c", "dbg", "--fission=opt,dbg");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isTrue();
+
+ useConfiguration("-c", "fastbuild", "--fission=opt,dbg");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ useConfiguration("-c", "fastbuild", "--fission=opt,dbg");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ // Universally enabled
+ useConfiguration("-c", "dbg", "--fission=yes");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isTrue();
+
+ useConfiguration("-c", "opt", "--fission=yes");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isTrue();
+
+ useConfiguration("-c", "fastbuild", "--fission=yes");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isTrue();
+
+ // Universally disabled
+ useConfiguration("-c", "dbg", "--fission=no");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ useConfiguration("-c", "opt", "--fission=no");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+
+ useConfiguration("-c", "fastbuild", "--fission=no");
+ target = getConfiguredTarget("//a:b");
+ toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ assertThat(
+ CppHelper.useFission(
+ target.getConfiguration().getFragment(CppConfiguration.class), toolchainProvider))
+ .isFalse();
+ }
+
+ @Test
+ public void testPic() 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'])");
+
+ useConfiguration("--cpu=piii");
+ 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();
+ }
+
+ @Test
public void testBadDynamicRuntimeLib() throws Exception {
scratch.file("a/BUILD",
"filegroup(name='dynamic', srcs=['not-an-so', 'so.so'])",