diff options
author | rosica <rosica@google.com> | 2018-06-04 10:41:53 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-04 10:43:50 -0700 |
commit | 25ae199041c4176d06bbe36ff112da28c2a48a15 (patch) | |
tree | 9c8c6df451ef26102091f792c465c44ae755f342 | |
parent | 9cf0f655dc0e416f88c64bebe0eed6f1536b33fd (diff) |
Remove --glibc option
Crosstool selection will be based solely on --cpu and --compiler options.
RELNOTES: Option --glibc is removed, toolchain selection relies solely on --cpu and --compiler options.
PiperOrigin-RevId: 199156131
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" + "]"); } } |