From 55245e478fcfe8b898e39c7462bc975ba7548325 Mon Sep 17 00:00:00 2001 From: cpeyser Date: Mon, 14 Aug 2017 18:07:55 +0200 Subject: Make CcToolchainProvider subclass ToolchainInfo. This is required for use of CcToolchainProvider as a "toolchain" in platform-based toolchain resolution. PiperOrigin-RevId: 165185303 --- .../devtools/build/lib/analysis/platform/ToolchainInfo.java | 2 +- src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD | 1 + .../com/google/devtools/build/lib/rules/cpp/CcCommon.java | 4 +++- .../devtools/build/lib/rules/cpp/CcToolchainProvider.java | 11 ++++------- .../google/devtools/build/lib/rules/cpp/CcToolchainSuite.java | 4 +++- .../com/google/devtools/build/lib/rules/cpp/CppHelper.java | 5 +++-- src/main/java/com/google/devtools/build/lib/rules/objc/BUILD | 1 + .../devtools/build/lib/rules/objc/MultiArchBinarySupport.java | 8 +++++--- 8 files changed, 21 insertions(+), 15 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java index dcdde460bc..5bd069e7c7 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java @@ -67,7 +67,7 @@ public class ToolchainInfo extends Info { } }; - private ToolchainInfo(Map toolchainData, Location loc) { + protected ToolchainInfo(Map toolchainData, Location loc) { super( SKYLARK_CONSTRUCTOR, ImmutableMap.builder().putAll(toolchainData).build(), diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD index 15011dc109..0ef5625ecd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -24,6 +24,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:util", "//src/main/java/com/google/devtools/build/lib:vfs", "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//src/main/java/com/google/devtools/build/skyframe", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", 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 80ee0abb60..7a28ba98e7 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 @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.analysis.MakeVariableSupplier; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; +import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector.LocalMetadataCollector; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider; @@ -683,7 +684,8 @@ public final class CcCommon { * toolchain. */ public static String computeCcFlags(RuleContext ruleContext, TransitiveInfoCollection toolchain) { - CcToolchainProvider toolchainProvider = toolchain.get(CcToolchainProvider.SKYLARK_CONSTRUCTOR); + CcToolchainProvider toolchainProvider = + (CcToolchainProvider) toolchain.get(ToolchainInfo.SKYLARK_CONSTRUCTOR); FeatureConfiguration featureConfiguration = CcCommon.configureFeatures(ruleContext, toolchainProvider); if (!featureConfiguration.actionIsConfigured( diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java index 8eb12d6270..4a7cc2d2d4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java @@ -17,12 +17,12 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.config.CompilationMode; +import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.Info; -import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.util.Pair; @@ -34,12 +34,9 @@ import javax.annotation.Nullable; /** Information about a C++ compiler used by the cc_* rules. */ @SkylarkModule(name = "CcToolchainInfo", doc = "Information about the C++ compiler being used.") @Immutable -public final class CcToolchainProvider extends Info { +public final class CcToolchainProvider extends ToolchainInfo { public static final String SKYLARK_NAME = "CcToolchainInfo"; - public static final NativeProvider SKYLARK_CONSTRUCTOR = - new NativeProvider(CcToolchainProvider.class, SKYLARK_NAME) {}; - /** An empty toolchain to be returned in the error case (instead of null). */ public static final CcToolchainProvider EMPTY_TOOLCHAIN_IS_ERROR = new CcToolchainProvider( @@ -124,7 +121,7 @@ public final class CcToolchainProvider extends Info { ImmutableMap environment, ImmutableList builtInIncludeDirectories, @Nullable PathFragment sysroot) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.of()); + super(ImmutableMap.of(), Location.BUILTIN); this.cppConfiguration = cppConfiguration; this.crosstool = Preconditions.checkNotNull(crosstool); this.crosstoolMiddleman = Preconditions.checkNotNull(crosstoolMiddleman); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java index 7e20501907..fd9db56cbb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java @@ -20,6 +20,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; +import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; /** @@ -36,7 +37,8 @@ public class CcToolchainSuite implements RuleConfiguredTargetFactory { throws InterruptedException, RuleErrorException { NestedSetBuilder filesToBuild = NestedSetBuilder.stableOrder(); for (TransitiveInfoCollection dep : ruleContext.getPrerequisiteMap("toolchains").values()) { - CcToolchainProvider provider = dep.get(CcToolchainProvider.SKYLARK_CONSTRUCTOR); + CcToolchainProvider provider = + (CcToolchainProvider) dep.get(ToolchainInfo.SKYLARK_CONSTRUCTOR); if (provider != null) { filesToBuild.addTransitive(provider.getCrosstool()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index e4722e022a..596a991fde 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.actions.SymlinkAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -319,11 +320,11 @@ public class CppHelper { public static CcToolchainProvider getToolchain(RuleContext ruleContext, TransitiveInfoCollection dep) { // TODO(bazel-team): Consider checking this generally at the attribute level. - if ((dep == null) || (dep.get(CcToolchainProvider.SKYLARK_CONSTRUCTOR) == null)) { + if ((dep == null) || (dep.get(ToolchainInfo.SKYLARK_CONSTRUCTOR) == null)) { ruleContext.ruleError("The selected C++ toolchain is not a cc_toolchain rule"); return CcToolchainProvider.EMPTY_TOOLCHAIN_IS_ERROR; } - return dep.get(CcToolchainProvider.SKYLARK_CONSTRUCTOR); + return (CcToolchainProvider) dep.get(ToolchainInfo.SKYLARK_CONSTRUCTOR); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD index 4d3bdace65..45ed097562 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD @@ -23,6 +23,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:util", "//src/main/java/com/google/devtools/build/lib:vfs", "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/common/options", diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java index 6cf378355a..a8a095f9af 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java @@ -26,6 +26,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; @@ -54,13 +55,14 @@ public class MultiArchBinarySupport { // This is currently a hack to obtain all child configurations regardless of the attribute // values of this rule -- this rule does not currently use the actual info provided by // this attribute. b/28403953 tracks cc toolchain usage. - ImmutableListMultimap configToProvider = + ImmutableListMultimap configToProvider = ruleContext.getPrerequisitesByConfiguration( - ObjcRuleClasses.CHILD_CONFIG_ATTR, Mode.SPLIT, CcToolchainProvider.SKYLARK_CONSTRUCTOR); + ObjcRuleClasses.CHILD_CONFIG_ATTR, Mode.SPLIT, ToolchainInfo.SKYLARK_CONSTRUCTOR); ImmutableMap.Builder result = ImmutableMap.builder(); for (BuildConfiguration config : configToProvider.keySet()) { - CcToolchainProvider toolchain = Iterables.getOnlyElement(configToProvider.get(config)); + CcToolchainProvider toolchain = + (CcToolchainProvider) Iterables.getOnlyElement(configToProvider.get(config)); result.put(config, toolchain); } -- cgit v1.2.3