Allow setting supports_fission crosstool capability using feature
`supports_fission` can now be expressed using 'per_object_debug_info' feature (should be enabled for it to take effect).
This cl is a step towards https://github.com/bazelbuild/bazel/issues/5883. Also
see the rollout doc here:
https://docs.google.com/document/d/1uv4c1zag6KvdI31qdx8C6jiTognXPQrxgsUpVefm9fM/edit#.
Flag removing legacy behavior is https://github.com/bazelbuild/bazel/issues/6861
RELNOTES: None.
PiperOrigin-RevId: 226950450
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
index a548ae3..2876aba 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
@@ -27,6 +27,7 @@
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.Runfiles;
+import com.google.devtools.build.lib.analysis.Runfiles.Builder;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.LauncherFileWriteAction;
@@ -44,6 +45,8 @@
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.rules.cpp.CcInfo;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder;
import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder.Compression;
import com.google.devtools.build.lib.rules.java.JavaCcLinkParamsProvider;
@@ -760,10 +763,12 @@
JavaCommon common,
DeployArchiveBuilder deployArchiveBuilder,
DeployArchiveBuilder unstrippedDeployArchiveBuilder,
- Runfiles.Builder runfilesBuilder,
+ Builder runfilesBuilder,
List<String> jvmFlags,
JavaTargetAttributes.Builder attributesBuilder,
- boolean shouldStrip) {
+ boolean shouldStrip,
+ CcToolchainProvider ccToolchain,
+ FeatureConfiguration featureConfiguration) {
Artifact launcher = JavaHelper.launcherArtifactForTarget(this, ruleContext);
return new Pair<>(launcher, launcher);
}
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 5e444a3..b41322a 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
@@ -475,7 +475,7 @@
ruleContext,
ccCompilationOutputs,
linkingMode,
- ccToolchain.useFission(),
+ ccToolchain.shouldCreatePerObjectDebugInfo(featureConfiguration),
usePic,
ccLinkingOutputsBinary.getAllLtoArtifacts());
Artifact dwpFile =
@@ -484,14 +484,13 @@
// The debug package should include the dwp file only if it was explicitly requested.
Artifact explicitDwpFile = dwpFile;
- if (!ccToolchain.useFission()) {
+ if (!ccToolchain.shouldCreatePerObjectDebugInfo(featureConfiguration)) {
explicitDwpFile = null;
} else {
// For cc_test rules, include the dwp in the runfiles if Fission is enabled and the test was
// built statically.
if (TargetUtils.isTestRule(ruleContext.getRule())
&& linkingMode != Link.LinkingMode.DYNAMIC
- && ccToolchain.useFission()
&& cppConfiguration.buildTestDwpIsActivated()) {
filesToBuild = NestedSetBuilder.fromNestedSet(filesToBuild).add(dwpFile).build();
}
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 35a6464..51fea17 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
@@ -864,7 +864,7 @@
allFeatures.add("nonhost");
}
- if (toolchain.useFission()) {
+ if (toolchain.useFission() && !cppConfiguration.disableLegacyCrosstoolFields()) {
allFeatures.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO);
}
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 a747c40..5fdde9e 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
@@ -13,11 +13,13 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.java;
+import static com.google.devtools.build.lib.rules.cpp.CppRuleClasses.STATIC_LINKING_MODE;
import static com.google.devtools.build.lib.rules.java.DeployArchiveBuilder.Compression.COMPRESSED;
import static com.google.devtools.build.lib.rules.java.DeployArchiveBuilder.Compression.UNCOMPRESSED;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.devtools.build.lib.actions.Artifact;
@@ -40,6 +42,8 @@
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.CcCommon;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
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;
@@ -140,9 +144,18 @@
ruleContext.getConfiguration().getFragment(CppConfiguration.class);
CcToolchainProvider ccToolchain =
CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
- // TODO(b/64384912): Remove in favor of CcToolchainProvider
+ FeatureConfiguration featureConfiguration =
+ CcCommon.configureFeaturesOrReportRuleError(
+ ruleContext,
+ /* requestedFeatures= */ ImmutableSet.<String>builder()
+ .addAll(ruleContext.getFeatures())
+ .add(STATIC_LINKING_MODE)
+ .build(),
+ /* unsupportedFeatures= */ ruleContext.getDisabledFeatures(),
+ ccToolchain);
boolean stripAsDefault =
- ccToolchain.useFission() && cppConfiguration.getCompilationMode() == CompilationMode.OPT;
+ ccToolchain.shouldCreatePerObjectDebugInfo(featureConfiguration)
+ && cppConfiguration.getCompilationMode() == CompilationMode.OPT;
DeployArchiveBuilder unstrippedDeployArchiveBuilder = null;
if (stripAsDefault) {
unstrippedDeployArchiveBuilder = new DeployArchiveBuilder(semantics, ruleContext);
@@ -156,7 +169,9 @@
runfilesBuilder,
jvmFlags,
attributesBuilder,
- stripAsDefault);
+ stripAsDefault,
+ ccToolchain,
+ featureConfiguration);
Artifact launcher = launcherAndUnstrippedLauncher.first;
Artifact unstrippedLauncher = launcherAndUnstrippedLauncher.second;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
index 9daa1d1..481cf89 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
@@ -27,6 +27,7 @@
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.Runfiles;
+import com.google.devtools.build.lib.analysis.Runfiles.Builder;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.Substitution.ComputedSubstitution;
@@ -38,6 +39,8 @@
import com.google.devtools.build.lib.packages.Attribute.LabelListLateBoundDefault;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder.Compression;
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaOptimizationMode;
@@ -421,6 +424,8 @@
* @param jvmFlags the list of flags to pass to the JVM when running the Java binary (mutable).
* @param attributesBuilder the builder to construct the list of attributes of this target
* (mutable).
+ * @param ccToolchain to be used to build the launcher
+ * @param featureConfiguration to be used to configure the cc toolchain
* @return the launcher and unstripped launcher as an artifact pair. If shouldStrip is false, then
* they will be the same.
* @throws InterruptedException
@@ -430,10 +435,12 @@
final JavaCommon common,
DeployArchiveBuilder deployArchiveBuilder,
DeployArchiveBuilder unstrippedDeployArchiveBuilder,
- Runfiles.Builder runfilesBuilder,
+ Builder runfilesBuilder,
List<String> jvmFlags,
JavaTargetAttributes.Builder attributesBuilder,
- boolean shouldStrip)
+ boolean shouldStrip,
+ CcToolchainProvider ccToolchain,
+ FeatureConfiguration featureConfiguration)
throws InterruptedException, RuleErrorException;
/**
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 bfe247d..987c362 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
@@ -539,7 +539,7 @@
if (objcProvider.is(Flag.USES_OBJC)) {
activatedCrosstoolSelectables.add(CONTAINS_OBJC);
}
- if (toolchain.useFission()) {
+ if (toolchain.useFission() && !toolchain.getCppConfiguration().disableLegacyCrosstoolFields()) {
activatedCrosstoolSelectables.add(CppRuleClasses.PER_OBJECT_DEBUG_INFO);
}
diff --git a/src/main/protobuf/crosstool_config.proto b/src/main/protobuf/crosstool_config.proto
index 86a34a7..18e6cab 100644
--- a/src/main/protobuf/crosstool_config.proto
+++ b/src/main/protobuf/crosstool_config.proto
@@ -368,6 +368,7 @@
optional bool supports_incremental_linker = 41 [default = false];
// Legacy field, ignored by Bazel.
optional bool supports_normalizing_ar = 26 [default = false];
+ // Legacy field, use 'per_object_debug_info' feature instead.
optional bool supports_fission = 43 [default = false];
// Legacy field, ignored by Bazel.
optional bool supports_dsym = 51 [default = false];