Move some error reporting from cc_toolchain to rules
This is unfortunate, confusing for the user, and less accurate than what the
original behavior was, but because cc_toolchain cannot access (currently, with
platforms enabled) the target configuration, there is nothing we can do other
than showing the error for the target.
https://github.com/bazelbuild/bazel/issues/6516
RELNOTES: None
PiperOrigin-RevId: 240345500
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 7e93b77..dfc5d04 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -256,6 +256,7 @@
ruleContext.checkSrcsSamePackage(true);
CcCommon common = new CcCommon(ruleContext);
+ common.reportInvalidOptions(ruleContext);
CcToolchainProvider ccToolchain = common.getToolchain();
ImmutableMap.Builder<String, String> toolchainMakeVariables = ImmutableMap.builder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 4427e70..4971c41 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -418,6 +418,35 @@
return getHeaders(ruleContext);
}
+ public void reportInvalidOptions(RuleContext ruleContext) {
+ reportInvalidOptions(ruleContext, cppConfiguration, ccToolchain);
+ }
+
+ public static void reportInvalidOptions(
+ RuleContext ruleContext, CppConfiguration cppConfiguration, CcToolchainProvider ccToolchain) {
+ if (cppConfiguration.fissionIsActiveForCurrentCompilationMode()
+ && !ccToolchain.supportsFission()) {
+ ruleContext.ruleWarning(
+ "Fission is not supported by this crosstool. Please use a "
+ + "supporting crosstool to enable fission");
+ }
+ if (cppConfiguration.buildTestDwpIsActivated()
+ && !(ccToolchain.supportsFission()
+ && cppConfiguration.fissionIsActiveForCurrentCompilationMode())) {
+ ruleContext.ruleWarning(
+ "Test dwp file requested, but Fission is not enabled. To generate a "
+ + "dwp for the test executable, use '--fission=yes' with a toolchain that supports "
+ + "Fission to build statically.");
+ }
+
+ if (cppConfiguration.getLibcTopLabel() != null && ccToolchain.getDefaultSysroot() == null) {
+ ruleContext.ruleError(
+ "The selected toolchain "
+ + ccToolchain.getToolchainIdentifier()
+ + " does not support setting --grte_top (it doesn't specify builtin_sysroot).");
+ }
+ }
+
/**
* Supply CC_FLAGS Make variable value computed from FeatureConfiguration. Appends them to
* original CC_FLAGS, so FeatureConfiguration can override legacy values.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
index 8520a21..83d08bf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
@@ -152,6 +152,7 @@
}
final CcCommon common = new CcCommon(ruleContext);
+ common.reportInvalidOptions(ruleContext);
CompilationInfo compilationInfo =
new CcCompilationHelper(
ruleContext,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index f4cbee7..cc08f65 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -120,6 +120,7 @@
}
final CcCommon common = new CcCommon(ruleContext);
+ common.reportInvalidOptions(ruleContext);
CcToolchainProvider ccToolchain = common.getToolchain();
CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index 3fdd39f..23aa991 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -986,5 +986,9 @@
public LicensesProvider getLicensesProvider() {
return licensesProvider;
}
+
+ public PathFragment getDefaultSysroot() {
+ return toolchainInfo.getDefaultSysroot();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
index 26c66e9..444aa7f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
@@ -446,7 +446,7 @@
fdoInputFile =
FdoInputFile.fromAbsolutePath(ccSkyframeSupportValue.getFdoZipPath().asFragment());
}
-
+
CppToolchainInfo toolchainInfo =
getCppToolchainInfo(
ruleContext,
@@ -610,7 +610,6 @@
Artifact prefetchHintsArtifact = getPrefetchHintsArtifact(prefetchHints, ruleContext);
- reportInvalidOptions(ruleContext, toolchainInfo);
return new CcToolchainProvider(
getToolchainForSkylark(toolchainInfo),
cppConfiguration,
@@ -757,31 +756,6 @@
}
}
- private static void reportInvalidOptions(RuleContext ruleContext, CppToolchainInfo toolchain) {
- CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
- if (cppConfiguration.fissionIsActiveForCurrentCompilationMode()
- && !toolchain.supportsFission()) {
- ruleContext.ruleWarning(
- "Fission is not supported by this crosstool. Please use a "
- + "supporting crosstool to enable fission");
- }
- if (cppConfiguration.buildTestDwpIsActivated()
- && !(toolchain.supportsFission()
- && cppConfiguration.fissionIsActiveForCurrentCompilationMode())) {
- ruleContext.ruleWarning(
- "Test dwp file requested, but Fission is not enabled. To generate a "
- + "dwp for the test executable, use '--fission=yes' with a toolchain that supports "
- + "Fission to build statically.");
- }
-
- if (cppConfiguration.getLibcTopLabel() != null && toolchain.getDefaultSysroot() == null) {
- ruleContext.ruleError(
- "The selected toolchain "
- + toolchain.getToolchainIdentifier()
- + " does not support setting --grte_top (it doesn't specify builtin_sysroot).");
- }
- }
-
@Nullable
private static CToolchain getToolchainFromAttributes(
RuleContext ruleContext,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java
index 474cd78..cd5c580 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java
@@ -96,6 +96,8 @@
}
}
+ CcCommon.reportInvalidOptions(ruleContext, cppConfiguration, ccToolchainProvider);
+
TemplateVariableInfo templateVariableInfo =
CcToolchain.createMakeVariableProvider(
ccToolchainProvider,