Flip --incompatible_disable_expand_if_all_available_in_flag_set
FlagSets in the CROSSTOOL no longer accept expand_if_all_available field
Fixes #7008
RELNOTES: `--incompatible_disable_expand_if_all_available_in_flag_set` has been flipped (https://github.com/bazelbuild/bazel/issues/7008)
PiperOrigin-RevId: 234466411
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
index 08f8238..3e911bc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
@@ -41,6 +41,19 @@
/** This is where deprecated options go to die. */
public static class GraveyardOptions extends OptionsBase {
@Option(
+ name = "incompatible_disable_expand_if_all_available_in_flag_set",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
+ metadataTags = {
+ OptionMetadataTag.DEPRECATED,
+ OptionMetadataTag.INCOMPATIBLE_CHANGE,
+ OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+ },
+ help = "Deprecated no-op.")
+ public boolean disableExpandIfAllAvailableInFlagSet;
+
+ @Option(
name = "incompatible_dont_emit_static_libgcc",
oldName = "experimental_dont_emit_static_libgcc",
defaultValue = "true",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 8bfc0c8..ba7e48e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -1295,8 +1295,7 @@
withFeatureSetBuilder.add(withFeatureSetFromSkylark(withFeatureSetStruct));
}
- return new FlagSet(
- actions, ImmutableSet.of(), withFeatureSetBuilder.build(), flagGroupsBuilder.build());
+ return new FlagSet(actions, withFeatureSetBuilder.build(), flagGroupsBuilder.build());
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
index 523ce51..2747cb1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
@@ -184,8 +184,6 @@
throws EvalException {
CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
boolean disableLegacyCrosstoolFields = cppConfiguration.disableLegacyCrosstoolFields();
- boolean disableExpandIfAllAvailableInFlagSet =
- cppConfiguration.disableExpandIfAllAvailableInFlagSet();
ImmutableList.Builder<ActionConfig> actionConfigBuilder = ImmutableList.builder();
for (CToolchain.ActionConfig actionConfig : toolchain.getActionConfigList()) {
actionConfigBuilder.add(new ActionConfig(actionConfig));
@@ -314,26 +312,6 @@
}
}
- if (disableExpandIfAllAvailableInFlagSet) {
- toolchain
- .getFeatureList()
- .forEach(
- (f) -> {
- if (f.getFlagSetList().stream()
- .anyMatch((s) -> s.getExpandIfAllAvailableCount() != 0)) {
- ruleContext.ruleError(
- String.format(
- "Feature '%s' defines a flag_set with expand_if_all_available set. "
- + "This is disabled by "
- + "--incompatible_disable_expand_if_all_available_in_flag_set, "
- + "please migrate your CROSSTOOL (see "
- + "https://github.com/bazelbuild/bazel/issues/7008 "
- + "for migration instructions).",
- f.getName()));
- }
- });
- }
-
for (CompilationModeFlags flag : toolchain.getCompilationModeFlagsList()) {
switch (flag.getMode()) {
case OPT:
@@ -827,8 +805,7 @@
.addAllWithFeature(
flagSet.getWithFeatureSets().stream()
.map(withFeatureSet -> withFeatureSetToProto(withFeatureSet))
- .collect(ImmutableList.toImmutableList()))
- .addAllExpandIfAllAvailable(flagSet.getExpandIfAllAvailable());
+ .collect(ImmutableList.toImmutableList()));
if (!forActionConfig) {
flagSetBuilder.addAllAction(flagSet.getActions());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 6566790..f0bc623 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -516,7 +516,6 @@
@VisibleForSerialization
public static class FlagSet implements Serializable {
private final ImmutableSet<String> actions;
- private final ImmutableSet<String> expandIfAllAvailable;
private final ImmutableSet<WithFeatureSet> withFeatureSets;
private final ImmutableList<FlagGroup> flagGroups;
@@ -527,7 +526,6 @@
/** Constructs a FlagSet for the given set of actions. */
private FlagSet(CToolchain.FlagSet flagSet, ImmutableSet<String> actions) throws EvalException {
this.actions = actions;
- this.expandIfAllAvailable = ImmutableSet.copyOf(flagSet.getExpandIfAllAvailableList());
ImmutableSet.Builder<WithFeatureSet> featureSetBuilder = ImmutableSet.builder();
for (CToolchain.WithFeatureSet withFeatureSet : flagSet.getWithFeatureList()) {
featureSetBuilder.add(new WithFeatureSet(withFeatureSet));
@@ -543,11 +541,9 @@
@AutoCodec.Instantiator
public FlagSet(
ImmutableSet<String> actions,
- ImmutableSet<String> expandIfAllAvailable,
ImmutableSet<WithFeatureSet> withFeatureSets,
ImmutableList<FlagGroup> flagGroups) {
this.actions = actions;
- this.expandIfAllAvailable = expandIfAllAvailable;
this.withFeatureSets = withFeatureSets;
this.flagGroups = flagGroups;
}
@@ -559,11 +555,6 @@
Set<String> enabledFeatureNames,
@Nullable ArtifactExpander expander,
List<String> commandLine) {
- for (String variable : expandIfAllAvailable) {
- if (!variables.isAvailable(variable, expander)) {
- return;
- }
- }
if (!isWithFeaturesSatisfied(withFeatureSets, enabledFeatureNames)) {
return;
}
@@ -580,7 +571,6 @@
if (object instanceof FlagSet) {
FlagSet that = (FlagSet) object;
return Iterables.elementsEqual(actions, that.actions)
- && Iterables.elementsEqual(expandIfAllAvailable, that.expandIfAllAvailable)
&& Iterables.elementsEqual(withFeatureSets, that.withFeatureSets)
&& Iterables.elementsEqual(flagGroups, that.flagGroups);
}
@@ -589,17 +579,13 @@
@Override
public int hashCode() {
- return Objects.hash(actions, expandIfAllAvailable, withFeatureSets, flagGroups);
+ return Objects.hash(actions, withFeatureSets, flagGroups);
}
ImmutableSet<String> getActions() {
return actions;
}
- ImmutableSet<String> getExpandIfAllAvailable() {
- return expandIfAllAvailable;
- }
-
ImmutableSet<WithFeatureSet> getWithFeatureSets() {
return withFeatureSets;
}
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 5a614b4..804e5cb 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
@@ -548,10 +548,6 @@
return cppOptions.disableLegacyCrosstoolFields;
}
- public boolean disableExpandIfAllAvailableInFlagSet() {
- return cppOptions.disableExpandIfAllAvailableInFlagSet;
- }
-
public static String getLegacyCrosstoolFieldErrorMessage(String field) {
Preconditions.checkNotNull(field);
return field
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index 6e6415c..78fe766 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -744,20 +744,6 @@
public boolean removeCpuCompilerCcToolchainAttributes;
@Option(
- name = "incompatible_disable_expand_if_all_available_in_flag_set",
- defaultValue = "false",
- documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
- effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
- metadataTags = {
- OptionMetadataTag.INCOMPATIBLE_CHANGE,
- OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
- },
- help =
- "If true, Bazel will not allow specifying expand_if_all_available in flag_sets"
- + "(see https://github.com/bazelbuild/bazel/issues/7008 for migration instructions).")
- public boolean disableExpandIfAllAvailableInFlagSet;
-
- @Option(
name = "incompatible_disable_crosstool_file",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
@@ -893,7 +879,6 @@
host.doNotUseCpuTransformer = doNotUseCpuTransformer;
host.disableGenruleCcToolchainDependency = disableGenruleCcToolchainDependency;
host.disableDepsetInUserFlags = disableDepsetInUserFlags;
- host.disableExpandIfAllAvailableInFlagSet = disableExpandIfAllAvailableInFlagSet;
host.disableLegacyCcProvider = disableLegacyCcProvider;
host.removeCpuCompilerCcToolchainAttributes = removeCpuCompilerCcToolchainAttributes;
host.disableLegacyCrosstoolFields = disableLegacyCrosstoolFields;
diff --git a/src/main/protobuf/crosstool_config.proto b/src/main/protobuf/crosstool_config.proto
index ba8d143..a6dfb96 100644
--- a/src/main/protobuf/crosstool_config.proto
+++ b/src/main/protobuf/crosstool_config.proto
@@ -16,11 +16,11 @@
syntax = "proto2";
+package com.google.devtools.build.lib.view.config.crosstool;
+
// option java_api_version = 2;
option java_package = "com.google.devtools.build.lib.view.config.crosstool";
-package com.google.devtools.build.lib.view.config.crosstool;
-
// A description of a toolchain, which includes all the tools generally expected
// to be available for building C/C++ targets, based on the GNU C compiler.
//
@@ -148,17 +148,7 @@
// unconditionally for every action specified.
repeated WithFeatureSet with_feature = 3;
- // Deprecated (https://github.com/bazelbuild/bazel/issues/7008) - use
- // expand_if_all_available in flag_group
- //
- // A list of build variables that this feature set needs, but which are
- // allowed to not be set. If any of the build variables listed is not
- // set, the feature set will not be expanded.
- //
- // NOTE: Consider alternatives before using this; usually tools should
- // consistently create the same set of files, even if empty; use this
- // only for backwards compatibility with already existing behavior in tools
- // that are currently not worth changing.
+ // Legacy field, ignored by Bazel.
repeated string expand_if_all_available = 4;
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
index 9b06bb3..8f314b4 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
@@ -237,12 +237,12 @@
+ " name: 'thin_lto'"
+ " requires { feature: 'nonhost' }"
+ " flag_set {"
- + " expand_if_all_available: 'thinlto_param_file'"
+ " action: 'c++-link-executable'"
+ " action: 'c++-link-dynamic-library'"
+ " action: 'c++-link-nodeps-dynamic-library'"
+ " action: 'c++-link-static-library'"
+ " flag_group {"
+ + " expand_if_all_available: 'thinlto_param_file'"
+ " flag: 'thinlto_param_file=%{thinlto_param_file}'"
+ " }"
+ " }"
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java
index c9f7baf..feffd4f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java
@@ -1149,12 +1149,11 @@
" name: 'a'",
" flag_set {",
" action: 'c++-compile'",
- " expand_if_all_available: 'v'",
- " flag_group { flag: '%{v}' }",
+ " flag_group { expand_if_all_available: 'v' flag: '%{v}' }",
" }",
" flag_set {",
- " action: 'c++-compile'",
- " flag_group { flag: 'unconditional' }",
+ " action: 'c++-compile'",
+ " flag_group { flag: 'unconditional' }",
" }",
"}")
.getFeatureConfiguration(ImmutableSet.of("a"));
@@ -1171,19 +1170,20 @@
"feature {",
" name: 'a'",
" flag_set {",
- " action: 'c++-compile'",
- " expand_if_all_available: 'v'",
- " flag_group { flag: '%{v}' }",
+ " action: 'c++-compile'",
+ " flag_group { expand_if_all_available: 'v' flag: '%{v}' }",
" }",
" flag_set {",
- " action: 'c++-compile'",
- " expand_if_all_available: 'v'",
- " expand_if_all_available: 'w'",
- " flag_group { flag: '%{v}%{w}' }",
+ " action: 'c++-compile'",
+ " flag_group { ",
+ " expand_if_all_available: 'v'",
+ " expand_if_all_available: 'w'",
+ " flag: '%{v}%{w}' ",
+ " }",
" }",
" flag_set {",
- " action: 'c++-compile'",
- " flag_group { flag: 'unconditional' }",
+ " action: 'c++-compile'",
+ " flag_group { flag: 'unconditional' }",
" }",
"}")
.getFeatureConfiguration(ImmutableSet.of("a"));
@@ -1200,19 +1200,21 @@
"feature {",
" name: 'a'",
" flag_set {",
- " action: 'c++-compile'",
- " expand_if_all_available: 'v'",
- " flag_group { iterate_over: 'v' flag: '%{v}' }",
+ " action: 'c++-compile'",
+ " flag_group { expand_if_all_available: 'v' iterate_over: 'v' flag: '%{v}' }",
" }",
" flag_set {",
- " action: 'c++-compile'",
- " expand_if_all_available: 'v'",
- " expand_if_all_available: 'w'",
- " flag_group { iterate_over: 'v' flag: '%{v}%{w}' }",
+ " action: 'c++-compile'",
+ " flag_group { ",
+ " iterate_over: 'v'",
+ " expand_if_all_available: 'v'",
+ " expand_if_all_available: 'w'",
+ " flag: '%{v}%{w}'",
+ " }",
" }",
" flag_set {",
- " action: 'c++-compile'",
- " flag_group { flag: 'unconditional' }",
+ " action: 'c++-compile'",
+ " flag_group { flag: 'unconditional' }",
" }",
"}")
.getFeatureConfiguration(ImmutableSet.of("a"));
@@ -1232,15 +1234,16 @@
"feature {",
" name: 'a'",
" flag_set {",
- " action: 'c++-compile'",
- " expand_if_all_available: 'v'",
- " flag_group { iterate_over: 'v' flag: '%{v}' }",
+ " action: 'c++-compile'",
+ " flag_group { expand_if_all_available: 'v' iterate_over: 'v' flag: '%{v}' }",
" }",
" flag_set {",
- " action: 'c++-compile'",
- " expand_if_all_available: 'v'",
- " expand_if_all_available: 'w'",
- " flag_group { iterate_over: 'v' flag: '%{v}%{w}' }",
+ " action: 'c++-compile'",
+ " flag_group { ",
+ " expand_if_all_available: 'v'",
+ " expand_if_all_available: 'w'",
+ " iterate_over: 'v' flag: '%{v}%{w}'",
+ " }",
" }",
" flag_set {",
" action: 'c++-compile'",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
index cbbad1b..55a8fdd 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
@@ -267,32 +267,6 @@
+ "migrate your CROSSTOOL");
}
- @Test
- public void testDisablingExpandIfAllAvailable() throws Exception {
- reporter.removeHandler(failFastHandler);
- AnalysisMock.get()
- .ccSupport()
- .setupCrosstool(
- mockToolsConfig,
- "feature { ",
- " name: 'foo'",
- " flag_set { expand_if_all_available: 'bar' }",
- "}");
-
- scratch.file("a/BUILD", "cc_library(name='a', srcs=['a.cc'])");
-
- useConfiguration("--noincompatible_disable_expand_if_all_available_in_flag_set");
- getConfiguredTarget("//a");
- assertNoEvents();
-
- useConfiguration("--incompatible_disable_expand_if_all_available_in_flag_set");
- getConfiguredTarget("//a");
-
- assertContainsEvent(
- "defines a flag_set with expand_if_all_available set. This is disabled by "
- + "--incompatible_disable_expand_if_all_available_in_flag_set");
- }
-
/*
* Crosstools should load fine with or without 'gcov-tool'. Those that define 'gcov-tool'
* should also add a make variable.