From ce33ab7a49126a513d7d5a6bc16f86154d9a85b6 Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 26 Apr 2017 21:30:50 +0200 Subject: Give RuleContext the ability to add Make Variables This CL also makes CcToolchain responsible for adding the sysroot to CC_FLAGS. PiperOrigin-RevId: 154329746 --- .../build/lib/rules/MakeVariableProvider.java | 35 ++++++++++++---------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java') diff --git a/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java b/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java index 1c56c20bfb..15d4998c7f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java @@ -15,34 +15,37 @@ package com.google.devtools.build.lib.rules; import com.google.common.collect.ImmutableMap; -import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; -import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import java.util.TreeMap; +import com.google.devtools.build.lib.packages.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; +import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; /** Provides access to make variables from the current fragments. */ +@SkylarkModule(name = "MakeVariables", doc = "Make variables exposed by the current target.") @Immutable -public final class MakeVariableProvider implements TransitiveInfoProvider { +public final class MakeVariableProvider extends SkylarkClassObject + implements TransitiveInfoProvider { + public static final String SKYLARK_NAME = "MakeVariableInfo"; + + public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR = + new NativeClassObjectConstructor(SKYLARK_NAME) {}; + private final ImmutableMap makeVariables; public MakeVariableProvider(ImmutableMap makeVariables) { + super(SKYLARK_CONSTRUCTOR, ImmutableMap.of()); this.makeVariables = makeVariables; } + @SkylarkCallable( + name = "make_variables", + doc = "Returns the make variables defined by this target.", + structField = true + ) public ImmutableMap getMakeVariables() { return makeVariables; } - - public static ImmutableMap getToolchainMakeVariables( - RuleContext ruleContext, String attributeName) { - // Cannot be an ImmutableMap.Builder because we want to support duplicate keys - TreeMap result = new TreeMap<>(); - for (MakeVariableProvider provider : - ruleContext.getPrerequisites(attributeName, Mode.TARGET, MakeVariableProvider.class)) { - result.putAll(provider.getMakeVariables()); - } - - return ImmutableMap.copyOf(result); - } } -- cgit v1.2.3