diff options
author | 2017-05-30 13:50:04 +0200 | |
---|---|---|
committer | 2017-05-30 16:43:53 +0200 | |
commit | 573916acd2551772645a2f23ce3087771ed1d1e8 (patch) | |
tree | c0d7d503258bd09e62880452852fcaa4c9640c21 /src/main/java/com | |
parent | 84a8e95910f069dd03a19b0fc634f95bb0beac95 (diff) |
Add FeatureSpecification.
RELNOTES: None.
PiperOrigin-RevId: 157450873
Diffstat (limited to 'src/main/java/com')
9 files changed, 149 insertions, 74 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java index e7b9830928..507cc76de4 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.rules.cpp.CppCompileActionContext; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode; import com.google.devtools.build.lib.rules.cpp.CppSemantics; +import com.google.devtools.build.lib.rules.cpp.FeatureSpecification; import com.google.devtools.build.lib.rules.cpp.IncludeProcessing; import com.google.devtools.build.lib.rules.cpp.NoProcessing; import com.google.devtools.build.lib.vfs.PathFragment; @@ -48,7 +49,9 @@ public class BazelCppSemantics implements CppSemantics { @Override public void finalizeCompileActionBuilder( - RuleContext ruleContext, CppCompileActionBuilder actionBuilder) { + RuleContext ruleContext, + CppCompileActionBuilder actionBuilder, + FeatureSpecification featureSpecification) { actionBuilder.setCppConfiguration(ruleContext.getFragment(CppConfiguration.class)); actionBuilder.setActionContext(CppCompileActionContext.class); // Because Bazel does not support include scanning, we need the entire crosstool filegroup, 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 505d8e33b0..6a130fcc8e 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 @@ -52,7 +52,6 @@ import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import javax.annotation.Nullable; @@ -594,21 +593,20 @@ public final class CcCommon { /** * Creates the feature configuration for a given rule. * - * @param ruleContext the context of the rule we want the feature configuration for. - * @param ruleSpecificRequestedFeatures features that will be requested, and thus be always - * enabled if the toolchain supports them. - * @param ruleSpecificUnsupportedFeatures features that are not supported in the current context. - * @param sourceCategory the source category for this build. + * @see CcCommon#configureFeatures( + * RuleContext, FeatureSpecification, SourceCategory, CcToolchainProvider) + * + * @param features CcToolchainFeatures instance to use to get FeatureConfiguration * @return the feature configuration for the given {@code ruleContext}. */ public static FeatureConfiguration configureFeatures( RuleContext ruleContext, - Set<String> ruleSpecificRequestedFeatures, - Set<String> ruleSpecificUnsupportedFeatures, + FeatureSpecification featureSpecification, SourceCategory sourceCategory, - CcToolchainProvider toolchain) { + CcToolchainProvider toolchain, + CcToolchainFeatures features) { ImmutableSet.Builder<String> unsupportedFeaturesBuilder = ImmutableSet.builder(); - unsupportedFeaturesBuilder.addAll(ruleSpecificUnsupportedFeatures); + unsupportedFeaturesBuilder.addAll(featureSpecification.getUnsupportedFeatures()); if (!toolchain.supportsHeaderParsing()) { // TODO(bazel-team): Remove once supports_header_parsing has been removed from the // cc_toolchain rule. @@ -618,7 +616,7 @@ public final class CcCommon { if (toolchain.getCppCompilationContext().getCppModuleMap() == null) { unsupportedFeaturesBuilder.add(CppRuleClasses.MODULE_MAPS); } - Set<String> unsupportedFeatures = unsupportedFeaturesBuilder.build(); + ImmutableSet<String> unsupportedFeatures = unsupportedFeaturesBuilder.build(); ImmutableSet.Builder<String> requestedFeatures = ImmutableSet.builder(); for (String feature : Iterables.concat( @@ -631,12 +629,14 @@ public final class CcCommon { requestedFeatures.add(feature); } } - requestedFeatures.addAll(ruleSpecificRequestedFeatures); + requestedFeatures.addAll(featureSpecification.getRequestedFeatures()); requestedFeatures.addAll(sourceCategory.getActionConfigSet()); + FeatureSpecification currentFeatureSpecification = + FeatureSpecification.create(requestedFeatures.build(), unsupportedFeatures); FeatureConfiguration configuration = - toolchain.getFeatures().getFeatureConfiguration(requestedFeatures.build()); + features.getFeatureConfiguration(currentFeatureSpecification); for (String feature : unsupportedFeatures) { if (configuration.isEnabled(feature)) { ruleContext.ruleError( @@ -653,22 +653,35 @@ public final class CcCommon { return configuration; } + + /** + * Creates the feature configuration for a given rule. + * + * @see CcCommon#configureFeatures(RuleContext, CcToolchainProvider, SourceCategory) + * + * @param toolchain the current toolchain provider + * @return the feature configuration for the given {@code ruleContext}. + */ + public static FeatureConfiguration configureFeatures( + RuleContext ruleContext, + FeatureSpecification featureSpecification, + SourceCategory sourceCategory, + CcToolchainProvider toolchain) { + return configureFeatures( + ruleContext, featureSpecification, sourceCategory, toolchain, toolchain.getFeatures()); + } + /** * Creates a feature configuration for a given rule. * - * @param ruleContext the context of the rule we want the feature configuration for. - * @param toolchain the toolchain we want the feature configuration for. + * @see CcCommon#configureFeatures(RuleContext, CcToolchainProvider) + * * @param sourceCategory the category of sources to be used in this build. * @return the feature configuration for the given {@code ruleContext}. */ public static FeatureConfiguration configureFeatures( RuleContext ruleContext, CcToolchainProvider toolchain, SourceCategory sourceCategory) { - return configureFeatures( - ruleContext, - ImmutableSet.<String>of(), - ImmutableSet.<String>of(), - sourceCategory, - toolchain); + return configureFeatures(ruleContext, FeatureSpecification.EMPTY, sourceCategory, toolchain); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java index d4088e9686..4cbc6cf8ce 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java @@ -41,7 +41,6 @@ import java.io.ObjectInputStream; import java.io.Serializable; import java.util.ArrayDeque; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -1718,23 +1717,27 @@ public class CcToolchainFeatures implements Serializable { */ @Immutable public static class FeatureConfiguration { + private final FeatureSpecification featureSpecification; private final ImmutableSet<String> enabledFeatureNames; private final Iterable<Feature> enabledFeatures; private final ImmutableSet<String> enabledActionConfigActionNames; private final ImmutableMap<String, ActionConfig> actionConfigByActionName; - + public FeatureConfiguration() { this( + FeatureSpecification.EMPTY, ImmutableList.<Feature>of(), ImmutableList.<ActionConfig>of(), ImmutableMap.<String, ActionConfig>of()); } private FeatureConfiguration( + FeatureSpecification featureSpecification, Iterable<Feature> enabledFeatures, Iterable<ActionConfig> enabledActionConfigs, ImmutableMap<String, ActionConfig> actionConfigByActionName) { + this.featureSpecification = featureSpecification; this.enabledFeatures = enabledFeatures; this.actionConfigByActionName = actionConfigByActionName; @@ -1806,6 +1809,10 @@ public class CcToolchainFeatures implements Serializable { ActionConfig actionConfig = actionConfigByActionName.get(actionName); return actionConfig.getTool(enabledFeatureNames); } + + public FeatureSpecification getFeatureSpecification() { + return featureSpecification; + } } /** All artifact name patterns defined in this feature configuration. */ @@ -1871,7 +1878,7 @@ public class CcToolchainFeatures implements Serializable { * A cache of feature selection results, so we do not recalculate the feature selection for all * actions. */ - private transient LoadingCache<Collection<String>, FeatureConfiguration> configurationCache = + private transient LoadingCache<FeatureSpecification, FeatureConfiguration> configurationCache = buildConfigurationCache(); /** @@ -2013,19 +2020,18 @@ public class CcToolchainFeatures implements Serializable { this.configurationCache = buildConfigurationCache(); } - /** - * @return an empty {@code FeatureConfiguration} cache. - */ - private LoadingCache<Collection<String>, FeatureConfiguration> buildConfigurationCache() { + /** @return an empty {@code FeatureConfiguration} cache. */ + private LoadingCache<FeatureSpecification, FeatureConfiguration> buildConfigurationCache() { return CacheBuilder.newBuilder() - // TODO(klimek): Benchmark and tweak once we support a larger configuration. + // TODO(klimek): Benchmark and tweak once we support a larger configuration. .maximumSize(10000) - .build(new CacheLoader<Collection<String>, FeatureConfiguration>() { - @Override - public FeatureConfiguration load(Collection<String> requestedFeatures) { - return computeFeatureConfiguration(requestedFeatures); - } - }); + .build( + new CacheLoader<FeatureSpecification, FeatureConfiguration>() { + @Override + public FeatureConfiguration load(FeatureSpecification featureSpecification) { + return computeFeatureConfiguration(featureSpecification); + } + }); } /** @@ -2038,28 +2044,25 @@ public class CcToolchainFeatures implements Serializable { * <p>Additional features will be enabled if the toolchain supports them and they are implied by * requested features. */ - public FeatureConfiguration getFeatureConfiguration(Collection<String> requestedFeatures) { - return configurationCache.getUnchecked(requestedFeatures); - } - - private FeatureConfiguration computeFeatureConfiguration(Collection<String> requestedFeatures) { - // Command line flags will be output in the order in which they are specified in the toolchain - // configuration. - return new FeatureSelection(requestedFeatures).run(); + public FeatureConfiguration getFeatureConfiguration(FeatureSpecification featureSpecification) { + return configurationCache.getUnchecked(featureSpecification); } - + /** - * Given a list of {@code requestedFeatures}, returns all features that are enabled by the - * toolchain configuration. + * Given {@code featureSpecification}, returns a FeatureConfiguration with all requested features + * enabled. * * <p>A requested feature will not be enabled if the toolchain does not support it (which may * depend on other requested features). * * <p>Additional features will be enabled if the toolchain supports them and they are implied by * requested features. - */ - public FeatureConfiguration getFeatureConfiguration(String... requestedFeatures) { - return getFeatureConfiguration(Arrays.asList(requestedFeatures)); + */ + public FeatureConfiguration computeFeatureConfiguration( + FeatureSpecification featureSpecification) { + // Command line flags will be output in the order in which they are specified in the toolchain + // configuration. + return new FeatureSelection(featureSpecification).run(); } /** Returns the list of features that specify themselves as enabled by default. */ @@ -2146,10 +2149,12 @@ public class CcToolchainFeatures implements Serializable { * from selectables that have unmet requirements. */ private final Set<CrosstoolSelectable> enabled = new HashSet<>(); - - private FeatureSelection(Collection<String> requestedSelectables) { + private final FeatureSpecification featureSpecification; + + private FeatureSelection(FeatureSpecification featureSpecification) { + this.featureSpecification = featureSpecification; ImmutableSet.Builder<CrosstoolSelectable> builder = ImmutableSet.builder(); - for (String name : requestedSelectables) { + for (String name : featureSpecification.getRequestedFeatures()) { if (selectablesByName.containsKey(name)) { builder.add(selectablesByName.get(name)); } @@ -2197,7 +2202,10 @@ public class CcToolchainFeatures implements Serializable { } return new FeatureConfiguration( - enabledFeaturesInOrder, enabledActionConfigsInOrder, actionConfigsByActionName); + featureSpecification, + enabledFeaturesInOrder, + enabledActionConfigsInOrder, + actionConfigsByActionName); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java index 1495309af2..c04501d8ca 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java @@ -263,10 +263,8 @@ public final class CppModel { this.soImplArtifact = soImplFilename; return this; } - - /** - * Sets the feature configuration to be used for C/C++ actions. - */ + + /** Sets the feature configuration to be used for C/C++ actions. */ public CppModel setFeatureConfiguration(FeatureConfiguration featureConfiguration) { this.featureConfiguration = featureConfiguration; return this; @@ -615,7 +613,8 @@ public final class CppModel { /*ltoIndexingFile=*/ null, builder.getContext().getCppModuleMap(), ImmutableMap.<String, String>of()); - semantics.finalizeCompileActionBuilder(ruleContext, builder); + semantics.finalizeCompileActionBuilder( + ruleContext, builder, featureConfiguration.getFeatureSpecification()); CppCompileAction compileAction = builder.buildAndValidate(ruleContext); env.registerAction(compileAction); Artifact tokenFile = compileAction.getOutputFile(); @@ -675,7 +674,8 @@ public final class CppModel { builder.setGcnoFile(gcnoFile); builder.setDwoFile(dwoFile); - semantics.finalizeCompileActionBuilder(ruleContext, builder); + semantics.finalizeCompileActionBuilder( + ruleContext, builder, featureConfiguration.getFeatureSpecification()); CppCompileAction compileAction = builder.build(); AnalysisEnvironment env = ruleContext.getAnalysisEnvironment(); env.registerAction(compileAction); @@ -734,7 +734,8 @@ public final class CppModel { /*ltoIndexingFile=*/ null, builder.getContext().getCppModuleMap(), /*sourceSpecificBuildVariables=*/ ImmutableMap.<String, String>of()); - semantics.finalizeCompileActionBuilder(ruleContext, builder); + semantics.finalizeCompileActionBuilder( + ruleContext, builder, featureConfiguration.getFeatureSpecification()); CppCompileAction compileAction = builder.buildAndValidate(ruleContext); env.registerAction(compileAction); Artifact tokenFile = compileAction.getOutputFile(); @@ -813,7 +814,8 @@ public final class CppModel { picBuilder.setDwoFile(dwoFile); picBuilder.setLTOIndexingFile(ltoIndexingFile); - semantics.finalizeCompileActionBuilder(ruleContext, picBuilder); + semantics.finalizeCompileActionBuilder( + ruleContext, picBuilder, featureConfiguration.getFeatureSpecification()); CppCompileAction picAction = picBuilder.buildAndValidate(ruleContext); env.registerAction(picAction); directOutputs.add(picAction.getOutputFile()); @@ -879,7 +881,8 @@ public final class CppModel { builder.setDwoFile(noPicDwoFile); builder.setLTOIndexingFile(ltoIndexingFile); - semantics.finalizeCompileActionBuilder(ruleContext, builder); + semantics.finalizeCompileActionBuilder( + ruleContext, builder, featureConfiguration.getFeatureSpecification()); CppCompileAction compileAction = builder.buildAndValidate(ruleContext); env.registerAction(compileAction); Artifact objectFile = compileAction.getOutputFile(); @@ -919,7 +922,8 @@ public final class CppModel { /*ltoIndexingFile=*/ null, builder.getContext().getCppModuleMap(), source.getBuildVariables()); - semantics.finalizeCompileActionBuilder(ruleContext, builder); + semantics.finalizeCompileActionBuilder( + ruleContext, builder, featureConfiguration.getFeatureSpecification()); CppCompileActionTemplate actionTemplate = new CppCompileActionTemplate( sourceArtifact, outputFiles, @@ -965,7 +969,8 @@ public final class CppModel { /*ltoIndexingFile=*/ null, builder.getContext().getCppModuleMap(), ImmutableMap.<String, String>of()); - semantics.finalizeCompileActionBuilder(ruleContext, builder); + semantics.finalizeCompileActionBuilder( + ruleContext, builder, featureConfiguration.getFeatureSpecification()); CppCompileAction action = builder.buildAndValidate(ruleContext); env.registerAction(action); if (addObject) { @@ -1301,7 +1306,8 @@ public final class CppModel { /*ltoIndexingFile=*/ null, builder.getContext().getCppModuleMap(), ImmutableMap.<String, String>of()); - semantics.finalizeCompileActionBuilder(ruleContext, dBuilder); + semantics.finalizeCompileActionBuilder( + ruleContext, dBuilder, featureConfiguration.getFeatureSpecification()); CppCompileAction dAction = dBuilder.buildAndValidate(ruleContext); ruleContext.registerAction(dAction); @@ -1318,7 +1324,8 @@ public final class CppModel { /*ltoIndexingFile=*/ null, builder.getContext().getCppModuleMap(), ImmutableMap.<String, String>of()); - semantics.finalizeCompileActionBuilder(ruleContext, sdBuilder); + semantics.finalizeCompileActionBuilder( + ruleContext, sdBuilder, featureConfiguration.getFeatureSpecification()); CppCompileAction sdAction = sdBuilder.buildAndValidate(ruleContext); ruleContext.registerAction(sdAction); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java index 4f3a9c12eb..dfdafb6ded 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java @@ -38,7 +38,9 @@ public interface CppSemantics { * minute. */ void finalizeCompileActionBuilder( - RuleContext ruleContext, CppCompileActionBuilder actionBuilder); + RuleContext ruleContext, + CppCompileActionBuilder actionBuilder, + FeatureSpecification featureSpecification); /** * Called before {@link CppCompilationContext}s are finalized. diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureSpecification.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureSpecification.java new file mode 100644 index 0000000000..dfc563165b --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureSpecification.java @@ -0,0 +1,36 @@ +// Copyright 2014 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.rules.cpp; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableSet; + +/** + * Object encapsulating which additional toolchain features should be enabled and/or disabled. + */ +@AutoValue +public abstract class FeatureSpecification { + + public static final FeatureSpecification EMPTY = + create(ImmutableSet.<String>of(), ImmutableSet.<String>of()); + + public static final FeatureSpecification create( + ImmutableSet<String> requestedFeatures, ImmutableSet<String> unsupportedFeatures) { + return new AutoValue_FeatureSpecification(requestedFeatures, unsupportedFeatures); + } + + public abstract ImmutableSet<String> getRequestedFeatures(); + + public abstract ImmutableSet<String> getUnsupportedFeatures(); +} diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java index 0d44e352ed..be5a99d5e4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java @@ -51,6 +51,7 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.CppSemantics; +import com.google.devtools.build.lib.rules.cpp.FeatureSpecification; import com.google.devtools.build.lib.rules.proto.ProtoCommon; import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder; import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder.ToolchainInvocation; @@ -217,8 +218,7 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect FeatureConfiguration featureConfiguration = CcCommon.configureFeatures( ruleContext, - requestedFeatures.build(), - unsupportedFeatures.build(), + FeatureSpecification.create(requestedFeatures.build(), unsupportedFeatures.build()), CcLibraryHelper.SourceCategory.CC, ccToolchain(ruleContext)); return featureConfiguration; 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 50bceaa339..cb22ab4bfd 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 @@ -53,6 +53,7 @@ import com.google.devtools.build.lib.rules.cpp.CppLinkAction; import com.google.devtools.build.lib.rules.cpp.CppLinkActionBuilder; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider; +import com.google.devtools.build.lib.rules.cpp.FeatureSpecification; import com.google.devtools.build.lib.rules.cpp.IncludeProcessing; import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; @@ -454,8 +455,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport { private static FeatureConfiguration getFeatureConfiguration(RuleContext ruleContext, BuildConfiguration configuration) { - ImmutableList.Builder<String> activatedCrosstoolSelectables = - ImmutableList.<String>builder() + ImmutableSet.Builder<String> activatedCrosstoolSelectables = + ImmutableSet.<String>builder() .addAll(ACTIVATED_ACTIONS) .addAll( ruleContext @@ -514,7 +515,9 @@ public class CrosstoolCompilationSupport extends CompilationSupport { return configuration .getFragment(CppConfiguration.class) .getFeatures() - .getFeatureConfiguration(activatedCrosstoolSelectables.build()); + .getFeatureConfiguration( + FeatureSpecification.create( + activatedCrosstoolSelectables.build(), ImmutableSet.<String>of())); } private static ImmutableList<Artifact> getObjFiles( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java index 8b725dc850..51d4c7c9a6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java @@ -31,6 +31,7 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.cpp.CppSemantics; +import com.google.devtools.build.lib.rules.cpp.FeatureSpecification; import com.google.devtools.build.lib.rules.cpp.HeaderDiscovery.DotdPruningMode; import com.google.devtools.build.lib.rules.cpp.IncludeProcessing; import com.google.devtools.build.lib.util.FileTypeSet; @@ -94,7 +95,9 @@ public class ObjcCppSemantics implements CppSemantics { @Override public void finalizeCompileActionBuilder( - RuleContext ruleContext, CppCompileActionBuilder actionBuilder) { + RuleContext ruleContext, + CppCompileActionBuilder actionBuilder, + FeatureSpecification featureSpecification) { actionBuilder.setCppConfiguration(ruleContext.getFragment(CppConfiguration.class)); actionBuilder.setActionContext(CppCompileActionContext.class); // Because Bazel does not support include scanning, we need the entire crosstool filegroup, |