Implement coverage support for experimental_objc_library

--
PiperOrigin-RevId: 149997687
MOS_MIGRATED_REVID=149997687
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index a8427fa..d5b6c85 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -1232,7 +1232,14 @@
   }
 
   @Override
-  public String getMnemonic() { return "CppCompile"; }
+  public String getMnemonic() {
+    if (CppFileTypes.OBJC_SOURCE.matches(sourceFile.getExecPath())
+        || CppFileTypes.OBJCPP_SOURCE.matches(sourceFile.getExecPath())) {
+      return "ObjcCompile";
+    } else {
+      return "CppCompile";
+    }
+  }
 
   @Override
   public String describeKey() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
index 81cb9ed..612d81d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -74,6 +74,11 @@
   private static final String OBJC_MODULE_FEATURE_NAME = "use_objc_modules";
   private static final String NO_ENABLE_MODULES_FEATURE_NAME = "no_enable_modules";
   private static final String DEAD_STRIP_FEATURE_NAME = "dead_strip";
+  private static final String RUN_COVERAGE_FEATURE_NAME = "run_coverage";
+  /** Produce artifacts for coverage in llvm coverage mapping format. */
+  private static final String LLVM_COVERAGE_MAP_FORMAT = "llvm_coverage_map_format";
+  /** Produce artifacts for coverage in gcc coverage mapping format. */
+  private static final String GCC_COVERAGE_MAP_FORMAT = "gcc_coverage_map_format";
 
   private static final Iterable<String> ACTIVATED_ACTIONS =
       ImmutableList.of(
@@ -376,6 +381,14 @@
         && ruleContext.getPrerequisiteArtifact("pch", Mode.TARGET) != null) {
       activatedCrosstoolSelectables.add("pch");
     }
+    if (configuration.isCodeCoverageEnabled()) {
+      activatedCrosstoolSelectables.add(RUN_COVERAGE_FEATURE_NAME);
+    }
+    if (configuration.isLLVMCoverageMapFormatEnabled()) {
+      activatedCrosstoolSelectables.add(LLVM_COVERAGE_MAP_FORMAT);
+    } else {
+      activatedCrosstoolSelectables.add(GCC_COVERAGE_MAP_FORMAT);
+    }
     return configuration
         .getFragment(CppConfiguration.class)
         .getFeatures()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
index b58e842..3a7ef77 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
@@ -24,6 +24,7 @@
 import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
 import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
 import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
+import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
 import com.google.devtools.build.lib.syntax.Type;
 
 /** Implementation for experimental_objc_library. */
@@ -86,6 +87,8 @@
         .addProvider(ObjcProvider.class, common.getObjcProvider())
         .addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider)
         .addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider)
+        .addProvider(InstrumentedFilesProvider.class,
+            compilationSupport.getInstrumentedFilesProvider(common))
         .addProvider(
             CcLinkParamsProvider.class,
             new CcLinkParamsProvider(new ObjcLibraryCcLinkParamsStore(common)))