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",