diff options
author | 2018-02-23 02:59:04 -0800 | |
---|---|---|
committer | 2018-02-23 03:01:11 -0800 | |
commit | f5d749efef2b13a8191d09f4152eb0bff69d65d2 (patch) | |
tree | c62de2f52a8bad9e714c40edaf6aa04511ef232b /src/main/java/com/google/devtools | |
parent | c0faa4d480253ce51a239b8059659f6174c2380c (diff) |
Move enabling of coverage related features to CcCommon
Move dealing with coverage related features from CppConfiguration.configurationEnabledFeatures to CcCommon.configureFeatures.
Remove configurationEnabledFeatures.
RELNOTES: None.
PiperOrigin-RevId: 186744803
Diffstat (limited to 'src/main/java/com/google/devtools')
6 files changed, 38 insertions, 61 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index 2be679614c..316791dee5 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -246,16 +246,6 @@ public final class RuleContext extends TargetContext Set<String> ruleDisabledFeatures = Sets.union(ruleDisabled, Sets.difference(packageDisabled, ruleEnabled)); allDisabledFeatures.addAll(Sets.union(ruleDisabledFeatures, globallyDisabled)); - for (ImmutableMap.Entry<Class<? extends Fragment>, Fragment> entry : - getConfiguration().getAllFragments().entrySet()) { - if (isLegalFragment(entry.getKey())) { - globallyEnabled.addAll( - entry - .getValue() - .configurationEnabledFeatures( - this, ImmutableSortedSet.copyOf(allDisabledFeatures))); - } - } Set<String> packageFeatures = Sets.difference(Sets.union(globallyEnabled, packageEnabled), packageDisabled); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index 3bec3daa6b..64ba290c29 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -37,7 +37,6 @@ import com.google.devtools.build.lib.actions.ArtifactRoot; import com.google.devtools.build.lib.actions.BuildConfigurationInterface; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; -import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.FileWriteAction; import com.google.devtools.build.lib.analysis.config.transitions.ComposingPatchTransition; import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; @@ -199,12 +198,6 @@ public class BuildConfiguration implements BuildConfigurationInterface { return ImmutableMap.of(); } - /** Return set of features enabled by this configuration. */ - public ImmutableSet<String> configurationEnabledFeatures( - RuleContext ruleContext, ImmutableSet<String> disabledFeatures) { - return ImmutableSet.of(); - } - /** * @return false if a Fragment understands that it won't be able to work with a given strategy, * or true otherwise. @@ -703,23 +696,6 @@ public class BuildConfiguration implements BuildConfigurationInterface { public Label coverageReportGenerator; @Option( - name = "experimental_use_llvm_covmap", - defaultValue = "false", - category = "experimental", - documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS, - effectTags = { - OptionEffectTag.CHANGES_INPUTS, - OptionEffectTag.AFFECTS_OUTPUTS, - OptionEffectTag.LOADING_AND_ANALYSIS - }, - metadataTags = { OptionMetadataTag.EXPERIMENTAL }, - help = - "If specified, Bazel will generate llvm-cov coverage map information rather than " - + "gcov when collect_code_coverage is enabled." - ) - public boolean useLLVMCoverageMapFormat; - - @Option( name = "build_runfile_manifests", defaultValue = "true", category = "strategy", @@ -1906,10 +1882,6 @@ public class BuildConfiguration implements BuildConfigurationInterface { return options.experimentalJavaCoverage; } - public boolean isLLVMCoverageMapFormatEnabled() { - return options.useLLVMCoverageMapFormat; - } - /** If false, AnalysisEnvironment doesn't register any actions created by the ConfiguredTarget. */ public boolean isActionsEnabled() { return actionsEnabled; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java index 310ed21d56..d03fbecf15 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java @@ -675,6 +675,19 @@ public final class CcCommon { } } + public static ImmutableList<String> getCoverageFeatures(RuleContext ruleContext) { + ImmutableList.Builder<String> coverageFeatures = ImmutableList.builder(); + if (ruleContext.getConfiguration().isCodeCoverageEnabled()) { + coverageFeatures.add(CppRuleClasses.COVERAGE); + if (ruleContext.getFragment(CppConfiguration.class).useLLVMCoverageMapFormat()) { + coverageFeatures.add(CppRuleClasses.LLVM_COVERAGE_MAP_FORMAT); + } else { + coverageFeatures.add(CppRuleClasses.GCC_COVERAGE_MAP_FORMAT); + } + } + return coverageFeatures.build(); + } + /** * Creates the feature configuration for a given rule. * @@ -716,6 +729,9 @@ public final class CcCommon { } CppConfiguration cppConfiguration = toolchain.getCppConfiguration(); + + allRequestedFeaturesBuilder.addAll(getCoverageFeatures(ruleContext)); + if (cppConfiguration.getFdoInstrument() != null && !ruleContext.getDisabledFeatures().contains(CppRuleClasses.FDO_INSTRUMENT)) { allRequestedFeaturesBuilder.add(CppRuleClasses.FDO_INSTRUMENT); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java index 7d64d6ddab..00eeea8994 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java @@ -22,9 +22,7 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.ListMultimap; -import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options.MakeVariableSource; import com.google.devtools.build.lib.analysis.config.BuildOptions; @@ -199,7 +197,6 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { // The dynamic mode for linking. private final boolean stripBinaries; private final CompilationMode compilationMode; - private final boolean useLLVMCoverageMap; private final boolean shouldProvideMakeVariables; @@ -322,7 +319,6 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { || (cppOptions.stripBinaries == StripMode.SOMETIMES && compilationMode == CompilationMode.FASTBUILD)), compilationMode, - params.commonOptions.useLLVMCoverageMapFormat, params.commonOptions.makeVariableSource == MakeVariableSource.CONFIGURATION, cppOptions.isLipoContextCollector(), cppToolchainInfo); @@ -357,7 +353,6 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { CpuTransformer cpuTransformerEnum, boolean stripBinaries, CompilationMode compilationMode, - boolean useLLVMCoverageMap, boolean shouldProvideMakeVariables, boolean lipoContextCollector, CppToolchainInfo cppToolchainInfo) { @@ -388,7 +383,6 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { this.cpuTransformerEnum = cpuTransformerEnum; this.stripBinaries = stripBinaries; this.compilationMode = compilationMode; - this.useLLVMCoverageMap = useLLVMCoverageMap; this.shouldProvideMakeVariables = shouldProvideMakeVariables; this.lipoContextCollector = lipoContextCollector; this.cppToolchainInfo = cppToolchainInfo; @@ -1335,23 +1329,8 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { return fdoProfileLabel; } - /** - * Return set of features enabled by the CppConfiguration, specifically the FDO and LIPO related - * features enabled by options. - */ - @Override - public ImmutableSet<String> configurationEnabledFeatures( - RuleContext ruleContext, ImmutableSet<String> disabledFeatures) { - ImmutableSet.Builder<String> requestedFeatures = ImmutableSet.builder(); - if (ruleContext.getConfiguration().isCodeCoverageEnabled()) { - requestedFeatures.add(CppRuleClasses.COVERAGE); - if (useLLVMCoverageMap) { - requestedFeatures.add(CppRuleClasses.LLVM_COVERAGE_MAP_FORMAT); - } else { - requestedFeatures.add(CppRuleClasses.GCC_COVERAGE_MAP_FORMAT); - } - } - return requestedFeatures.build(); + public boolean useLLVMCoverageMapFormat() { + return cppOptions.useLLVMCoverageMapFormat; } public static PathFragment computeDefaultSysroot(CToolchain toolchain) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java index 77f846d645..5ca58c20fd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java @@ -871,6 +871,23 @@ public class CppOptions extends FragmentOptions { ) public boolean enableMakeVariables; + @Option( + name = "experimental_use_llvm_covmap", + defaultValue = "false", + category = "experimental", + documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS, + effectTags = { + OptionEffectTag.CHANGES_INPUTS, + OptionEffectTag.AFFECTS_OUTPUTS, + OptionEffectTag.LOADING_AND_ANALYSIS + }, + metadataTags = {OptionMetadataTag.EXPERIMENTAL}, + help = + "If specified, Bazel will generate llvm-cov coverage map information rather than " + + "gcov when collect_code_coverage is enabled." + ) + public boolean useLLVMCoverageMapFormat; + @Override public FragmentOptions getHost() { CppOptions host = (CppOptions) getDefault(); 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 6704f54a3d..a6b9f8cf7e 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 @@ -558,6 +558,9 @@ public class CompilationSupport { } activatedCrosstoolSelectables.addAll(ruleContext.getFeatures()); + + activatedCrosstoolSelectables.addAll(CcCommon.getCoverageFeatures(ruleContext)); + try { return ccToolchain .getFeatures() |