diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
4 files changed, 17 insertions, 22 deletions
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 6b71ae01eb..b93a26bc22 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 @@ -72,6 +72,7 @@ import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; @@ -853,6 +854,15 @@ public final class CompilationSupport { return this; } + private NestedSet<Artifact> getGcovForObjectiveCIfNeeded() { + if (ruleContext.getConfiguration().isCodeCoverageEnabled() + && ruleContext.attributes().has(IosTest.OBJC_GCOV_ATTR, BuildType.LABEL)) { + return PrerequisiteArtifacts.nestedSet(ruleContext, IosTest.OBJC_GCOV_ATTR, Mode.HOST); + } else { + return NestedSetBuilder.emptySet(Order.STABLE_ORDER); + } + } + /** * Returns a provider that collects this target's instrumented sources as well as those of its * dependencies. @@ -875,6 +885,7 @@ public final class CompilationSupport { INSTRUMENTATION_SPEC, new ObjcCoverageMetadataCollector(), oFiles.build(), + getGcovForObjectiveCIfNeeded(), !TargetUtils.isTestRule(ruleContext.getTarget())); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java index 4e1560355f..3d2eb972ec 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java @@ -32,7 +32,6 @@ import com.google.devtools.build.lib.analysis.RunfilesSupport; import com.google.devtools.build.lib.analysis.actions.ExecutionRequirements; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; -import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs; @@ -53,7 +52,7 @@ public final class IosTest implements RuleConfiguredTargetFactory { // Attributes for IosTest rules. // Documentation on usage is in {@link IosTestRule@}. - static final String GCOV_ATTR = ":gcov"; + static final String OBJC_GCOV_ATTR = "$objc_gcov"; static final String DEVICE_ARG_ATTR = "ios_device_arg"; static final String IS_XCTEST_ATTR = "xctest"; static final String MEMLEAKS_DEP_ATTR = "$memleaks_dep"; @@ -198,6 +197,7 @@ public final class IosTest implements RuleConfiguredTargetFactory { ruleContext.getWorkspaceName(), ruleContext.getConfiguration().legacyExternalRunfiles()) .addRunfiles(ruleContext, RunfilesProvider.DEFAULT_RUNFILES); + NestedSetBuilder<Artifact> filesToBuildBuilder = NestedSetBuilder.<Artifact>stableOrder().addTransitive(filesToBuildSet); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java index 4292f4a9b0..4d6313b50b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java @@ -21,7 +21,6 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; import static com.google.devtools.build.lib.syntax.Type.BOOLEAN; import static com.google.devtools.build.lib.syntax.Type.STRING_LIST; -import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; @@ -29,7 +28,6 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Attribute.ComputedDefault; import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel; -import com.google.devtools.build.lib.packages.Attribute.LateBoundLabelList; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; import com.google.devtools.build.lib.packages.Rule; @@ -40,8 +38,6 @@ import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.BundlingRule; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; -import java.util.List; - /** * Rule definition for {@code ios_test} rule in Bazel. */ @@ -49,8 +45,6 @@ public class IosTestRule implements RuleDefinition { @Override public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) { - final ImmutableList<Label> gcov = - ImmutableList.of(env.getToolsLabel("//tools/objc:gcov")); final Label mcov = env.getToolsLabel("//tools/objc:mcov"); return builder .requiresConfigurationFragments( @@ -142,20 +136,10 @@ public class IosTestRule implements RuleDefinition { .add( attr(IosTest.MEMLEAKS_PLUGIN_ATTR, LABEL) .value(env.getToolsLabel("//tools/objc:memleaks_plugin"))) - .override( - attr(IosTest.GCOV_ATTR, LABEL_LIST) + .add( + attr(IosTest.OBJC_GCOV_ATTR, LABEL) .cfg(HOST) - .value( - new LateBoundLabelList<BuildConfiguration>(gcov) { - @Override - public List<Label> resolve( - Rule rule, AttributeMap attributes, BuildConfiguration configuration) { - if (!configuration.isCodeCoverageEnabled()) { - return ImmutableList.of(); - } - return gcov; - } - })) + .value(env.getToolsLabel("//tools/objc:gcov"))) .add( attr(IosTest.MCOV_TOOL_ATTR, LABEL) .cfg(HOST) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java index 7b911c5866..e813e19319 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java @@ -265,7 +265,7 @@ public class TestSupport { if (ruleContext.getConfiguration().isCodeCoverageEnabled()) { envBuilder.put("COVERAGE_GCOV_PATH", - ruleContext.getHostPrerequisiteArtifact(IosTest.GCOV_ATTR).getExecPathString()); + ruleContext.getHostPrerequisiteArtifact(IosTest.OBJC_GCOV_ATTR).getExecPathString()); envBuilder.put("APPLE_COVERAGE", "1"); } |