Remove CROSSTOOL_LABEL label resolver from ObjcRuleClasses.

Make ObjcRuleClasses uses CppRuleClasses.ccToolchainAttribute label resolver.
Mark CppRuleClasses.ccToolchainAttribute with @AutoCodec annotation.

RELNOTES:none
PiperOrigin-RevId: 202479836
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
index 3cb9f29..eaadc7e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
@@ -39,9 +39,11 @@
 import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector.InstrumentationSpec;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault;
+import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault.Resolver;
 import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.OsUtils;
 
@@ -65,9 +67,13 @@
     return LabelLateBoundDefault.fromTargetConfiguration(
         CppConfiguration.class,
         env.getToolsLabel(CROSSTOOL_LABEL),
-        (rules, attributes, cppConfig) -> cppConfig.getCcToolchainRuleLabel());
+        CC_TOOLCHAIN_CONFIGURATION_RESOLVER);
   }
 
+  @AutoCodec
+  static final Resolver<CppConfiguration, Label> CC_TOOLCHAIN_CONFIGURATION_RESOLVER =
+      (rule, attributes, configuration) -> configuration.getCcToolchainRuleLabel();
+
   public static LabelLateBoundDefault<CppConfiguration> ccHostToolchainAttribute(
       RuleDefinitionEnvironment env) {
     return LabelLateBoundDefault.fromHostConfiguration(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 3a5db10..1d19107 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -122,10 +122,12 @@
 
   private final String toolsRepository;
   private final Label ccToolchainType;
+  private final LabelLateBoundDefault<CppConfiguration> ccToolchain;
 
   public J2ObjcAspect(RuleDefinitionEnvironment env) {
     this.toolsRepository = checkNotNull(env.getToolsRepository());
     this.ccToolchainType = CppRuleClasses.ccToolchainTypeAttribute(env);
+    this.ccToolchain = CppRuleClasses.ccToolchainAttribute(env);
   }
 
   /** Returns whether this aspect allows proto services to be generated from this proto rule */
@@ -214,7 +216,7 @@
                 .value(
                     getProtoToolchainLabel(
                         toolsRepository + "//tools/j2objc:j2objc_proto_toolchain")))
-        .add(attr(":j2objc_cc_toolchain", LABEL).value(ObjcRuleClasses.APPLE_TOOLCHAIN))
+        .add(attr(":j2objc_cc_toolchain", LABEL).value(ccToolchain))
         .build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 92cad34..7fe734a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -53,7 +53,6 @@
 import com.google.devtools.build.lib.rules.apple.AppleToolchain.RequiresXcodeConfigRule;
 import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
 import com.google.devtools.build.lib.rules.cpp.CcToolchain;
-import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap.UmbrellaHeaderStrategy;
 import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
 import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist;
@@ -147,28 +146,6 @@
   }
 
   /**
-   * Label of a filegroup that contains all crosstool and grte files for all configurations,
-   * as specified on the command-line.
-   *
-   * <p> Since this is the loading-phase default for the :cc_toolchain attribute of rules
-   * using the crosstool, it must contain in its transitive closure the computer value
-   * of that attribute under the default configuration.
-   */
-  public static final String CROSSTOOL_LABEL = "//tools/defaults:crosstool";
-
-  /**
-   * Late-bound attribute giving the CcToolchain for CROSSTOOL_LABEL.
-   *
-   * <p>TODO(cpeyser): Use AppleCcToolchain instead of CcToolchain once released.
-   */
-  @AutoCodec
-  public static final LabelLateBoundDefault<?> APPLE_TOOLCHAIN =
-      LabelLateBoundDefault.fromTargetConfiguration(
-          CppConfiguration.class,
-          Label.parseAbsoluteUnchecked(CROSSTOOL_LABEL),
-          (rule, attributes, cppConfig) -> cppConfig.getCcToolchainRuleLabel());
-
-  /**
    * Creates a new spawn action builder with apple environment variables set that are typically
    * needed by the apple toolchain. This should be used to start to build spawn actions that, in
    * order to run, require both a darwin architecture and a collection of environment variables
@@ -522,7 +499,9 @@
     @Override
     public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
       return builder
-          .add(attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL).value(APPLE_TOOLCHAIN))
+          .add(
+              attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL)
+                  .value(CppRuleClasses.ccToolchainAttribute(env)))
           .add(
               attr(CcToolchain.CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME, NODEP_LABEL)
                   .value(CppRuleClasses.ccToolchainTypeAttribute(env)))
@@ -955,7 +934,7 @@
           .add(
               attr(CHILD_CONFIG_ATTR, LABEL)
                   .cfg(splitTransitionProvider)
-                  .value(ObjcRuleClasses.APPLE_TOOLCHAIN))
+                  .value(CppRuleClasses.ccToolchainAttribute(env)))
           /* <!-- #BLAZE_RULE($apple_multiarch_rule).ATTRIBUTE(deps) -->
           The list of targets that are linked together to form the final binary.
           <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/