aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar rosica <rosica@google.com>2018-07-23 06:25:01 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-23 06:26:14 -0700
commit2b9874d5fce0c465f827a176642ef1539f62be73 (patch)
treee13211653da922b83bf8406dd766f18d2b8ec257 /src/main/java/com/google/devtools/build/lib/rules/cpp
parent909bd08d6a9ec10a65ec199fe061eb8621907952 (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.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java9
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();