aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-06-01 12:05:28 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-01 12:07:29 -0700
commitfc4745471b5240422e2e1b48d55a14c082675620 (patch)
tree3b5c783ad3533a0fbd7ba99dad6b265eb808ea50
parent218e5431d53ba0eab0dd5e2c9d1123987e05f00c (diff)
Create a Bootstrap for config-related libraries of skylarkbuildapi.
RELNOTES: None. PiperOrigin-RevId: 198906931
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java35
3 files changed, 52 insertions, 2 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 a0321ec5aa..c333d0563b 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
@@ -56,6 +56,7 @@ import com.google.devtools.build.lib.packages.RuleTransitionFactory;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
+import com.google.devtools.build.lib.skylarkbuildapi.Bootstrap;
import com.google.devtools.build.lib.skylarkinterface.SkylarkInterfaceUtils;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.syntax.Environment;
@@ -238,6 +239,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
new ArrayList<>();
@Nullable private RuleTransitionFactory trimmingTransitionFactory;
private PrerequisiteValidator prerequisiteValidator;
+ private ImmutableList.Builder<Bootstrap> skylarkBootstraps =
+ ImmutableList.<Bootstrap>builder();
private ImmutableMap.Builder<String, Object> skylarkAccessibleTopLevels =
ImmutableMap.builder();
private ImmutableList.Builder<Class<?>> skylarkModules =
@@ -358,6 +361,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
return this;
}
+ public Builder addSkylarkBootstrap(Bootstrap bootstrap) {
+ this.skylarkBootstraps.add(bootstrap);
+ return this;
+ }
+
public Builder addSkylarkAccessibleTopLevels(String name, Object object) {
this.skylarkAccessibleTopLevels.put(name, object);
return this;
@@ -514,6 +522,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
trimmingTransitionFactory,
prerequisiteValidator,
skylarkAccessibleTopLevels.build(),
+ skylarkBootstraps.build(),
skylarkModules.build(),
ImmutableSet.copyOf(reservedActionMnemonics),
actionEnvironmentProvider,
@@ -651,6 +660,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
@Nullable RuleTransitionFactory trimmingTransitionFactory,
PrerequisiteValidator prerequisiteValidator,
ImmutableMap<String, Object> skylarkAccessibleJavaClasses,
+ ImmutableList<Bootstrap> skylarkBootstraps,
ImmutableList<Class<?>> skylarkModules,
ImmutableSet<String> reservedActionMnemonics,
BuildConfiguration.ActionEnvironmentProvider actionEnvironmentProvider,
@@ -670,7 +680,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
this.universalFragments = universalFragments;
this.trimmingTransitionFactory = trimmingTransitionFactory;
this.prerequisiteValidator = prerequisiteValidator;
- this.globals = createGlobals(skylarkAccessibleJavaClasses, skylarkModules);
+ this.globals = createGlobals(skylarkAccessibleJavaClasses, skylarkBootstraps, skylarkModules);
this.reservedActionMnemonics = reservedActionMnemonics;
this.actionEnvironmentProvider = actionEnvironmentProvider;
this.configurationFragmentMap = createFragmentMap(configurationFragmentFactories);
@@ -795,6 +805,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private Environment.GlobalFrame createGlobals(
ImmutableMap<String, Object> skylarkAccessibleTopLevels,
+ ImmutableList<Bootstrap> bootstraps,
ImmutableList<Class<?>> modules) {
ImmutableMap.Builder<String, Object> envBuilder = ImmutableMap.builder();
@@ -803,6 +814,9 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
Runtime.setupModuleGlobals(envBuilder, module);
}
envBuilder.putAll(skylarkAccessibleTopLevels.entrySet());
+ for (Bootstrap bootstrap : bootstraps) {
+ bootstrap.addBindingsToBuilder(envBuilder);
+ }
return GlobalFrame.createForBuiltins(envBuilder.build());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
index 4d49eafa58..6a5fdaec6a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
import com.google.devtools.build.lib.rules.core.CoreRules;
+import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigBootstrap;
/**
* Set of rules to specify or manipulate configuration settings.
@@ -39,7 +40,7 @@ public final class ConfigRules implements RuleSet {
new ConfigFeatureFlagConfiguration.Loader());
builder.addRuleDefinition(new ConfigRuleClasses.ConfigFeatureFlagRule());
- builder.addSkylarkAccessibleTopLevels("config_common", new ConfigSkylarkCommon());
+ builder.addSkylarkBootstrap(new ConfigBootstrap(new ConfigSkylarkCommon()));
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java
new file mode 100644
index 0000000000..0624ebf0a9
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java
@@ -0,0 +1,35 @@
+// Copyright 2018 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.skylarkbuildapi.config;
+
+import com.google.common.collect.ImmutableMap.Builder;
+import com.google.devtools.build.lib.skylarkbuildapi.Bootstrap;
+
+/**
+ * A {@link Bootstrap} for config-related libraries of the build API.
+ */
+public class ConfigBootstrap implements Bootstrap {
+
+ private final ConfigSkylarkCommonApi configSkylarkCommonApi;
+
+ public ConfigBootstrap(ConfigSkylarkCommonApi configSkylarkCommonApi) {
+ this.configSkylarkCommonApi = configSkylarkCommonApi;
+ }
+
+ @Override
+ public void addBindingsToBuilder(Builder<String, Object> builder) {
+ builder.put("config_common", configSkylarkCommonApi);
+ }
+}