diff options
author | cpeyser <cpeyser@google.com> | 2017-08-14 18:07:55 +0200 |
---|---|---|
committer | Irina Iancu <elenairina@google.com> | 2017-08-16 11:03:44 +0200 |
commit | 55245e478fcfe8b898e39c7462bc975ba7548325 (patch) | |
tree | 23872b7eb113e87a561a496846ac2341ac681a45 /src | |
parent | c6f85e745b6c342adbb7fc3372b609fcfbded9f6 (diff) |
Make CcToolchainProvider subclass ToolchainInfo. This is required for use of CcToolchainProvider as a "toolchain" in platform-based toolchain resolution.
PiperOrigin-RevId: 165185303
Diffstat (limited to 'src')
10 files changed, 27 insertions, 17 deletions
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<String, Object> toolchainData, Location loc) { + protected ToolchainInfo(Map<String, Object> toolchainData, Location loc) { super( SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>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 <code>cc_*</code> 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<CcToolchainProvider> SKYLARK_CONSTRUCTOR = - new NativeProvider<CcToolchainProvider>(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<String, String> environment, ImmutableList<PathFragment> builtInIncludeDirectories, @Nullable PathFragment sysroot) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(ImmutableMap.<String, Object>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<Artifact> 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<BuildConfiguration, CcToolchainProvider> configToProvider = + ImmutableListMultimap<BuildConfiguration, ToolchainInfo> configToProvider = ruleContext.getPrerequisitesByConfiguration( - ObjcRuleClasses.CHILD_CONFIG_ATTR, Mode.SPLIT, CcToolchainProvider.SKYLARK_CONSTRUCTOR); + ObjcRuleClasses.CHILD_CONFIG_ATTR, Mode.SPLIT, ToolchainInfo.SKYLARK_CONSTRUCTOR); ImmutableMap.Builder<BuildConfiguration, CcToolchainProvider> 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); } diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index 1b06eb2601..c46ba06d85 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -949,6 +949,7 @@ java_test( "//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/cmdline", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/common/options", diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java index 721045493f..0f0df4484a 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.analysis.MakeVariableProvider; import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; +import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; @@ -161,7 +162,8 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase { private CcToolchainProvider getCcToolchainProvider(CppConfiguration cppConfiguration) throws Exception { - return getCcToolchainTarget(cppConfiguration).get(CcToolchainProvider.SKYLARK_CONSTRUCTOR); + return (CcToolchainProvider) + getCcToolchainTarget(cppConfiguration).get(ToolchainInfo.SKYLARK_CONSTRUCTOR); } /** @@ -488,7 +490,8 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase { CppConfiguration toolchainA = create(loader, "--cpu=piii", "--host_cpu=piii", "--android_cpu=", "--fat_apk_cpu="); ConfiguredTarget ccToolchainA = getCcToolchainTarget(toolchainA); - CcToolchainProvider ccProviderA = ccToolchainA.get(CcToolchainProvider.SKYLARK_CONSTRUCTOR); + CcToolchainProvider ccProviderA = + (CcToolchainProvider) ccToolchainA.get(ToolchainInfo.SKYLARK_CONSTRUCTOR); MakeVariableProvider makeProviderA = ccToolchainA.get(MakeVariableProvider.SKYLARK_CONSTRUCTOR); assertThat(toolchainA.getToolchainIdentifier()).isEqualTo("toolchain-identifier-A"); assertThat(toolchainA.getHostSystemName()).isEqualTo("host-system-name-A"); |