BEGIN_PUBLIC
Remove non-test uses of the `--incompatible_enable_android_toolchain_resolution` flag.
END_PUBLIC
PiperOrigin-RevId: 616181796
Change-Id: I429db4c094ad0708df35b8a4baadd2dd2d582f19
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index f75e843..f67e5f4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -34,7 +34,6 @@
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.SpawnAction;
-import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -473,14 +472,7 @@
private static SpawnAction createAarNativeLibsFilterActions(
RuleContext ruleContext, Artifact aar, Artifact outputZip) throws RuleErrorException {
- BuildConfigurationValue configuration = ruleContext.getConfiguration();
-
String cpu = null;
- AndroidConfiguration androidConfiguration =
- configuration.getFragment(AndroidConfiguration.class);
-
- if (androidConfiguration.incompatibleUseToolchainResolution()) {
-
// Maps a CPU name as used in an AAR to the corresponding CPU constraint.
ImmutableMap<String, ConstraintValueInfo> aarCpuToConstraint =
ImmutableMap.of(
@@ -509,10 +501,6 @@
ruleContext.getLabel()));
}
- } else {
- cpu = configuration.getCpu();
- }
-
SpawnAction.Builder actionBuilder = new SpawnAction.Builder();
ParamFileInfo paramFileInfo = getParamFileInfo(ruleContext);
modifyExecutionInfo(ruleContext, actionBuilder);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 91d2dfa..bfae5e2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -1144,7 +1144,6 @@
private final Label legacyMainDexListGenerator;
private final Label optimizingDexer;
private final boolean disableInstrumentationManifestMerging;
- private final boolean incompatibleUseToolchainResolution;
private final boolean hwasan;
private final boolean getJavaResourcesFromOptimizedJar;
@@ -1204,7 +1203,6 @@
this.legacyMainDexListGenerator = options.legacyMainDexListGenerator;
this.optimizingDexer = options.optimizingDexer;
this.disableInstrumentationManifestMerging = options.disableInstrumentationManifestMerging;
- this.incompatibleUseToolchainResolution = options.incompatibleUseToolchainResolution;
this.hwasan = options.hwasan;
this.getJavaResourcesFromOptimizedJar = options.getJavaResourcesFromOptimizedJar;
@@ -1436,11 +1434,6 @@
}
@Override
- public boolean incompatibleUseToolchainResolution() {
- return incompatibleUseToolchainResolution;
- }
-
- @Override
public boolean isHwasan() {
return hwasan;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPlatformsTransition.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPlatformsTransition.java
index c6ccf2e..63cd625 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPlatformsTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPlatformsTransition.java
@@ -58,11 +58,6 @@
@Override
public BuildOptions patch(BuildOptionsView options, EventHandler eventHandler) {
AndroidConfiguration.Options androidOptions = options.get(AndroidConfiguration.Options.class);
- if (!androidOptions.incompatibleUseToolchainResolution) {
- // No change.
- return options.underlying();
- }
-
BuildOptionsView newOptions = options.clone();
PlatformOptions newPlatformOptions = newOptions.get(PlatformOptions.class);
// Set the value of --platforms for this target and its dependencies.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
index e6f532c..f8de3fc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
@@ -19,7 +19,6 @@
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -116,45 +115,26 @@
/**
* Returns the Android SDK associated with the rule being analyzed or null if the Android SDK is
* not specified.
- *
- * <p>First tries to read from toolchains if
- * --incompatible_enable_android_toolchain_resolution=true, else, uses the legacy attribute..
*/
@Nullable
public static AndroidSdkProvider fromRuleContext(RuleContext ruleContext)
throws RuleErrorException {
// Determine the toolchain type.
Label toolchainType = getToolchainTypeFromAttribute(ruleContext);
- return fromRuleContext(ruleContext, ":android_sdk", toolchainType);
+ return fromRuleContext(ruleContext, toolchainType);
}
/**
* Returns the Android SDK associated with the rule being analyzed or null if the Android SDK is
* not specified.
- *
- * <p>First tries to read from toolchains if
- * --incompatible_enable_android_toolchain_resolution=true, else, uses the legacy attribute..
*/
@Nullable
public static AndroidSdkProvider fromRuleContext(
- RuleContext ruleContext, String sdkAttribute, @Nullable Label toolchainType)
- throws RuleErrorException {
- BuildConfigurationValue configuration = ruleContext.getConfiguration();
- if (configuration == null
- || !configuration.hasFragment(AndroidConfiguration.class)
- || !configuration
- .getFragment(AndroidConfiguration.class)
- .incompatibleUseToolchainResolution()) {
- // Not using toolchain resolution, so use the legacy attribute-based lookup.
- return ruleContext.getPrerequisite(sdkAttribute, AndroidSdkProvider.PROVIDER);
- }
-
- // Check if toolchain resolution is enabled.
+ RuleContext ruleContext, @Nullable Label toolchainType) throws RuleErrorException {
if (ruleContext.getToolchainContext() == null) {
ruleContext.ruleError(
String.format(
- "'%s' rule '%s' requested sdk toolchain resolution via"
- + " --incompatible_enable_android_toolchain_resolution but doesn't use"
+ "'%s' rule '%s' requested sdk toolchain resolution but doesn't use"
+ " toolchain resolution.",
ruleContext.getRuleClassNameForLogging(), ruleContext.getLabel()));
return null;
@@ -163,8 +143,7 @@
if (toolchainType == null) {
ruleContext.ruleError(
String.format(
- "'%s' rule '%s' requested sdk toolchain resolution via"
- + " --incompatible_enable_android_toolchain_resolution but doesn't have"
+ "'%s' rule '%s' requested sdk toolchain resolution but doesn't have"
+ " toolchain type attribute '%s'.",
ruleContext.getRuleClassNameForLogging(),
ruleContext.getLabel(),
@@ -176,8 +155,7 @@
if (info == null) {
ruleContext.ruleError(
String.format(
- "'%s' rule '%s' requested sdk toolchain resolution via"
- + " --incompatible_enable_android_toolchain_resolution but doesn't have a"
+ "'%s' rule '%s' requested sdk toolchain resolution but doesn't have a"
+ " toolchain for '%s'.",
ruleContext.getRuleClassNameForLogging(), ruleContext.getLabel(), toolchainType));
return null;
@@ -210,8 +188,7 @@
throw ruleContext.throwWithRuleError(
String.format(
"'%s' rule '%s' requested an android sdk via toolchain resolution but hasn't set an"
- + " appropriate --android_platforms value: Either set"
- + " --noincompatible_enable_android_toolchain_resolution or --android_platforms.",
+ + " appropriate --android_platforms value.",
ruleContext.getRuleClassNameForLogging(), ruleContext.getLabel()));
}
@@ -220,16 +197,6 @@
@Nullable
private static Label getToolchainTypeFromAttribute(RuleContext ruleContext) {
- BuildConfigurationValue configuration = ruleContext.getConfiguration();
- if (configuration == null
- || !configuration.hasFragment(AndroidConfiguration.class)
- || !configuration
- .getFragment(AndroidConfiguration.class)
- .incompatibleUseToolchainResolution()) {
- // Not using toolchain resolution, so return null.
- return null;
- }
-
Type<Label> depType =
ruleContext.getRule().getRuleClassObject().isStarlark()
? BuildType.LABEL
@@ -240,13 +207,7 @@
/** Throws an error if the Android SDK cannot be found. */
public static void verifyPresence(RuleContext ruleContext) throws RuleErrorException {
if (fromRuleContext(ruleContext) == null) {
- throw ruleContext.throwWithRuleError(
- ruleContext
- .getConfiguration()
- .getFragment(AndroidConfiguration.class)
- .incompatibleUseToolchainResolution()
- ? "No Android SDK found."
- : "No Android SDK found. Use the --android_sdk command line option to specify one.");
+ throw ruleContext.throwWithRuleError("No Android SDK found.");
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSplitTransition.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSplitTransition.java
index 0cc6038..8794a70 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSplitTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSplitTransition.java
@@ -82,27 +82,6 @@
AndroidConfiguration.Options androidOptions =
buildOptions.get(AndroidConfiguration.Options.class);
- /*
- * The intended order of checks is:
- * - When --incompatible_enable_android_toolchain_resolution is set:
- * - --android_platforms
- * - Split using the values of this flag as the target platform
- * - If this is unset, use the first value from --platforms.
- * - If this isn't a valid Android platform, an error will be thrown during the build.
- * - Fall back to legacy flag logic:
- * - --fat_apk_cpus
- * - Split using the values of this flag as --cpu
- * - If this is unset, fall though.
- * - --android_cpu
- * - Don't split, just use the value of this flag as --cpu
- * - This will not update the output path to include "-android".
- * - If this is unset, fall though.
- * - Default
- * - This will not update the output path to include "-android".
- * - Don't split, using the same previously set --cpu value.
- */
- if (androidOptions.incompatibleUseToolchainResolution) {
- // Always use --android_platforms when toolchain resolution is enabled.
List<Label> platformsToSplit = androidOptions.androidPlatforms;
if (platformsToSplit.isEmpty()) {
// If --android_platforms is unset, instead use only the first value from --platforms.
@@ -111,16 +90,6 @@
platformsToSplit = ImmutableList.of(targetPlatform);
}
return handleAndroidPlatforms(buildOptions, androidOptions, platformsToSplit);
- }
-
- // Fall back to the legacy flags.
- if (!androidOptions.fatApkCpus.isEmpty()) {
- return handleFatApkCpus(buildOptions, androidOptions);
- } else if (!androidOptions.cpu.isEmpty()) {
- return handleAndroidCpu(buildOptions, androidOptions);
- } else {
- return handleDefaultSplit(buildOptions, buildOptions.get(CoreOptions.class).cpu);
- }
}
private void addNonCpuSplits(
@@ -177,56 +146,6 @@
return result.buildOrThrow();
}
- /** Returns a single-split transition that uses the "--cpu" and does not change any flags. */
- private ImmutableMap<String, BuildOptions> handleDefaultSplit(
- BuildOptionsView buildOptions, String cpu) {
- // Avoid a clone when nothing changes.
- ImmutableMap.Builder<String, BuildOptions> result = ImmutableMap.builder();
- result.put(cpu, buildOptions.underlying());
- addNonCpuSplits(result, cpu, buildOptions);
- return result.buildOrThrow();
- }
-
- /**
- * Returns a transition that sets "--cpu" to the value of "--android_cpu" and sets other C++ flags
- * based on the corresponding Android flags.
- */
- private ImmutableMap<String, BuildOptions> handleAndroidCpu(
- BuildOptionsView buildOptions, AndroidConfiguration.Options androidOptions) {
- BuildOptionsView splitOptions = buildOptions.clone();
- splitOptions.get(CoreOptions.class).cpu = androidOptions.cpu;
- setCcFlagsFromAndroid(androidOptions, splitOptions);
- // Ensure platforms aren't set so that platform mapping can take place.
- splitOptions.get(PlatformOptions.class).platforms = ImmutableList.of();
- return handleDefaultSplit(splitOptions, androidOptions.cpu);
- }
-
- /**
- * Returns a multi-split transition that sets "--cpu" with the values of "--fat_apk_cpu" and sets
- * other C++ flags based on the corresponding Android flags.
- */
- private ImmutableMap<String, BuildOptions> handleFatApkCpus(
- BuildOptionsView buildOptions, AndroidConfiguration.Options androidOptions) {
- ImmutableMap.Builder<String, BuildOptions> result = ImmutableMap.builder();
- for (String cpu : ImmutableSortedSet.copyOf(androidOptions.fatApkCpus)) {
- BuildOptionsView splitOptions = buildOptions.clone();
- // Disable fat APKs for the child configurations.
- splitOptions.get(AndroidConfiguration.Options.class).fatApkCpus = ImmutableList.of();
- splitOptions.get(AndroidConfiguration.Options.class).androidPlatforms = ImmutableList.of();
-
- // Set the cpu & android_cpu.
- // TODO(bazel-team): --android_cpu doesn't follow --cpu right now; it should.
- splitOptions.get(AndroidConfiguration.Options.class).cpu = cpu;
- splitOptions.get(CoreOptions.class).cpu = cpu;
- setCcFlagsFromAndroid(androidOptions, splitOptions);
- // Ensure platforms aren't set so that platform mapping can take place.
- splitOptions.get(PlatformOptions.class).platforms = ImmutableList.of();
- result.put(cpu, splitOptions.underlying());
- addNonCpuSplits(result, cpu, splitOptions);
- }
- return result.buildOrThrow();
- }
-
private void setCcFlagsFromAndroid(
AndroidConfiguration.Options androidOptions, BuildOptionsView newOptions) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
index 2cb537a..34f0cbc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
@@ -211,16 +211,7 @@
*/
private static ImmutableList<Artifact> getPlatformBasedToolchainJars(RuleContext ruleContext)
throws RuleErrorException {
- if (!ruleContext
- .getConfiguration()
- .getFragment(AndroidConfiguration.class)
- .incompatibleUseToolchainResolution()) {
- // Legacy toolchains: toolchain .jars are dexed by propagating the aspect down the
- // ":android_sdk" attribute. That makes them transitive deps, so no special logic is needed
- // in the parent target to process them.
- return ImmutableList.of();
-
- } else if (!ruleContext.attributes().has(":android_sdk")) {
+ if (!ruleContext.attributes().has(":android_sdk")) {
// If we're dexing a non-Android target (like a java_library), there's no Android toolchain to
// include.
return ImmutableList.of();
@@ -488,8 +479,7 @@
@Nullable
private Artifact getAndroidJar(RuleContext ruleContext) throws RuleErrorException {
Label toolchainType = Label.parseCanonicalUnchecked(toolsRepository + sdkToolchainLabel);
- AndroidSdkProvider androidSdk =
- AndroidSdkProvider.fromRuleContext(ruleContext, ":dex_archive_android_sdk", toolchainType);
+ AndroidSdkProvider androidSdk = AndroidSdkProvider.fromRuleContext(ruleContext, toolchainType);
if (androidSdk == null) {
// If the Android SDK is null, we don't have a valid toolchain. Expect a rule error reported
// from AndroidSdkProvider.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
index 8555f1f..1f936d0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
@@ -51,13 +51,8 @@
BuildConfigurationValue configuration = dep.getConfiguration();
AndroidConfiguration androidConfiguration =
configuration.getFragment(AndroidConfiguration.class);
- String name;
- if (androidConfiguration.incompatibleUseToolchainResolution()) {
- name = configuration.getFragment(PlatformConfiguration.class).getTargetPlatform().getName();
- } else {
- // Legacy builds use the CPU as the name.
- name = androidConfiguration.getCpu();
- }
+ String name =
+ configuration.getFragment(PlatformConfiguration.class).getTargetPlatform().getName();
if (androidConfiguration.isHwasan()) {
name += "-hwasan";
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
index b4290fa..cc39776 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidConfigurationApi.java
@@ -250,13 +250,6 @@
documented = false)
String getOutputDirectoryName();
- @StarlarkMethod(
- name = "incompatible_use_toolchain_resolution",
- structField = true,
- doc = "",
- documented = false)
- boolean incompatibleUseToolchainResolution();
-
@StarlarkMethod(name = "hwasan", structField = true, doc = "", documented = false)
boolean isHwasan();
diff --git a/src/main/starlark/builtins_bzl/common/builtin_exec_platforms.bzl b/src/main/starlark/builtins_bzl/common/builtin_exec_platforms.bzl
index f25dc62..0460aee 100644
--- a/src/main/starlark/builtins_bzl/common/builtin_exec_platforms.bzl
+++ b/src/main/starlark/builtins_bzl/common/builtin_exec_platforms.bzl
@@ -111,7 +111,6 @@
bazel_fragments["AndroidConfiguration.Options"] = fragment(
propagate = [
"//command_line_option:android_sdk",
- "//command_line_option:incompatible_enable_android_toolchain_resolution",
"//command_line_option:incompatible_android_platforms_transition_updated_affected",
"//command_line_option:desugar_for_android",
"//command_line_option:desugar_java8_libs",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java
index 41f0144..4e80fef9 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java
@@ -237,6 +237,10 @@
.isAssignableFrom(boolean.class))
.filter(
o -> !o.getValue().getDefinition().getField().isAnnotationPresent(Deprecated.class))
+ // TODO: b/328442047 - Remove this when the flag is removed.
+ .filter(
+ // Skipping this explicitly because it is a no-op but can't be removed yet.
+ o -> !o.getKey().equals("incompatible_enable_android_toolchain_resolution"))
.collect(toImmutableMap(k -> k.getKey(), v -> v.getValue()));
// Verify all "--incompatible_*" options also have the INCOMPATIBLE_CHANGE metadata tag.
diff --git a/tools/android/android_genrule.bzl b/tools/android/android_genrule.bzl
index 1832a3f..23790d5 100644
--- a/tools/android/android_genrule.bzl
+++ b/tools/android/android_genrule.bzl
@@ -15,8 +15,6 @@
"""Allows building Android-specific dependencies with the correct configuration."""
def _android_transition_impl(settings, attr):
- if not settings["//command_line_option:incompatible_enable_android_toolchain_resolution"]:
- return {}
return {
"//command_line_option:platforms": str(attr.platform),
"//command_line_option:android_platforms": str(attr.platform),
@@ -24,9 +22,7 @@
_android_transition = transition(
implementation = _android_transition_impl,
- inputs = [
- "//command_line_option:incompatible_enable_android_toolchain_resolution",
- ],
+ inputs = [],
outputs = [
"//command_line_option:platforms",
"//command_line_option:android_platforms",