Move defines to CompilationAttributes

This is a NFC cleanup in preparation of migrating compile information
from ObjcProvider to CcCompilationContext.

1. The defines coming from dep providers seems to be processed twice
(once in ObjcCommon.addDeps(), and once in ObjcCommon.build()), so
remove the former.

2. Once (1) is done, we can just migrate defines() completely to
CompilationAttributes, and remove ObjcCommon.addDefines().

RELNOTES: None
PiperOrigin-RevId: 282399868
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
index 630c37b..443ece5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
@@ -47,6 +47,7 @@
     private final NestedSetBuilder<PathFragment> sdkIncludes = NestedSetBuilder.stableOrder();
     private final ImmutableList.Builder<String> copts = ImmutableList.builder();
     private final ImmutableList.Builder<String> linkopts = ImmutableList.builder();
+    private final ImmutableList.Builder<String> defines = ImmutableList.builder();
     private final NestedSetBuilder<CppModuleMap> moduleMapsForDirectDeps =
         NestedSetBuilder.stableOrder();
     private final NestedSetBuilder<SdkFramework> sdkFrameworks = NestedSetBuilder.stableOrder();
@@ -118,6 +119,12 @@
       return this;
     }
 
+    /** Adds defines. */
+    public Builder addDefines(Iterable<String> defines) {
+      this.defines.addAll(defines);
+      return this;
+    }
+
     /**
      * Adds clang module maps for direct dependencies of the rule. These are needed to generate
      * module maps.
@@ -186,6 +193,7 @@
           this.packageFragment,
           this.copts.build(),
           this.linkopts.build(),
+          this.defines.build(),
           this.moduleMapsForDirectDeps.build(),
           this.enableModules);
     }
@@ -257,6 +265,10 @@
       if (ruleContext.attributes().has("linkopts", Type.STRING_LIST)) {
         builder.addLinkopts(ruleContext.getExpander().withDataLocations().tokenized("linkopts"));
       }
+
+      if (ruleContext.attributes().has("defines", Type.STRING_LIST)) {
+        builder.addDefines(ruleContext.getExpander().withDataLocations().tokenized("defines"));
+      }
     }
 
     private static void addModuleOptionsFromRuleContext(Builder builder, RuleContext ruleContext) {
@@ -299,6 +311,7 @@
   private final Optional<PathFragment> packageFragment;
   private final ImmutableList<String> copts;
   private final ImmutableList<String> linkopts;
+  private final ImmutableList<String> defines;
   private final NestedSet<CppModuleMap> moduleMapsForDirectDeps;
   private final boolean enableModules;
 
@@ -313,6 +326,7 @@
       Optional<PathFragment> packageFragment,
       ImmutableList<String> copts,
       ImmutableList<String> linkopts,
+      ImmutableList<String> defines,
       NestedSet<CppModuleMap> moduleMapsForDirectDeps,
       boolean enableModules) {
     this.hdrs = hdrs;
@@ -325,6 +339,7 @@
     this.packageFragment = packageFragment;
     this.copts = copts;
     this.linkopts = linkopts;
+    this.defines = defines;
     this.moduleMapsForDirectDeps = moduleMapsForDirectDeps;
     this.enableModules = enableModules;
   }
@@ -411,6 +426,11 @@
     return this.linkopts;
   }
 
+  /** Returns the defines. */
+  public ImmutableList<String> defines() {
+    return this.defines;
+  }
+
   /**
    * Returns the clang module maps of direct dependencies of this rule. These are needed to generate
    * this rule's module map.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
index f14d0c1..4f0bab4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
@@ -162,9 +162,6 @@
           addAnyProviders(cppDeps, depCT, CcInfo.PROVIDER);
           if (isCcLibrary(dep)) {
             cppDepLinkParams.add(depCT.get(CcInfo.PROVIDER).getCcLinkingContext());
-            CcCompilationContext ccCompilationContext =
-                depCT.get(CcInfo.PROVIDER).getCcCompilationContext();
-            addDefines(ccCompilationContext.getDefines());
           }
         }
       }
@@ -342,6 +339,7 @@
         objcProvider
             .addAll(HEADER, filterFileset(attributes.hdrs()))
             .addAll(HEADER, filterFileset(attributes.textualHdrs()))
+            .addAll(DEFINE, attributes.defines())
             .addTransitiveAndPropagate(
                 INCLUDE, attributes.headerSearchPaths(buildConfiguration.getGenfilesFragment()))
             .addAll(INCLUDE, sdkIncludes)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
index 056a2bc..f20a9b1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
@@ -49,7 +49,6 @@
     return new ObjcCommon.Builder(ruleContext)
         .setCompilationAttributes(
             CompilationAttributes.Builder.fromRuleContext(ruleContext).build())
-        .addDefines(ruleContext.getExpander().withDataLocations().tokenized("defines"))
         .setCompilationArtifacts(CompilationSupport.compilationArtifacts(ruleContext))
         .addDeps(ruleContext.getPrerequisiteConfiguredTargetAndTargets("deps", Mode.TARGET))
         .addRuntimeDeps(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET))