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))
