aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-12-20 07:08:27 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-20 07:16:47 -0800
commitb9c138ede77b305102526d32611f6964c8ee18b2 (patch)
treedbba44dd21aea41604ac48fc433ebb38b3a8955b /src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
parentfb0598878bf1b7fffe1ab7f310f705792fe47b95 (diff)
Remove CppConfiguration#supportsFission and #useFission. To do this, we:
(1) Remove configuration-level warnings arising from fission. (2) Move the setting of the "per_object_debug_info" feature from the configuration to FeatureConfiguration construction in the analysis phase. (3) Access the c++ toolchain in java_binary to decide on stripping. In order to migrate the c++ rules to platform-based toolchain resolution, we must remove all toolchain information from CppConfiguration. PiperOrigin-RevId: 179682420
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() : "";