aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2017-12-19 04:02:39 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-19 04:04:49 -0800
commit173cae708cc667ef1353b5e65c3b7a62757e5f97 (patch)
treec6a9038d77f182aa648386dc25534842b251fa47 /src/main/java
parent30ffe79ee7ab1f07b1ebb1eb42c1c4536006f01f (diff)
Remove FeatureSpecification, use plain sets instead
RELNOTES: None. PiperOrigin-RevId: 179534164
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java31
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java5
4 files changed, 33 insertions, 39 deletions
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 24666bd7b0..d48c9f91cb 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
@@ -599,10 +599,11 @@ public final class CcCommon {
*/
public static FeatureConfiguration configureFeatures(
RuleContext ruleContext,
- FeatureSpecification featureSpecification,
+ ImmutableSet<String> requestedFeatures,
+ ImmutableSet<String> unsupportedFeatures,
CcToolchainProvider toolchain) {
ImmutableSet.Builder<String> unsupportedFeaturesBuilder = ImmutableSet.builder();
- unsupportedFeaturesBuilder.addAll(featureSpecification.getUnsupportedFeatures());
+ unsupportedFeaturesBuilder.addAll(unsupportedFeatures);
if (!toolchain.supportsHeaderParsing()) {
// TODO(bazel-team): Remove once supports_header_parsing has been removed from the
// cc_toolchain rule.
@@ -612,19 +613,19 @@ public final class CcCommon {
if (toolchain.getCppCompilationContext().getCppModuleMap() == null) {
unsupportedFeaturesBuilder.add(CppRuleClasses.MODULE_MAPS);
}
- ImmutableSet<String> unsupportedFeatures = unsupportedFeaturesBuilder.build();
- ImmutableSet.Builder<String> requestedFeatures = ImmutableSet.builder();
+ ImmutableSet<String> allUnsupportedFeatures = unsupportedFeaturesBuilder.build();
+ ImmutableSet.Builder<String> allRequestedFeaturesBuilder = ImmutableSet.builder();
// If STATIC_LINK_MSVCRT feature isn't specified by user, we add DYNAMIC_LINK_MSVCRT_* feature
// according to compilation mode.
// If STATIC_LINK_MSVCRT feature is specified, we add STATIC_LINK_MSVCRT_* feature
// according to compilation mode.
if (ruleContext.getFeatures().contains(CppRuleClasses.STATIC_LINK_MSVCRT)) {
- requestedFeatures.add(
+ allRequestedFeaturesBuilder.add(
toolchain.getCompilationMode() == CompilationMode.DBG
? CppRuleClasses.STATIC_LINK_MSVCRT_DEBUG
: CppRuleClasses.STATIC_LINK_MSVCRT_NO_DEBUG);
} else {
- requestedFeatures.add(
+ allRequestedFeaturesBuilder.add(
toolchain.getCompilationMode() == CompilationMode.DBG
? CppRuleClasses.DYNAMIC_LINK_MSVCRT_DEBUG
: CppRuleClasses.DYNAMIC_LINK_MSVCRT_NO_DEBUG);
@@ -636,19 +637,16 @@ public final class CcCommon {
DEFAULT_FEATURES,
toolchain.getFeatures().getDefaultFeaturesAndActionConfigs(),
ruleContext.getFeatures())) {
- if (!unsupportedFeatures.contains(feature)) {
- requestedFeatures.add(feature);
+ if (!allUnsupportedFeatures.contains(feature)) {
+ allRequestedFeaturesBuilder.add(feature);
}
}
- requestedFeatures.addAll(featureSpecification.getRequestedFeatures());
+ allRequestedFeaturesBuilder.addAll(requestedFeatures);
- requestedFeatures.addAll(DEFAULT_ACTION_CONFIGS);
-
- FeatureSpecification currentFeatureSpecification =
- FeatureSpecification.create(requestedFeatures.build(), unsupportedFeatures);
+ allRequestedFeaturesBuilder.addAll(DEFAULT_ACTION_CONFIGS);
try {
FeatureConfiguration configuration =
- toolchain.getFeatures().getFeatureConfiguration(currentFeatureSpecification);
+ toolchain.getFeatures().getFeatureConfiguration(allRequestedFeaturesBuilder.build());
for (String feature : unsupportedFeatures) {
if (configuration.isEnabled(feature)) {
ruleContext.ruleError(
@@ -678,7 +676,11 @@ public final class CcCommon {
*/
public static FeatureConfiguration configureFeatures(
RuleContext ruleContext, CcToolchainProvider toolchain) {
- return configureFeatures(ruleContext, FeatureSpecification.EMPTY, toolchain);
+ return configureFeatures(
+ ruleContext,
+ /* requestedFeatures= */ ImmutableSet.of(),
+ /* unsupportedFeatures= */ ImmutableSet.of(),
+ 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 c807289a7c..9d3a2f6719 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
@@ -1683,14 +1683,12 @@ public class CcToolchainFeatures implements Serializable {
protected FeatureConfiguration() {
this(
- FeatureSpecification.EMPTY,
ImmutableList.of(),
ImmutableList.of(),
ImmutableMap.of());
}
private FeatureConfiguration(
- FeatureSpecification featureSpecification,
Iterable<Feature> enabledFeatures,
Iterable<ActionConfig> enabledActionConfigs,
ImmutableMap<String, ActionConfig> actionConfigByActionName) {
@@ -1851,7 +1849,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<FeatureSpecification, FeatureConfiguration> configurationCache =
+ private transient LoadingCache<ImmutableSet<String>, FeatureConfiguration> configurationCache =
buildConfigurationCache();
/**
@@ -1995,24 +1993,24 @@ public class CcToolchainFeatures implements Serializable {
in.defaultReadObject();
this.configurationCache = buildConfigurationCache();
}
-
+
/** @return an empty {@code FeatureConfiguration} cache. */
- private LoadingCache<FeatureSpecification, FeatureConfiguration> buildConfigurationCache() {
+ private LoadingCache<ImmutableSet<String>, FeatureConfiguration> buildConfigurationCache() {
return CacheBuilder.newBuilder()
// TODO(klimek): Benchmark and tweak once we support a larger configuration.
.maximumSize(10000)
.build(
- new CacheLoader<FeatureSpecification, FeatureConfiguration>() {
+ new CacheLoader<ImmutableSet<String>, FeatureConfiguration>() {
@Override
- public FeatureConfiguration load(FeatureSpecification featureSpecification)
+ public FeatureConfiguration load(ImmutableSet<String> requestedFeatures)
throws CollidingProvidesException {
- return computeFeatureConfiguration(featureSpecification);
+ return computeFeatureConfiguration(requestedFeatures);
}
});
}
/**
- * Given a list of {@code requestedFeatures}, returns all features that are enabled by the
+ * Given a list of {@code requestedSelectables}, returns all features that are enabled by the
* toolchain configuration.
*
* <p>A requested feature will not be enabled if the toolchain does not support it (which may
@@ -2021,10 +2019,10 @@ 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(FeatureSpecification featureSpecification)
+ public FeatureConfiguration getFeatureConfiguration(ImmutableSet<String> requestedSelectables)
throws CollidingProvidesException {
try {
- return configurationCache.get(featureSpecification);
+ return configurationCache.get(requestedSelectables);
} catch (ExecutionException e) {
Throwables.throwIfInstanceOf(e.getCause(), CollidingProvidesException.class);
Throwables.throwIfUnchecked(e.getCause());
@@ -2042,11 +2040,11 @@ 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 computeFeatureConfiguration(FeatureSpecification featureSpecification)
+ public FeatureConfiguration computeFeatureConfiguration(ImmutableSet<String> requestedSelectables)
throws CollidingProvidesException {
// Command line flags will be output in the order in which they are specified in the toolchain
// configuration.
- return new FeatureSelection(featureSpecification).run();
+ return new FeatureSelection(requestedSelectables).run();
}
public ImmutableList<String> getDefaultFeaturesAndActionConfigs() {
@@ -2133,12 +2131,10 @@ public class CcToolchainFeatures implements Serializable {
* from selectables that have unmet requirements.
*/
private final Set<CrosstoolSelectable> enabled = new HashSet<>();
- private final FeatureSpecification featureSpecification;
- private FeatureSelection(FeatureSpecification featureSpecification) {
- this.featureSpecification = featureSpecification;
+ private FeatureSelection(ImmutableSet<String> requestedFeatures) {
ImmutableSet.Builder<CrosstoolSelectable> builder = ImmutableSet.builder();
- for (String name : featureSpecification.getRequestedFeatures()) {
+ for (String name : requestedFeatures) {
if (selectablesByName.containsKey(name)) {
builder.add(selectablesByName.get(name));
}
@@ -2186,7 +2182,6 @@ public class CcToolchainFeatures implements Serializable {
}
return new FeatureConfiguration(
- featureSpecification,
enabledFeaturesInOrder,
enabledActionConfigsInOrder,
actionConfigsByActionName);
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 37b68a8ce0..8931024b93 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
@@ -48,7 +48,6 @@ 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.cpp.transitions.LipoContextCollectorTransition;
import com.google.devtools.build.lib.rules.proto.ProtoCommon;
import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder;
@@ -214,7 +213,8 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect
FeatureConfiguration featureConfiguration =
CcCommon.configureFeatures(
ruleContext,
- FeatureSpecification.create(requestedFeatures.build(), unsupportedFeatures.build()),
+ requestedFeatures.build(),
+ unsupportedFeatures.build(),
ccToolchain(ruleContext));
return featureConfiguration;
}
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 2fb5133119..4b528b92e1 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
@@ -106,7 +106,6 @@ import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
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;
@@ -564,9 +563,7 @@ public class CompilationSupport {
try {
return ccToolchain
.getFeatures()
- .getFeatureConfiguration(
- FeatureSpecification.create(
- activatedCrosstoolSelectables.build(), ImmutableSet.<String>of()));
+ .getFeatureConfiguration(activatedCrosstoolSelectables.build());
} catch (CollidingProvidesException e) {
ruleContext.ruleError(e.getMessage());
return FeatureConfiguration.EMPTY;