aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java16
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java19
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java59
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java32
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationHelper.java10
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java11
-rw-r--r--tools/cpp/BUILD19
9 files changed, 124 insertions, 54 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
index 15e4e6887b..af92ecfa76 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
@@ -75,6 +75,7 @@ public abstract class ConfigurationTestCase extends FoundationTestCase {
public List<String> multiCpus;
}
+ protected MockToolsConfig mockToolsConfig;
protected Path workspace;
protected AnalysisMock analysisMock;
protected SequencedSkyframeExecutor skyframeExecutor;
@@ -123,7 +124,8 @@ public abstract class ConfigurationTestCase extends FoundationTestCase {
UUID.randomUUID(),
new TimestampGranularityMonitor(BlazeClock.instance()));
- analysisMock.setupMockClient(new MockToolsConfig(rootDirectory));
+ mockToolsConfig = new MockToolsConfig(rootDirectory);
+ analysisMock.setupMockClient(mockToolsConfig);
analysisMock.setupMockWorkspaceFiles(directories.getEmbeddedBinariesRoot());
configurationFactory = analysisMock.createConfigurationFactory();
buildOptionClasses = ruleClassProvider.getConfigurationOptions();
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 d43ce9a77b..192ce19bf6 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
@@ -81,10 +81,16 @@ public final class BazelMockCcSupport extends MockCcSupport {
"/bazel_tools_workspace/tools/cpp/BUILD",
"cc_library(name = 'stl')",
"cc_library(name = 'malloc')",
- "filegroup(name = 'toolchain', ",
- " srcs = [':cc-compiler-local', ':cc-compiler-darwin', ':cc-compiler-piii',",
- " ':cc-compiler-armeabi-v7a', ':empty'],",
- ")",
+ "cc_toolchain_suite(",
+ " name = 'toolchain',",
+ " toolchains = {",
+ " 'local|compiler': ':cc-compiler-local',",
+ " 'k8|compiler': ':cc-compiler-k8',",
+ " 'piii|compiler': ':cc-compiler-piii',",
+ " 'darwin|compiler': ':cc-compiler-darwin',",
+ " 'armeabi-v7a|compiler': ':cc-compiler-armeabi-v7a',",
+ " 'x64_windows|compiler': ':cc-compiler-x64_windows',",
+ " })",
"cc_toolchain(name = 'cc-compiler-k8', all_files = ':empty', compiler_files = ':empty',",
" cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
" linker_files = ':empty',",
@@ -132,7 +138,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
}
@Override
- protected String readCrosstoolFile() throws IOException {
+ public String readCrosstoolFile() throws IOException {
return readFromResources(MOCK_CROSSTOOL_PATH);
}
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 cddecfaa3d..ddd5b584c9 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
@@ -15,12 +15,11 @@ package com.google.devtools.build.lib.packages.util;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
+import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
+import com.google.protobuf.TextFormat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
/**
* A helper class to create a crosstool package containing a CROSSTOOL file, and the various
@@ -108,7 +107,14 @@ final class Crosstool {
}
}
- List<String> compilerRules = Lists.newArrayList();
+ CrosstoolConfig.CrosstoolRelease.Builder configBuilder =
+ CrosstoolConfig.CrosstoolRelease.newBuilder();
+ TextFormat.merge(crosstoolFileContents, configBuilder);
+ StringBuilder compilerMap = new StringBuilder();
+ for (CrosstoolConfig.CToolchain toolchain : configBuilder.build().getToolchainList()) {
+ compilerMap.append(String.format("'%s|%s': ':cc-compiler-%s',\n",
+ toolchain.getTargetCpu(), toolchain.getCompiler(), toolchain.getTargetCpu()));
+ }
for (String arch : archs) {
String compilerRule;
@@ -145,7 +151,6 @@ final class Crosstool {
+ "])");
compilationTools.append(compilerRule + "\n");
- compilerRules.add(":cc-compiler-" + arch);
}
String build =
@@ -154,14 +159,14 @@ final class Crosstool {
"package(default_visibility=['//visibility:public'])",
"licenses(['restricted'])",
"",
+ "alias(name = 'toolchain', actual = 'everything')",
"filegroup(name = 'everything-multilib',",
" srcs = glob(['" + version + "/**/*'],",
" exclude_directories = 1),",
" output_licenses = ['unencumbered'])",
"",
String.format(
- "filegroup(name = 'everything', srcs = ['%s', ':every-file'])",
- Joiner.on("', '").join(compilerRules)),
+ "cc_toolchain_suite(name = 'everything', toolchains = {%s})", compilerMap),
"",
String.format(
"filegroup(name = 'every-file', srcs = ['%s'%s%s])",
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
index 8dbe6e978d..9da6514969 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
@@ -367,6 +367,11 @@ public abstract class MockCcSupport {
setupCrosstool(config, toolchainBuilder.buildPartial());
}
+ public void setupCrosstoolWithRelease(MockToolsConfig config, String crosstool)
+ throws IOException {
+ createCrosstoolPackage(config, false, true, null, null, crosstool);
+ }
+
/**
* Creates a crosstool package by merging {@code toolchain} with the default mock CROSSTOOL file.
*/
@@ -389,8 +394,7 @@ public abstract class MockCcSupport {
boolean addModuleMap,
String staticRuntimesLabel,
String dynamicRuntimesLabel,
- CToolchain toolchain)
- throws IOException {
+ CToolchain toolchain) throws IOException {
createCrosstoolPackage(
config,
addEmbeddedRuntimes,
@@ -400,6 +404,23 @@ public abstract class MockCcSupport {
toolchain);
}
+ public void setupCrosstool(
+ MockToolsConfig config,
+ boolean addEmbeddedRuntimes,
+ boolean addModuleMap,
+ String staticRuntimesLabel,
+ String dynamicRuntimesLabel,
+ String crosstool)
+ throws IOException {
+ createCrosstoolPackage(
+ config,
+ addEmbeddedRuntimes,
+ addModuleMap,
+ staticRuntimesLabel,
+ dynamicRuntimesLabel,
+ crosstool);
+ }
+
protected static void createToolsCppPackage(MockToolsConfig config) throws IOException {
config.create(
"tools/cpp/BUILD",
@@ -409,7 +430,7 @@ public abstract class MockCcSupport {
protected void createCrosstoolPackage(MockToolsConfig config, boolean addEmbeddedRuntimes)
throws IOException {
- createCrosstoolPackage(config, addEmbeddedRuntimes, /*addModuleMap=*/ true, null, null, null);
+ createCrosstoolPackage(config, addEmbeddedRuntimes, /*addModuleMap=*/ true, null, null);
}
protected String getCrosstoolTopPathForConfig(MockToolsConfig config) {
@@ -433,7 +454,18 @@ public abstract class MockCcSupport {
}
}
- protected void createCrosstoolPackage(
+ private void createCrosstoolPackage(
+ MockToolsConfig config,
+ boolean addEmbeddedRuntimes,
+ boolean addModuleMap,
+ String staticRuntimesLabel,
+ String dynamicRuntimesLabel)
+ throws IOException {
+ createCrosstoolPackage(config, addEmbeddedRuntimes, addModuleMap, staticRuntimesLabel,
+ dynamicRuntimesLabel, readCrosstoolFile());
+ }
+
+ private void createCrosstoolPackage(
MockToolsConfig config,
boolean addEmbeddedRuntimes,
boolean addModuleMap,
@@ -441,14 +473,23 @@ public abstract class MockCcSupport {
String dynamicRuntimesLabel,
CToolchain toolchain)
throws IOException {
+ String crosstoolFile = mergeCrosstoolConfig(readCrosstoolFile(), toolchain);
+ createCrosstoolPackage(config, addEmbeddedRuntimes, addModuleMap, staticRuntimesLabel,
+ dynamicRuntimesLabel, crosstoolFile);
+ }
+
+ protected void createCrosstoolPackage(
+ MockToolsConfig config,
+ boolean addEmbeddedRuntimes,
+ boolean addModuleMap,
+ String staticRuntimesLabel,
+ String dynamicRuntimesLabel,
+ String crosstoolFile)
+ throws IOException {
String crosstoolTop = getCrosstoolTopPathForConfig(config);
if (config.isRealFileSystem()) {
config.linkTools(getRealFilesystemTools(crosstoolTop));
} else {
- String crosstoolFile = readCrosstoolFile();
- if (toolchain != null) {
- crosstoolFile = mergeCrosstoolConfig(crosstoolFile, toolchain);
- }
new Crosstool(config, crosstoolTop)
.setEmbeddedRuntimes(addEmbeddedRuntimes, staticRuntimesLabel, dynamicRuntimesLabel)
.setCrosstoolFile(getMockCrosstoolVersion(), crosstoolFile)
@@ -461,7 +502,7 @@ public abstract class MockCcSupport {
protected abstract String getMockCrosstoolVersion();
- protected abstract String readCrosstoolFile() throws IOException;
+ public abstract String readCrosstoolFile() throws IOException;
protected abstract ImmutableList<String> getCrosstoolArchs();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
index 9896392eeb..14549403d7 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
@@ -242,8 +242,7 @@ public class CcCommonTest extends BuildViewTestCase {
@Test
public void testStartEndLib() throws Exception {
- CrosstoolConfigurationHelper.overwriteCrosstoolWithToolchain(
- directories.getWorkspace(),
+ getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig,
CrosstoolConfig.CToolchain.newBuilder().setSupportsStartEndLib(true).buildPartial());
useConfiguration(
// Prevent Android from trying to setup ARM crosstool by forcing it on system cpu.
@@ -356,13 +355,12 @@ public class CcCommonTest extends BuildViewTestCase {
/**
* Tests that nocopts= "-fPIC" takes '-fPIC' out of a compile invocation even if the crosstool
- * requires fPIC compilation (i.e. nocoopts overrides crosstool settings on a rule-specific
+ * requires fPIC compilation (i.e. nocopts overrides crosstool settings on a rule-specific
* basis).
*/
@Test
public void testNoCoptfPicOverride() throws Exception {
- CrosstoolConfigurationHelper.overwriteCrosstoolWithToolchain(
- directories.getWorkspace(),
+ getAnalysisMock().ccSupport().setupCrosstool(mockToolsConfig,
CrosstoolConfig.CToolchain.newBuilder().setNeedsPic(true).buildPartial());
useConfiguration(
// Prevent Android from trying to setup ARM crosstool by forcing it on system cpu.
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index 34efc439ee..65ec00df24 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -44,6 +44,8 @@ import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.vfs.PathFragment;
+import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
+import com.google.protobuf.TextFormat;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
@@ -116,8 +118,36 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
@Test
public void testFilesToBuildWithoutDSO() throws Exception {
+ CrosstoolConfig.CrosstoolRelease.Builder release = CrosstoolConfig.CrosstoolRelease.newBuilder()
+ .mergeFrom(CrosstoolConfigurationHelper.simpleCompleteToolchainProto());
+ release.getToolchainBuilder(0)
+ .setTargetCpu("k8")
+ .setCompiler("compiler")
+ .clearLinkingModeFlags();
+
+ scratch.file("crosstool/BUILD",
+ "cc_toolchain_suite(",
+ " name = 'crosstool',",
+ " toolchains = {'k8|compiler': ':cc-compiler-k8'})",
+ "filegroup(name = 'empty')",
+ "cc_toolchain(",
+ " name = 'cc-compiler-k8',",
+ " output_licenses = ['unencumbered'],",
+ " cpu = 'k8',",
+ " compiler_files = ':empty',",
+ " dwp_files = ':empty',",
+ " linker_files = ':empty',",
+ " strip_files = ':empty',",
+ " objcopy_files = ':empty',",
+ " static_runtime_libs = [':empty'],",
+ " dynamic_runtime_libs = [':empty'],",
+ " all_files = ':empty',",
+ " licenses = ['unencumbered'])");
+ scratch.file("crosstool/CROSSTOOL", TextFormat.printToString(release));
+
// This is like the preceding test, but with a toolchain that can't build '.so' files
- useConfiguration("--compiler=compiler_no_dyn_linker");
+ useConfiguration("--crosstool_top=//crosstool:crosstool", "--compiler=compiler",
+ "--cpu=k8", "--host_cpu=k8");
ConfiguredTarget hello = getConfiguredTarget("//hello:hello");
Artifact archive = getBinArtifact("libhello.a", hello);
assertThat(getFilesToBuild(hello)).containsExactly(archive);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationHelper.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationHelper.java
index 0b80265f67..cf858ac8ba 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationHelper.java
@@ -63,15 +63,7 @@ public class CrosstoolConfigurationHelper {
return OS.getCurrent() == OS.DARWIN ? "darwin" : "k8";
}
- /**
- * Overwrites the default CROSSTOOL file with a reasonable toolchain.
- */
- public static void overwriteCrosstoolWithSimpleCompleteToolchain(Path workspace)
- throws IOException {
- overwriteCrosstoolFile(workspace, TextFormat.printToString(simpleCompleteToolchainProto()));
- }
-
- private static CrosstoolConfig.CrosstoolRelease simpleCompleteToolchainProto() {
+ public static CrosstoolConfig.CrosstoolRelease simpleCompleteToolchainProto() {
CrosstoolConfig.CrosstoolRelease.Builder builder =
CrosstoolConfig.CrosstoolRelease.newBuilder()
.setMajorVersion("12")
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
index a1bfaaf313..b207a13e6d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
@@ -43,15 +43,13 @@ import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode;
import com.google.devtools.common.options.OptionsParser;
import com.google.devtools.common.options.OptionsParsingException;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
/**
* Tests for {@link CppConfigurationLoader}.
@@ -82,8 +80,7 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
}
private CppConfigurationLoader loader(String crosstoolFileContents) throws IOException {
- CrosstoolConfigurationHelper.overwriteCrosstoolFile(
- directories.getWorkspace(), crosstoolFileContents);
+ getAnalysisMock().ccSupport().setupCrosstoolWithRelease(mockToolsConfig, crosstoolFileContents);
return new CppConfigurationLoader(Functions.<String>identity());
}
diff --git a/tools/cpp/BUILD b/tools/cpp/BUILD
index b121ddcfd2..f693fe7cb3 100644
--- a/tools/cpp/BUILD
+++ b/tools/cpp/BUILD
@@ -29,17 +29,16 @@ filegroup(
)
# Hardcoded toolchain, legacy behaviour.
-filegroup(
+cc_toolchain_suite(
name = "default-toolchain",
- srcs = [
- ":cc-compiler-armeabi-v7a",
- ":cc-compiler-darwin",
- ":cc-compiler-freebsd",
- ":cc-compiler-local",
- ":cc-compiler-x64_windows",
- ":cc-compiler-x64_windows_msvc",
- ":empty",
- ],
+ toolchains = {
+ "armeabi-v7a|compiler": ":cc-compiler-armeabi-v7a",
+ "darwin|compiler": ":cc-compiler-darwin",
+ "freebsd|compiler": ":cc-compiler-freebsd",
+ "local|compiler": ":cc-compiler-local",
+ "x64_windows|compiler": ":cc-compiler-x64_windows",
+ "x64_windows_msvc|compiler": ":cc-compiler-x64_windows_msvc",
+ },
)
cc_toolchain(