aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
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
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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java4
5 files changed, 33 insertions, 41 deletions
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 d48c9f91cb..132c277e82 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
@@ -644,6 +644,11 @@ public final class CcCommon {
allRequestedFeaturesBuilder.addAll(requestedFeatures);
allRequestedFeaturesBuilder.addAll(DEFAULT_ACTION_CONFIGS);
+
+ if (CppHelper.useFission(ruleContext.getFragment(CppConfiguration.class), toolchain)) {
+ allRequestedFeaturesBuilder.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO);
+ }
+
try {
FeatureConfiguration configuration =
toolchain.getFeatures().getFeatureConfiguration(allRequestedFeaturesBuilder.build());
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() : "";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index f50e314dbc..974551fd70 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -486,18 +486,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
return compilationMode;
}
- /**
- * Returns whether the toolchain supports "Fission" C++ builds, i.e. builds where compilation
- * partitions object code and debug symbols into separate output files.
- *
- * <p>Deprecated: Use {@link CcToolchainProvider#supportsFission()}
- */
- // TODO(b/64384912): Refactor out of reportInvalidOptions() and remove
- @Deprecated
- public boolean supportsFission() {
- return cppToolchainInfo.supportsFission();
- }
-
@SkylarkCallable(
name = "built_in_include_directories",
structField = true,
@@ -987,17 +975,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
return cppOptions.fissionModes.contains(compilationMode);
}
- /**
- * Returns true if Fission is specified for this build and supported by the crosstool.
- *
- * <p>Deprecated: Use {@link CppHelper#useFission(CppConfiguration, CcToolchainProvider)}
- */
- // TODO(b/64384912): Remove usage in java_binary and configurationEnabledFeatures()
- @Deprecated
- public boolean useFission() {
- return cppOptions.fissionModes.contains(compilationMode) && supportsFission();
- }
-
/** Returns true if --build_test_dwp is set on this build. */
public boolean buildTestDwpIsActivated() {
return cppOptions.buildTestDwp;
@@ -1237,20 +1214,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
"'--lipo=binary' can only be used with '--compilation_mode=opt' (or '-c opt')"));
}
- if (cppOptions.fissionModes.contains(compilationMode) && !supportsFission()) {
- reporter.handle(
- Event.warn(
- "Fission is not supported by this crosstool. Please use a supporting "
- + "crosstool to enable fission"));
- }
- if (cppOptions.buildTestDwp && !useFission()) {
- reporter.handle(
- Event.warn(
- "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 and build statically."));
- }
-
// This is an assertion check vs. user error because users can't trigger this state.
Verify.verify(
!(buildOptions.get(BuildConfiguration.Options.class).isHost && cppOptions.isFdo()),
@@ -1362,9 +1325,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
requestedFeatures.add(CppRuleClasses.GCC_COVERAGE_MAP_FORMAT);
}
}
- if (useFission()) {
- requestedFeatures.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO);
- }
return requestedFeatures.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
index 9af940b33f..78c4dfed16 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -40,6 +40,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.LinkerInput;
@@ -133,9 +134,11 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
CppConfiguration cppConfiguration = ruleContext.getConfiguration().getFragment(
CppConfiguration.class);
+ CcToolchainProvider ccToolchain =
+ CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
// TODO(b/64384912): Remove in favor of CcToolchainProvider
boolean stripAsDefault =
- cppConfiguration.useFission()
+ CppHelper.useFission(cppConfiguration, ccToolchain)
&& cppConfiguration.getCompilationMode() == CompilationMode.OPT;
Artifact launcher = semantics.getLauncher(ruleContext, common, deployArchiveBuilder,
runfilesBuilder, jvmFlags, attributesBuilder, stripAsDefault);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 4b528b92e1..7e4fa5ad73 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -98,6 +98,7 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.Var
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction;
+import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.CppLinkAction;
@@ -558,6 +559,9 @@ public class CompilationSupport {
if (objcProvider.is(Flag.USES_OBJC)) {
activatedCrosstoolSelectables.add(CONTAINS_OBJC);
}
+ if (CppHelper.useFission(ruleContext.getFragment(CppConfiguration.class), toolchain)) {
+ activatedCrosstoolSelectables.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO);
+ }
activatedCrosstoolSelectables.addAll(ruleContext.getFeatures());
try {