diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 9ebce70..416136d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -1681,6 +1681,47 @@
     return Optional.fromNullable(pchHdr);
   }
 
+  /**
+   * Registers an action that will generate a clang module map for this target, using the hdrs
+   * attribute of this rule.
+   */
+  public CompilationSupport registerGenerateModuleMapAction(
+      CompilationArtifacts compilationArtifacts) throws RuleErrorException, InterruptedException {
+    // TODO(bazel-team): Include textual headers in the module map when Xcode 6 support is
+    // dropped.
+    // TODO(b/32225593): Include private headers in the module map.
+    CcCompilationHelper ccCompilationHelper =
+        new CcCompilationHelper(
+            ruleContext,
+            ruleContext,
+            ruleContext.getLabel(),
+            CppHelper.getGrepIncludes(ruleContext),
+            cppSemantics,
+            getFeatureConfigurationForSwiftModuleMap(
+                ruleContext, toolchain, buildConfiguration, cppSemantics),
+            CcCompilationHelper.SourceCategory.CC_AND_OBJC,
+            toolchain,
+            toolchain.getFdoContext(),
+            buildConfiguration,
+            TargetUtils.getExecutionInfo(
+                ruleContext.getRule(), ruleContext.isAllowTagsPropagation()),
+            /* shouldProcessHeaders= */ false);
+
+    ImmutableSortedSet<Artifact> publicHeaders =
+        Stream.concat(
+                attributes.hdrs().toList().stream(),
+                compilationArtifacts.getAdditionalHdrs().toList().stream())
+            .collect(toImmutableSortedSet(naturalOrder()));
+
+    CppModuleMap moduleMap = intermediateArtifacts.swiftModuleMap();
+
+    ccCompilationHelper.setCppModuleMap(moduleMap).addPublicHeaders(publicHeaders);
+
+    ccCompilationHelper.compile(ruleContext);
+
+    return this;
+  }
+
   /** Registers an action to generate an extra clang module map. */
   private CompilationSupport generateExtraModuleMap(
       CppModuleMap moduleMap,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java
index 0c3a230..af23d4a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java
@@ -39,8 +39,11 @@
  * linking into the final application bundle. See {@link J2ObjcLibraryBaseRule} for details.
  */
 public class J2ObjcLibrary implements RuleConfiguredTargetFactory {
+  private final CppSemantics cppSemantics;
 
-  protected J2ObjcLibrary(CppSemantics cppSemantics) {}
+  protected J2ObjcLibrary(CppSemantics cppSemantics) {
+    this.cppSemantics = cppSemantics;
+  }
 
   public static final String NO_ENTRY_CLASS_ERROR_MSG =
       "Entry classes must be specified when flag --compilation_mode=opt is on in order to"
@@ -59,6 +62,7 @@
         .addDirectCcCompilationContexts(
             j2objcCcInfos.stream().map(J2ObjcCcInfo::getCcInfo).collect(toList()))
         .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext))
+        .setHasModuleMap()
         .build();
   }
 
@@ -83,6 +87,18 @@
         J2ObjcMappingFileProvider.union(
             ruleContext.getPrerequisites("deps", J2ObjcMappingFileProvider.PROVIDER));
 
+    CompilationArtifacts moduleMapCompilationArtifacts =
+        new CompilationArtifacts.Builder()
+            .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext))
+            .build();
+
+    new CompilationSupport.Builder(ruleContext, cppSemantics)
+        .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext))
+        .doNotUsePch()
+        .build()
+        .registerGenerateModuleMapAction(moduleMapCompilationArtifacts)
+        .validateAttributes();
+
     return new RuleConfiguredTargetBuilder(ruleContext)
         .setFilesToBuild(NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER))
         .add(RunfilesProvider.class, RunfilesProvider.EMPTY)
