diff options
Diffstat (limited to 'src/test/java')
4 files changed, 83 insertions, 8 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java index 38266f3105..f1d52092a3 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java @@ -93,48 +93,57 @@ public final class BazelMockCcSupport extends MockCcSupport { " 'ppc|compiler': ':cc-compiler-ppc',", " })", "cc_toolchain(name = 'cc-compiler-k8', all_files = ':empty', compiler_files = ':empty',", - " cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " cpu = 'k8', compiler = 'compiler', libc = 'local', dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", " linker_files = ':empty',", " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", "cc_toolchain(name = 'cc-compiler-ppc', all_files = ':empty', compiler_files = ':empty',", - " cpu = 'ppc', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " cpu = 'ppc', compiler = 'compiler', libc = 'local', dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", " linker_files = ':empty',", " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", "cc_toolchain(name = 'cc-compiler-piii', all_files = ':all-files-piii',", " compiler_files = ':compiler-files-piii',", - " cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " cpu = 'piii', compiler = 'compiler', libc = 'local', dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", " linker_files = ':empty',", " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", "cc_toolchain(name = 'cc-compiler-darwin', all_files = ':empty', ", " compiler_files = ':empty',", - " cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " cpu = 'darwin', compiler = 'compiler', libc = 'macosx', dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", " linker_files = ':empty',", " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", "cc_toolchain(name = 'cc-compiler-ios_x86_64', all_files = ':empty', ", " compiler_files = ':empty',", - " cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " cpu = 'ios_x86_64', compiler = 'compiler', libc = 'local', dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", " linker_files = ':empty',", " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", "cc_toolchain(name = 'cc-compiler-armeabi-v7a', all_files = ':empty', ", " compiler_files = ':empty',", - " cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " cpu = 'armeabi-v7a', compiler = 'compiler', libc = 'armeabi-v7a', ", + " dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", " linker_files = ':empty',", " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", "cc_toolchain(name = 'cc-compiler-x64_windows', all_files = ':empty', ", " compiler_files = ':empty',", - " cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " cpu = 'x64_windows', compiler = 'windows_msys64', libc = 'local', ", + " dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", " linker_files = ':empty',", " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java index 3642fda958..1f51043e49 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java @@ -139,6 +139,8 @@ final class Crosstool { " output_licenses = ['unencumbered'],", addModuleMap ? " module_map = 'crosstool.cppmap'," : "", " cpu = '" + arch + "',", + " compiler = 'gcc-4.4.0',", + " libc = 'glibc-2.3.6-grte',", " compiler_files = 'compile-" + arch + "',", " dwp_files = 'dwp-" + arch + "',", " linker_files = 'link-" + arch + "',", diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java index bc93ba92b2..89d0cbc8f0 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java @@ -37,6 +37,7 @@ public class CcToolchainProviderTest { CcToolchainProvider a = new CcToolchainProvider( null, + null, NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), @@ -67,6 +68,7 @@ public class CcToolchainProviderTest { CcToolchainProvider b = new CcToolchainProvider( null, + null, NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java index 588ff24842..8bb82384b8 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.analysis.util.ScratchAttributeWriter; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.util.MockPlatformSupport; +import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.testutil.TestConstants; import java.util.List; import org.junit.Before; @@ -51,7 +52,7 @@ public class CcToolchainSelectionTest extends BuildViewTestCase { return compilationSteps.get(0); } - private static String CPP_TOOLCHAIN_TYPE = + private static final String CPP_TOOLCHAIN_TYPE = TestConstants.TOOLS_REPOSITORY + "//tools/cpp:toolchain_category"; @Test @@ -104,4 +105,65 @@ public class CcToolchainSelectionTest extends BuildViewTestCase { providers.getForToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE)); assertThat(toolchain.getKeys()).isEmpty(); } + + @Test + public void testCToolchainSelectionFromCcToolchainAttrs() throws Exception { + useConfiguration( + "--enabled_toolchain_types=" + CPP_TOOLCHAIN_TYPE, + "--experimental_platforms=//mock_platform:mock-piii-platform", + "--extra_toolchains=//mock_platform:toolchain_cc-compiler-piii"); + ConfiguredTarget target = + ScratchAttributeWriter.fromLabelString(this, "cc_library", "//lib") + .setList("srcs", "a.cc") + .write(); + ResolvedToolchainProviders providers = + (ResolvedToolchainProviders) + getRuleContext(target).getToolchainContext().getResolvedToolchainProviders(); + CcToolchainProvider toolchain = + (CcToolchainProvider) + providers.getForToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE)); + assertThat(toolchain.getToolchain().getTargetCpu()).isEqualTo("piii"); + } + + @Test + public void testErrorForIncompleteCcToolchain() throws Exception { + mockToolsConfig.create( + "incomplete_toolchain/BUILD", + "toolchain(", + " name = 'incomplete_toolchain_cc-compiler-piii',", + " toolchain_type = '" + CPP_TOOLCHAIN_TYPE + "',", + " toolchain = ':incomplete_cc-compiler-piii',", + " target_compatible_with = ['//mock_platform:mock_value']", + ")", + "cc_toolchain(", + " name = 'incomplete_cc-compiler-piii',", + " cpu = 'piii',", + " compiler_files = 'compile-piii',", + " dwp_files = 'dwp-piii',", + " linker_files = 'link-piii',", + " strip_files = ':dummy_filegroup',", + " objcopy_files = 'objcopy-piii',", + " all_files = ':dummy_filegroup',", + " static_runtime_libs = ['static-runtime-libs-piii'],", + " dynamic_runtime_libs = ['dynamic-runtime-libs-piii'],", + ")", + "filegroup(name = 'dummy_filegroup')"); + + useConfiguration( + "--enabled_toolchain_types=" + CPP_TOOLCHAIN_TYPE, + "--experimental_platforms=//mock_platform:mock-piii-platform", + "--extra_toolchains=//incomplete_toolchain:incomplete_toolchain_cc-compiler-piii"); + + AssertionError thrown = + MoreAsserts.expectThrows( + AssertionError.class, + () -> + ScratchAttributeWriter.fromLabelString(this, "cc_library", "//lib") + .setList("srcs", "a.cc") + .write()); + + assertThat(thrown) + .hasMessageThat() + .contains("Using cc_toolchain target requires the attribute 'compiler' to be present"); + } } |