aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--site/docs/user-manual.html22
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationIdentifier.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java20
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java123
13 files changed, 91 insertions, 150 deletions
diff --git a/site/docs/user-manual.html b/site/docs/user-manual.html
index 6d93e7dca1..9a681dc40a 100644
--- a/site/docs/user-manual.html
+++ b/site/docs/user-manual.html
@@ -1581,8 +1581,8 @@ the compilation of binaries during the build.
<h3 id='strategy-options'>Build strategy options</h3>
<p>
Note that a particular combination of crosstool version, compiler version,
- libc version, and target CPU is allowed only if it has been specified
- in the currently used CROSSTOOL file.
+ and target CPU is allowed only if it has been specified in the currently
+ used CROSSTOOL file.
</p>
<h4 id='flag--host_cpu'><code class='flag'>--host_cpu <var>cpu</var></code></h4>
@@ -1790,23 +1790,7 @@ The default is <code>armeabi-v7a</code>.
</p>
<p>
Note that only certain combinations of crosstool version, compiler version,
- libc version, and target CPU are allowed.
-</p>
-
-<h4 id='flag--glibc'><code class='flag'>--glibc <var>version</var></code></h4>
-<p>
- This option specifies the version of glibc that the target should be linked
- against. If you want to build with a custom crosstool, you should use a
- CROSSTOOL file instead of specifying this flag. In that case, Bazel will use
- the CROSSTOOL file and the following options where appropriate:
- <ul>
- <li><a href="#flag--cpu"><code class='flag'>--cpu</code></a></li>
-
- </ul>
-</p>
-<p>
- Note that only certain combinations of crosstool version, compiler version,
- glibc version, and target CPU are allowed.
+ and target CPU are allowed.
</p>
<h4 id='flag--android_sdk'><code class='flag'>--android_sdk <var>label</var></code></h4>
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
index 0f333e90e0..435b55f7dc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
@@ -49,6 +49,16 @@ public class BazelRulesModule extends BlazeModule {
metadataTags = {OptionMetadataTag.DEPRECATED},
help = "Deprecated no-op.")
public boolean directRun;
+
+ @Deprecated
+ @Option(
+ name = "glibc",
+ defaultValue = "null",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ metadataTags = {OptionMetadataTag.DEPRECATED},
+ help = "Deprecated no-op.")
+ public String glibc;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index cd39c8b33b..1c5d0116eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -252,7 +252,6 @@ public final class AndroidRuleClasses {
splitOptions.get(CppOptions.class).libcTopLabel = androidOptions.androidLibcTopLabel;
splitOptions.get(BuildConfiguration.Options.class).cpu = androidOptions.cpu;
splitOptions.get(CppOptions.class).dynamicMode = androidOptions.dynamicMode;
- splitOptions.get(CppOptions.class).glibc = null;
setCrosstoolToAndroid(splitOptions, buildOptions);
return ImmutableList.of(splitOptions);
}
@@ -272,7 +271,6 @@ public final class AndroidRuleClasses {
splitOptions.get(CppOptions.class).cppCompiler = androidOptions.cppCompiler;
splitOptions.get(CppOptions.class).libcTopLabel = androidOptions.androidLibcTopLabel;
splitOptions.get(CppOptions.class).dynamicMode = androidOptions.dynamicMode;
- splitOptions.get(CppOptions.class).glibc = null;
setCrosstoolToAndroid(splitOptions, buildOptions);
result.add(splitOptions);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index 5dc9e75bf6..624c84712d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -753,12 +753,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
if (compiler.isEmpty()) {
compiler = null;
}
- String libc = ruleContext.attributes().get("libc", Type.STRING);
- if (libc.isEmpty()) {
- libc = null;
- }
- CrosstoolConfigurationIdentifier config =
- new CrosstoolConfigurationIdentifier(cpu, compiler, libc);
+ CrosstoolConfigurationIdentifier config = new CrosstoolConfigurationIdentifier(cpu, compiler);
try {
return CrosstoolConfigurationLoader.selectToolchain(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
index bdba98899c..a22c7a3f32 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
@@ -111,7 +111,6 @@ public final class CcToolchainRule implements RuleDefinition {
.add(attr("output_licenses", LICENSE))
.add(attr("cpu", STRING).mandatory())
.add(attr("compiler", STRING))
- .add(attr("libc", STRING))
.add(
attr("all_files", LABEL)
.legacyAllowAnyFileType()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index cc8fd2f3e0..68009b8b5f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -170,17 +170,6 @@ public class CppOptions extends FragmentOptions {
)
public String outputDirectoryTag;
- @Option(
- name = "glibc",
- defaultValue = "null",
- documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
- effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS, OptionEffectTag.AFFECTS_OUTPUTS},
- help =
- "The version of glibc the target should be linked against. "
- + "By default, a suitable version is chosen based on --cpu."
- )
- public String glibc;
-
// O intrepid reaper of unused options: Be warned that the [no]start_end_lib
// option, however tempting to remove, has a use case. Look in our telemetry data.
@Option(
@@ -954,7 +943,6 @@ public class CppOptions extends FragmentOptions {
if (hostCrosstoolTop == null) {
host.cppCompiler = cppCompiler;
host.crosstoolTop = crosstoolTop;
- host.glibc = glibc;
} else {
host.crosstoolTop = hostCrosstoolTop;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationIdentifier.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationIdentifier.java
index accd29c195..63ef402e9c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationIdentifier.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationIdentifier.java
@@ -35,14 +35,10 @@ public final class CrosstoolConfigurationIdentifier implements CrosstoolConfigur
/** The compiler (e.g. gcc) associated with this crosstool configuration. */
private final String compiler;
- /** The version of libc (e.g. glibc-2.11) associated with this crosstool configuration. */
- private final String libc;
-
/** Creates a new {@link CrosstoolConfigurationIdentifier} with the given parameters. */
- CrosstoolConfigurationIdentifier(String cpu, String compiler, String libc) {
+ CrosstoolConfigurationIdentifier(String cpu, String compiler) {
this.cpu = Preconditions.checkNotNull(cpu);
this.compiler = compiler;
- this.libc = libc;
}
/**
@@ -52,13 +48,11 @@ public final class CrosstoolConfigurationIdentifier implements CrosstoolConfigur
public static CrosstoolConfigurationIdentifier fromOptions(BuildOptions buildOptions) {
Options options = buildOptions.get(BuildConfiguration.Options.class);
CppOptions cppOptions = buildOptions.get(CppOptions.class);
- return new CrosstoolConfigurationIdentifier(
- options.cpu, cppOptions.cppCompiler, cppOptions.glibc);
+ return new CrosstoolConfigurationIdentifier(options.cpu, cppOptions.cppCompiler);
}
public static CrosstoolConfigurationIdentifier fromToolchain(CToolchain toolchain) {
- return new CrosstoolConfigurationIdentifier(
- toolchain.getTargetCpu(), toolchain.getCompiler(), toolchain.getTargetLibc());
+ return new CrosstoolConfigurationIdentifier(toolchain.getTargetCpu(), toolchain.getCompiler());
}
@Override
@@ -68,22 +62,19 @@ public final class CrosstoolConfigurationIdentifier implements CrosstoolConfigur
}
CrosstoolConfigurationIdentifier otherCrosstool = (CrosstoolConfigurationIdentifier) other;
return Objects.equals(cpu, otherCrosstool.cpu)
- && Objects.equals(compiler, otherCrosstool.compiler)
- && Objects.equals(libc, otherCrosstool.libc);
+ && Objects.equals(compiler, otherCrosstool.compiler);
}
@Override
public int hashCode() {
- return Objects.hash(cpu, compiler, libc);
+ return Objects.hash(cpu, compiler);
}
-
/**
- * Returns a series of command line flags which specify the configuration options.
- * Any of these options may be null, in which case its flag is omitted.
+ * Returns a series of command line flags which specify the configuration options. Any of these
+ * options may be null, in which case its flag is omitted.
*
- * <p>The appended string will be along the lines of
- * " --cpu='cpu' --compiler='compiler' --glibc='libc'".
+ * <p>The appended string will be along the lines of " --cpu='cpu' --compiler='compiler'".
*/
public String describeFlags() {
StringBuilder message = new StringBuilder();
@@ -93,16 +84,12 @@ public final class CrosstoolConfigurationIdentifier implements CrosstoolConfigur
if (getCompiler() != null) {
message.append(" --compiler='").append(getCompiler()).append("'");
}
- if (getLibc() != null) {
- message.append(" --glibc='").append(getLibc()).append("'");
- }
return message.toString();
}
/** Returns true if the specified toolchain is a candidate for use with this crosstool. */
public boolean isCandidateToolchain(CToolchain toolchain) {
return (toolchain.getTargetCpu().equals(getCpu())
- && (getLibc() == null || toolchain.getTargetLibc().equals(getLibc()))
&& (getCompiler() == null || toolchain.getCompiler().equals(
getCompiler())));
}
@@ -121,9 +108,4 @@ public final class CrosstoolConfigurationIdentifier implements CrosstoolConfigur
public String getCompiler() {
return compiler;
}
-
- @Override
- public String getLibc() {
- return libc;
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java
index c1429e1985..caed2d37b6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java
@@ -317,7 +317,7 @@ public class CrosstoolConfigurationLoader {
boolean convertLipoToThinLto,
Function<String, String> cpuTransformer)
throws InvalidConfigurationException {
- if ((config.getCompiler() != null) || (config.getLibc() != null)) {
+ if (config.getCompiler() != null) {
ArrayList<CrosstoolConfig.CToolchain> candidateToolchains = new ArrayList<>();
for (CrosstoolConfig.CToolchain toolchain : release.getToolchainList()) {
if (config.isCandidateToolchain(toolchain)) {
@@ -396,6 +396,8 @@ public class CrosstoolConfigurationLoader {
message.append("[\n");
for (CrosstoolConfig.CToolchain toolchain : toolchains) {
message.append(" ");
+ message.append(toolchain.getToolchainIdentifier());
+ message.append(": ");
message.append(
CrosstoolConfigurationIdentifier.fromToolchain(toolchain).describeFlags().trim());
message.append(",\n");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationOptions.java
index 46af308d23..f406d44e74 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationOptions.java
@@ -26,8 +26,4 @@ public interface CrosstoolConfigurationOptions {
/** Returns the compiler associated with this crosstool configuration. */
@Nullable
String getCompiler();
-
- /** Returns the libc version associated with this crosstool configuration. */
- @Nullable
- String getLibc();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
index 2481612b43..3a2e636a13 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
@@ -77,7 +77,6 @@ public class AppleCrosstoolTransition implements PatchTransition {
// OSX toolchains always use the runtime of the platform they are targeting (i.e. we do not
// support custom production environments).
to.get(CppOptions.class).libcTopLabel = null;
- to.get(CppOptions.class).glibc = null;
// OSX toolchains do not support fission.
to.get(CppOptions.class).fissionModes = ImmutableList.of();
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 7ba9f8a994..994888265c 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
@@ -96,7 +96,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
" 'ppc|compiler': ':cc-compiler-ppc',",
" })",
"cc_toolchain(name = 'cc-compiler-k8', all_files = ':empty', compiler_files = ':empty',",
- " cpu = 'k8', compiler = 'compiler', libc = 'local', dwp_files = ':empty',",
+ " cpu = 'k8', compiler = 'compiler', dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
" module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
@@ -114,7 +114,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-no-dyn-linker-k8', all_files = ':empty', ",
" compiler_files = ':empty', cpu = 'k8', compiler = 'compiler_no_dyn_linker', ",
- " libc = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
+ " dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
" module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
" objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
@@ -130,7 +130,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
" toolchain_type = ':toolchain_type',",
")",
"cc_toolchain(name = 'cc-compiler-ppc', all_files = ':empty', compiler_files = ':empty',",
- " cpu = 'ppc', compiler = 'compiler', libc = 'local', dwp_files = ':empty',",
+ " cpu = 'ppc', compiler = 'compiler', dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
" module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
@@ -148,7 +148,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-compiler-piii', all_files = ':all-files-piii',",
" compiler_files = ':compiler-files-piii',",
- " cpu = 'piii', compiler = 'compiler', libc = 'local', dwp_files = ':empty',",
+ " cpu = 'piii', compiler = 'compiler', dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
" module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
@@ -166,7 +166,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-compiler-darwin', all_files = ':empty', ",
" compiler_files = ':empty',",
- " cpu = 'darwin', compiler = 'compiler', libc = 'macosx', dwp_files = ':empty',",
+ " cpu = 'darwin', compiler = 'compiler', dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
" module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
@@ -184,7 +184,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-no-dyn-linker-darwin', all_files = ':empty', ",
" compiler_files = ':empty',",
- " cpu = 'darwin', compiler = 'compiler_no_dyn_linker', libc = 'macosx', " ,
+ " cpu = 'darwin', compiler = 'compiler_no_dyn_linker', ",
" dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
" module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
@@ -202,7 +202,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-compiler-ios_x86_64', all_files = ':empty', ",
" compiler_files = ':empty',",
- " cpu = 'ios_x86_64', compiler = 'compiler', libc = 'local', dwp_files = ':empty',",
+ " cpu = 'ios_x86_64', compiler = 'compiler', dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
" module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
@@ -220,7 +220,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-compiler-armeabi-v7a', all_files = ':empty', ",
" compiler_files = ':empty',",
- " cpu = 'armeabi-v7a', compiler = 'compiler', libc = 'armeabi-v7a', ",
+ " cpu = 'armeabi-v7a', compiler = 'compiler',",
" dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
@@ -239,7 +239,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-compiler-x64_windows', all_files = ':empty', ",
" compiler_files = ':empty',",
- " cpu = 'x64_windows', compiler = 'windows_msys64', libc = 'local', ",
+ " cpu = 'x64_windows', compiler = 'windows_msys64',",
" dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
@@ -258,7 +258,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
")",
"cc_toolchain(name = 'cc-no-dyn-linker-x64_windows', all_files = ':empty', ",
" compiler_files = ':empty',",
- " cpu = 'x64_windows', compiler = 'compiler_no_dyn_linker', libc = 'local', ",
+ " cpu = 'x64_windows', compiler = 'compiler_no_dyn_linker',",
" dwp_files = ':empty',",
" dynamic_runtime_libs = [':empty'], ",
" ar_files = ':empty', as_files = ':empty', linker_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 09e86633bb..ad799b9de2 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
@@ -140,7 +140,6 @@ final class Crosstool {
addModuleMap ? " module_map = 'crosstool.cppmap'," : "",
" cpu = '" + arch + "',",
" compiler = 'gcc-4.4.0',",
- " libc = 'glibc-2.3.6-grte',",
" ar_files = 'ar-" + arch + "',",
" as_files = 'as-" + arch + "',",
" compiler_files = 'compile-" + arch + "',",
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 39a6404229..7ea71a486d 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
@@ -597,7 +597,6 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
create(
loader,
"--compiler=compiler-C",
- "--glibc=target-libc-C",
"--cpu=piii",
"--host_cpu=piii",
"--android_cpu=",
@@ -676,12 +675,11 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
}
/**
- * Tests that we can select a toolchain using a subset of the --compiler and
- * --glibc flags, as long as they select a unique result. Also tests the error
- * messages we get when they don't.
+ * Tests that we can select a toolchain using the --compiler flag, as long as it selects a unique
+ * result. Also tests the error messages we get when it doesn't.
*/
@Test
- public void testCompilerLibcSearch() throws Exception {
+ public void testToolchainSelection() throws Exception {
CppConfigurationLoader loader =
loader(
// Needs to include \n's; as a single line it hits a parser limitation.
@@ -690,95 +688,86 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
+ "default_target_cpu: \"k8\"\n"
+ "default_toolchain {\n"
+ " cpu: \"piii\"\n"
- + " toolchain_identifier: \"toolchain-identifier-AA-piii\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-A-piii\"\n"
+ "}\n"
+ "default_toolchain {\n"
+ " cpu: \"k8\"\n"
- + " toolchain_identifier: \"toolchain-identifier-BB\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-B\"\n"
+ "}\n"
+ "toolchain {\n"
- + " toolchain_identifier: \"toolchain-identifier-AA\"\n"
- + " host_system_name: \"host-system-name-AA\"\n"
- + " target_system_name: \"target-system-name-AA\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-A\"\n"
+ + " host_system_name: \"host-system-name-A\"\n"
+ + " target_system_name: \"target-system-name-A\"\n"
+ " target_cpu: \"k8\"\n"
+ " target_libc: \"target-libc-A\"\n"
+ " compiler: \"compiler-A\"\n"
+ " abi_version: \"abi-version-A\"\n"
+ " abi_libc_version: \"abi-libc-version-A\"\n"
+ "}\n"
- // AA-piii is uniquely determined by libc and compiler.
+ "toolchain {\n"
- + " toolchain_identifier: \"toolchain-identifier-AA-piii\"\n"
- + " host_system_name: \"host-system-name-AA\"\n"
- + " target_system_name: \"target-system-name-AA\"\n"
- + " target_cpu: \"piii\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-A-duplicate\"\n"
+ + " host_system_name: \"host-system-name-A\"\n"
+ + " target_system_name: \"target-system-name-A\"\n"
+ + " target_cpu: \"k8\"\n"
+ " target_libc: \"target-libc-A\"\n"
+ " compiler: \"compiler-A\"\n"
+ " abi_version: \"abi-version-A\"\n"
+ " abi_libc_version: \"abi-libc-version-A\"\n"
+ "}\n"
+ "toolchain {\n"
- + " toolchain_identifier: \"toolchain-identifier-AB\"\n"
- + " host_system_name: \"host-system-name-AB\"\n"
- + " target_system_name: \"target-system-name-AB\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-C\"\n"
+ + " host_system_name: \"host-system-name-C\"\n"
+ + " target_system_name: \"target-system-name-C\"\n"
+ " target_cpu: \"k8\"\n"
- + " target_libc: \"target-libc-A\"\n"
- + " compiler: \"compiler-B\"\n"
- + " abi_version: \"abi-version-B\"\n"
- + " abi_libc_version: \"abi-libc-version-A\"\n"
+ + " target_libc: \"target-libc-C\"\n"
+ + " compiler: \"compiler-C\"\n"
+ + " abi_version: \"abi-version-C\"\n"
+ + " abi_libc_version: \"abi-libc-version-C\"\n"
+ "}\n"
+ "toolchain {\n"
- + " toolchain_identifier: \"toolchain-identifier-BA\"\n"
- + " host_system_name: \"host-system-name-BA\"\n"
- + " target_system_name: \"target-system-name-BA\"\n"
- + " target_cpu: \"k8\"\n"
- + " target_libc: \"target-libc-B\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-A-piii\"\n"
+ + " host_system_name: \"host-system-name-A\"\n"
+ + " target_system_name: \"target-system-name-A\"\n"
+ + " target_cpu: \"piii\"\n"
+ + " target_libc: \"target-libc-A\"\n"
+ " compiler: \"compiler-A\"\n"
+ " abi_version: \"abi-version-A\"\n"
- + " abi_libc_version: \"abi-libc-version-B\"\n"
+ + " abi_libc_version: \"abi-libc-version-A\"\n"
+ "}\n"
+ "toolchain {\n"
- + " toolchain_identifier: \"toolchain-identifier-BB\"\n"
- + " host_system_name: \"host-system-name-BB\"\n"
- + " target_system_name: \"target-system-name-BB\"\n"
- + " target_cpu: \"k8\"\n"
- + " target_libc: \"target-libc-B\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-B-piii\"\n"
+ + " host_system_name: \"host-system-name-A\"\n"
+ + " target_system_name: \"target-system-name-A\"\n"
+ + " target_cpu: \"piii\"\n"
+ + " target_libc: \"target-libc-A\"\n"
+ " compiler: \"compiler-B\"\n"
- + " abi_version: \"abi-version-B\"\n"
- + " abi_libc_version: \"abi-libc-version-B\"\n"
+ + " abi_version: \"abi-version-A\"\n"
+ + " abi_libc_version: \"abi-libc-version-A\"\n"
+ "}\n"
+ "toolchain {\n"
- + " toolchain_identifier: \"toolchain-identifier-BC\"\n"
- + " host_system_name: \"host-system-name-BC\"\n"
- + " target_system_name: \"target-system-name-BC\"\n"
+ + " toolchain_identifier: \"toolchain-identifier-B\"\n"
+ + " host_system_name: \"host-system-name-B\"\n"
+ + " target_system_name: \"target-system-name-B\"\n"
+ " target_cpu: \"k8\"\n"
- + " target_libc: \"target-libc-B\"\n"
- + " compiler: \"compiler-C\"\n"
- + " abi_version: \"abi-version-C\"\n"
- + " abi_libc_version: \"abi-libc-version-B\"\n"
+ + " target_libc: \"target-libc-A\"\n"
+ + " compiler: \"compiler-B\"\n"
+ + " abi_version: \"abi-version-B\"\n"
+ + " abi_libc_version: \"abi-libc-version-A\"\n"
+ "}");
// Uses the default toolchain for k8.
assertThat(create(loader, "--cpu=k8").getToolchainIdentifier())
- .isEqualTo("toolchain-identifier-BB");
+ .isEqualTo("toolchain-identifier-B");
// Does not default to --cpu=k8; if no --cpu flag is present, Bazel defaults to the host cpu!
- assertThat(
- create(loader, "--cpu=k8", "--compiler=compiler-A", "--glibc=target-libc-B")
- .getToolchainIdentifier())
- .isEqualTo("toolchain-identifier-BA");
+ assertThat(create(loader, "--cpu=k8", "--compiler=compiler-C").getToolchainIdentifier())
+ .isEqualTo("toolchain-identifier-C");
// Uses the default toolchain for piii.
assertThat(create(loader, "--cpu=piii").getToolchainIdentifier())
- .isEqualTo("toolchain-identifier-AA-piii");
-
- // We can select the unique piii toolchain with either its compiler or glibc.
- assertThat(create(loader, "--cpu=piii", "--compiler=compiler-A").getToolchainIdentifier())
- .isEqualTo("toolchain-identifier-AA-piii");
- assertThat(create(loader, "--cpu=piii", "--glibc=target-libc-A").getToolchainIdentifier())
- .isEqualTo("toolchain-identifier-AA-piii");
+ .isEqualTo("toolchain-identifier-A-piii");
- // compiler-C uniquely identifies a toolchain, so we can use it.
- assertThat(create(loader, "--cpu=k8", "--compiler=compiler-C").getToolchainIdentifier())
- .isEqualTo("toolchain-identifier-BC");
+ // We can select the unique piii toolchain with its compiler.
+ assertThat(create(loader, "--cpu=piii", "--compiler=compiler-B").getToolchainIdentifier())
+ .isEqualTo("toolchain-identifier-B-piii");
try {
create(loader, "--cpu=k8", "--compiler=nonexistent-compiler");
@@ -788,24 +777,24 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
.hasMessage(
"No toolchain found for --cpu='k8' --compiler='nonexistent-compiler'. "
+ "Valid toolchains are: [\n"
- + " --cpu='k8' --compiler='compiler-A' --glibc='target-libc-A',\n"
- + " --cpu='piii' --compiler='compiler-A' --glibc='target-libc-A',\n"
- + " --cpu='k8' --compiler='compiler-B' --glibc='target-libc-A',\n"
- + " --cpu='k8' --compiler='compiler-A' --glibc='target-libc-B',\n"
- + " --cpu='k8' --compiler='compiler-B' --glibc='target-libc-B',\n"
- + " --cpu='k8' --compiler='compiler-C' --glibc='target-libc-B',\n"
+ + " toolchain-identifier-A: --cpu='k8' --compiler='compiler-A',\n"
+ + " toolchain-identifier-A-duplicate: --cpu='k8' --compiler='compiler-A',\n"
+ + " toolchain-identifier-C: --cpu='k8' --compiler='compiler-C',\n"
+ + " toolchain-identifier-A-piii: --cpu='piii' --compiler='compiler-A',\n"
+ + " toolchain-identifier-B-piii: --cpu='piii' --compiler='compiler-B',\n"
+ + " toolchain-identifier-B: --cpu='k8' --compiler='compiler-B',\n"
+ "]");
}
try {
- create(loader, "--cpu=k8", "--glibc=target-libc-A");
+ create(loader, "--cpu=k8", "--compiler=compiler-A");
fail("Expected an error that multiple toolchains matched.");
} catch (InvalidConfigurationException e) {
assertThat(e)
.hasMessage(
- "Multiple toolchains found for --cpu='k8' --glibc='target-libc-A': [\n"
- + " --cpu='k8' --compiler='compiler-A' --glibc='target-libc-A',\n"
- + " --cpu='k8' --compiler='compiler-B' --glibc='target-libc-A',\n"
+ "Multiple toolchains found for --cpu='k8' --compiler='compiler-A': [\n"
+ + " toolchain-identifier-A: --cpu='k8' --compiler='compiler-A',\n"
+ + " toolchain-identifier-A-duplicate: --cpu='k8' --compiler='compiler-A',\n"
+ "]");
}
}