aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
diff options
context:
space:
mode:
authorGravatar Greg Estren <gregce@google.com>2015-11-13 17:25:36 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-11-16 09:00:29 +0000
commitc5a352ffba8a195817c541c8450fb3958accf1df (patch)
tree9717d7388b0d3aa5637b3ae49648b3f90771cb47 /src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
parentf97a44798510160dcba7dbf600e2199ac1a4b145 (diff)
Add the concept of a "universal" configuration fragment, which all
configurations contain regardless of whether their rules explicitly require it. This is used to ensure all rules have BazelConfiguration. That fragment supplies the path to the shell, which powers BuildConfiguration.getShExecutable(), which powers any rule that generates a SpawnAction. Since SpawnActions are such a ubiquitous pattern we only want to accelerate going forward, there's no point not to make this automatically available to every rule. -- MOS_MIGRATED_REVID=107786879
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 616c60cf00..62d42c9ae4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -24,6 +24,7 @@ import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.DefaultsPackage;
@@ -97,6 +98,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private final Digraph<Class<? extends RuleDefinition>> dependencyGraph =
new Digraph<>();
private ConfigurationCollectionFactory configurationCollectionFactory;
+ private Class<? extends BuildConfiguration.Fragment> universalFragment;
private PrerequisiteValidator prerequisiteValidator;
private ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses = ImmutableMap.of();
@@ -163,6 +165,12 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
return this;
}
+ public Builder setUniversalConfigurationFragment(
+ Class<? extends BuildConfiguration.Fragment> fragment) {
+ this.universalFragment = fragment;
+ return this;
+ }
+
public Builder setSkylarkAccessibleJavaClasses(ImmutableMap<String, SkylarkType> objects) {
this.skylarkAccessibleJavaClasses = objects;
return this;
@@ -238,6 +246,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
ImmutableList.copyOf(configurationOptions),
ImmutableList.copyOf(configurationFragments),
configurationCollectionFactory,
+ universalFragment,
prerequisiteValidator,
skylarkAccessibleJavaClasses);
}
@@ -310,6 +319,12 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
*/
private final ConfigurationCollectionFactory configurationCollectionFactory;
+ /**
+ * A configuration fragment that should be available to all rules even when they don't
+ * explicitly require it.
+ */
+ private final Class<? extends BuildConfiguration.Fragment> universalFragment;
+
private final ImmutableList<BuildInfoFactory> buildInfoFactories;
private final PrerequisiteValidator prerequisiteValidator;
@@ -327,6 +342,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
ImmutableList<Class<? extends FragmentOptions>> configurationOptions,
ImmutableList<ConfigurationFragmentFactory> configurationFragments,
ConfigurationCollectionFactory configurationCollectionFactory,
+ Class<? extends BuildConfiguration.Fragment> universalFragment,
PrerequisiteValidator prerequisiteValidator,
ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses) {
this.preludeLabel = preludeLabel;
@@ -339,6 +355,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
this.configurationOptions = configurationOptions;
this.configurationFragments = configurationFragments;
this.configurationCollectionFactory = configurationCollectionFactory;
+ this.universalFragment = universalFragment;
this.prerequisiteValidator = prerequisiteValidator;
this.globals = createGlobals(skylarkAccessibleJavaClasses);
}
@@ -403,6 +420,14 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
}
/**
+ * Returns the configuration fragment that should be available to all rules even when they
+ * don't explicitly require it.
+ */
+ public Class<? extends BuildConfiguration.Fragment> getUniversalFragment() {
+ return universalFragment;
+ }
+
+ /**
* Returns the defaults package for the default settings.
*/
public String getDefaultsPackageContent() {