diff options
author | rosica <rosica@google.com> | 2018-07-23 06:25:01 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-23 06:26:14 -0700 |
commit | 2b9874d5fce0c465f827a176642ef1539f62be73 (patch) | |
tree | e13211653da922b83bf8406dd766f18d2b8ec257 /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | 909bd08d6a9ec10a65ec199fe061eb8621907952 (diff) |
Add --experimental_enable_cc_toolchain_label_from_crosstool_proto flag for disabling relying on CROSSTOOL file in order to select the cc_toolchain label
CROSSTOOL file should not have any influence over selection of the cc_toolchain label. Ultimately the information that CROSSTOOL offers will be rerouted through an attribute of cc_toolchain.
RELNOTES: None.
PiperOrigin-RevId: 205651369
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java | 24 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java | 9 |
2 files changed, 26 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java index a427752411..37d033794e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationLoader.java @@ -183,6 +183,13 @@ public class CppConfigurationLoader implements ConfigurationFragmentFactory { NonconfigurableAttributeMapper.of(ccToolchainSuite) .get("toolchains", BuildType.LABEL_DICT_UNARY); ccToolchainLabel = toolchains.get(key); + String errorMessage = + String.format( + "cc_toolchain_suite '%s' does not contain a toolchain for CPU '%s'", + crosstoolTopLabel, desiredCpu); + if (cppOptions.cppCompiler != null) { + errorMessage = errorMessage + " and compiler " + cppOptions.cppCompiler; + } if (ccToolchainLabel == null) { // If the cc_toolchain_suite does not contain entry for --cpu|--compiler (or only --cpu if // --compiler is not present) we select the toolchain by looping through all the toolchains @@ -193,15 +200,18 @@ public class CppConfigurationLoader implements ConfigurationFragmentFactory { CrosstoolConfigurationLoader.selectToolchain( file.getProto(), options, cpuTransformer.getTransformer()); ccToolchainLabel = toolchains.get(toolchain.getTargetCpu() + "|" + toolchain.getCompiler()); + if (!cppOptions.enableCcToolchainFromCrosstool) { + throw new InvalidConfigurationException( + errorMessage + + String.format( + ", you may want to add an entry for '%s|%s' into toolchains and " + + "toolchain_identifier '%s' into the corresponding cc_toolchain rule.", + toolchain.getTargetCpu(), + toolchain.getCompiler(), + toolchain.getToolchainIdentifier())); + } } if (ccToolchainLabel == null) { - String errorMessage = - String.format( - "cc_toolchain_suite '%s' does not contain a toolchain for CPU '%s'", - crosstoolTopLabel, desiredCpu); - if (cppOptions.cppCompiler != null) { - errorMessage = errorMessage + " and compiler " + cppOptions.cppCompiler; - } throw new InvalidConfigurationException(errorMessage); } } else { 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 49a11a16f4..4e4e863b29 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 @@ -862,6 +862,15 @@ public class CppOptions extends FragmentOptions { + "crosstool variable.") public boolean enableLinkoptsInUserLinkFlags; + @Option( + name = "experimental_enable_cc_toolchain_label_from_crosstool_proto", + defaultValue = "true", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS, OptionEffectTag.EAGERNESS_TO_EXIT}, + metadataTags = {OptionMetadataTag.EXPERIMENTAL}, + help = "If false, Bazel will not use the CROSSTOOL file to select the cc_toolchain label.") + public boolean enableCcToolchainFromCrosstool; + @Override public FragmentOptions getHost() { CppOptions host = (CppOptions) getDefault(); |