aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java20
1 files changed, 20 insertions, 0 deletions
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 583b1a112f..fa9753b0dd 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
@@ -493,6 +493,8 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
}
}
+ reportInvalidOptions(ruleContext, toolchainInfo);
+
CcToolchainProvider ccProvider =
new CcToolchainProvider(
getToolchainForSkylark(toolchainInfo),
@@ -578,6 +580,24 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
return builder.build();
}
+ private void reportInvalidOptions(RuleContext ruleContext, CppToolchainInfo toolchain) {
+ CppOptions options = ruleContext.getConfiguration().getOptions().get(CppOptions.class);
+ CppConfiguration config = ruleContext.getFragment(CppConfiguration.class);
+ if (options.fissionModes.contains(config.getCompilationMode())
+ && !toolchain.supportsFission()) {
+ ruleContext.ruleWarning(
+ "Fission is not supported by this crosstool. Please use a "
+ + "supporting crosstool to enable fission");
+ }
+ if (options.buildTestDwp
+ && !(toolchain.supportsFission() && config.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.");
+ }
+ }
+
private static String getSkylarkValueForTool(Tool tool, CppToolchainInfo cppToolchainInfo) {
PathFragment toolPath = cppToolchainInfo.getToolPathFragment(tool);
return toolPath != null ? toolPath.getPathString() : "";