diff options
author | cparsons <cparsons@google.com> | 2018-06-01 12:05:28 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-01 12:07:29 -0700 |
commit | fc4745471b5240422e2e1b48d55a14c082675620 (patch) | |
tree | 3b5c783ad3533a0fbd7ba99dad6b265eb808ea50 | |
parent | 218e5431d53ba0eab0dd5e2c9d1123987e05f00c (diff) |
Create a Bootstrap for config-related libraries of skylarkbuildapi.
RELNOTES: None.
PiperOrigin-RevId: 198906931
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); + } +} |