CcToolchainProvider does not subclass ToolchainInfo.
Bownstream bazel tests: https://buildkite.com/bazel/bazel-at-head-plus-downstream/builds/1931 (all failures are also in https://buildkite.com/bazel/bazel-at-head-plus-downstream/builds/1930, the nightly).
PiperOrigin-RevId: 359497882
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 588a280..35b525b 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
@@ -35,7 +35,6 @@
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
import com.google.devtools.build.lib.analysis.config.CompilationMode;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.starlark.StarlarkRuleContext;
import com.google.devtools.build.lib.analysis.stringtemplate.ExpansionException;
import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector;
@@ -978,8 +977,7 @@
*/
public static String computeCcFlags(RuleContext ruleContext, TransitiveInfoCollection toolchain)
throws RuleErrorException {
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) toolchain.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = toolchain.get(CcToolchainProvider.PROVIDER);
// Determine the original value of CC_FLAGS.
String originalCcFlags = toolchainProvider.getLegacyCcFlagsMakeVariable();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 6cf8a7e..5bcc8f2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -29,7 +29,6 @@
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.starlark.StarlarkActionFactory;
import com.google.devtools.build.lib.analysis.starlark.StarlarkRuleContext;
import com.google.devtools.build.lib.cmdline.Label;
@@ -149,7 +148,7 @@
@Override
public Provider getCcToolchainProvider() {
- return ToolchainInfo.PROVIDER;
+ return CcToolchainProvider.PROVIDER;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index e46d637..40782da 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -100,8 +100,17 @@
ccToolchainProvider,
ruleContext.getRule().getLocation());
+ ToolchainInfo toolchain =
+ new ToolchainInfo(
+ ImmutableMap.<String, Object>builder()
+ .put("cc", ccToolchainProvider)
+ // Add a clear signal that this is a CcToolchainProvider, since just "cc" is
+ // generic enough to possibly be re-used.
+ .put("cc_provider_in_toolchain", true)
+ .build());
ruleConfiguredTargetBuilder
.addNativeDeclaredProvider(ccToolchainProvider)
+ .addNativeDeclaredProvider(toolchain)
.addNativeDeclaredProvider(templateVariableInfo)
.setFilesToBuild(ccToolchainProvider.getAllFiles())
.addProvider(new MiddlemanProvider(ccToolchainProvider.getAllFilesMiddleman()));
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 39e57a4..632ba73 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
@@ -23,13 +23,14 @@
import com.google.devtools.build.lib.analysis.RuleErrorConsumer;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.Depset;
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.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.cpp.CcToolchain.AdditionalBuildVariablesComputer;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
@@ -46,15 +47,17 @@
/** Information about a C++ compiler used by the <code>cc_*</code> rules. */
@Immutable
@AutoCodec
-public final class CcToolchainProvider extends ToolchainInfo
+public final class CcToolchainProvider extends NativeInfo
implements CcToolchainProviderApi<
FeatureConfigurationForStarlark, BranchFdoProfile, FdoContext>,
HasCcToolchainLabel {
+ public static final BuiltinProvider<CcToolchainProvider> PROVIDER =
+ new BuiltinProvider<CcToolchainProvider>("CcToolchainInfo", CcToolchainProvider.class) {};
+
/** An empty toolchain to be returned in the error case (instead of null). */
public static final CcToolchainProvider EMPTY_TOOLCHAIN_IS_ERROR =
new CcToolchainProvider(
- /* values= */ ImmutableMap.of(),
/* cppConfiguration= */ null,
/* toolchainFeatures= */ null,
/* crosstoolTopPathFragment= */ null,
@@ -193,7 +196,6 @@
private final String gcovExecutable;
public CcToolchainProvider(
- ImmutableMap<String, Object> values,
@Nullable CppConfiguration cppConfiguration,
CcToolchainFeatures toolchainFeatures,
PathFragment crosstoolTopPathFragment,
@@ -257,7 +259,7 @@
String stripExecutable,
String ldExecutable,
String gcovExecutable) {
- super(values);
+ super();
this.cppConfiguration = cppConfiguration;
this.crosstoolTopPathFragment = crosstoolTopPathFragment;
this.allFiles = Preconditions.checkNotNull(allFiles);
@@ -327,6 +329,11 @@
this.gcovExecutable = gcovExecutable;
}
+ @Override
+ public BuiltinProvider<CcToolchainProvider> getProvider() {
+ return PROVIDER;
+ }
+
/**
* See {@link #usePicForDynamicLibraries(FeatureConfigurationForStarlark)}. This method is there
* only to serve Starlark callers.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
index 4f16ad3..aad0b90 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
@@ -189,7 +189,6 @@
attributes.getAllowlistForLooseHeaderCheck();
return new CcToolchainProvider(
- /* values= */ ImmutableMap.of(),
cppConfiguration,
toolchainFeatures,
toolsDirectory,
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 f1cbe9e..92a373c 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
@@ -25,7 +25,6 @@
import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.BuiltinProvider;
@@ -59,10 +58,7 @@
// toolchains and provide it here as well.
ccToolchainProvider =
selectCcToolchain(
- CcToolchainProvider.class,
- // TOOD(b/17906781): Change this to CcToolchainProvider when CcToolchainProvider isn't
- // a subclass of ToolchainInfo.
- ToolchainInfo.PROVIDER,
+ CcToolchainProvider.PROVIDER,
ruleContext,
transformedCpu,
compiler,
@@ -72,7 +68,6 @@
// and providing CcToolchainInfo.
CcToolchainAttributesProvider selectedAttributes =
selectCcToolchain(
- CcToolchainAttributesProvider.class,
CcToolchainAttributesProvider.PROVIDER,
ruleContext,
transformedCpu,
@@ -110,9 +105,7 @@
}
private <T extends HasCcToolchainLabel> T selectCcToolchain(
- Class<T> clazz,
- // TOOD(b/17906781): Change the type to T when CcToolchainprovider has its own provider type.
- BuiltinProvider<?> providerType,
+ BuiltinProvider<T> providerType,
RuleContext ruleContext,
String cpu,
String compiler,
@@ -120,14 +113,14 @@
throws RuleErrorException {
T selectedAttributes = null;
for (TransitiveInfoCollection dep : ruleContext.getPrerequisiteMap("toolchains").values()) {
- T attributes = clazz.cast(dep.get(providerType));
+ T attributes = dep.get(providerType);
if (attributes != null && attributes.getCcToolchainLabel().equals(selectedCcToolchain)) {
selectedAttributes = attributes;
break;
}
}
if (selectedAttributes != null) {
- return clazz.cast(selectedAttributes);
+ return selectedAttributes;
}
String errorMessage =
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 c130ccc..9f1f8ae 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
@@ -350,17 +350,24 @@
private static CcToolchainProvider getToolchainFromPlatformConstraints(
RuleContext ruleContext, Label toolchainType) {
- return (CcToolchainProvider) ruleContext.getToolchainContext().forToolchainType(toolchainType);
+ ToolchainInfo toolchainInfo = ruleContext.getToolchainContext().forToolchainType(toolchainType);
+ try {
+ return (CcToolchainProvider) toolchainInfo.getValue("cc");
+ } catch (EvalException e) {
+ // There is not actually any reason for toolchainInfo.getValue to throw an exception.
+ ruleContext.ruleError("Unexpected eval exception from toolchainInfo.getValue('cc')");
+ return CcToolchainProvider.EMPTY_TOOLCHAIN_IS_ERROR;
+ }
}
private static CcToolchainProvider getToolchainFromCrosstoolTop(
RuleContext ruleContext, TransitiveInfoCollection dep) {
// TODO(bazel-team): Consider checking this generally at the attribute level.
- if ((dep == null) || (dep.get(ToolchainInfo.PROVIDER) == null)) {
+ if ((dep == null) || (dep.get(CcToolchainProvider.PROVIDER) == null)) {
ruleContext.ruleError("The selected C++ toolchain is not a cc_toolchain rule");
return CcToolchainProvider.EMPTY_TOOLCHAIN_IS_ERROR;
}
- return (CcToolchainProvider) dep.get(ToolchainInfo.PROVIDER);
+ return dep.get(CcToolchainProvider.PROVIDER);
}
/** Returns the directory where object files are created. */
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 1329eb5..7a8695f 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
@@ -31,7 +31,6 @@
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
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.BuiltinProvider;
@@ -58,14 +57,13 @@
*/
static ImmutableMap<BuildConfiguration, CcToolchainProvider> getChildConfigurationsAndToolchains(
RuleContext ruleContext) {
- ImmutableListMultimap<BuildConfiguration, ToolchainInfo> configToProvider =
+ ImmutableListMultimap<BuildConfiguration, CcToolchainProvider> configToProvider =
ruleContext.getPrerequisitesByConfiguration(
- ObjcRuleClasses.CHILD_CONFIG_ATTR, ToolchainInfo.PROVIDER);
+ ObjcRuleClasses.CHILD_CONFIG_ATTR, CcToolchainProvider.PROVIDER);
ImmutableMap.Builder<BuildConfiguration, CcToolchainProvider> result = ImmutableMap.builder();
for (BuildConfiguration config : configToProvider.keySet()) {
- CcToolchainProvider toolchain =
- (CcToolchainProvider) Iterables.getOnlyElement(configToProvider.get(config));
+ CcToolchainProvider toolchain = Iterables.getOnlyElement(configToProvider.get(config));
result.put(config, toolchain);
}
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
index f64aa5e..2a83c55 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java
@@ -17,7 +17,7 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.docgen.annot.DocCategory;
import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.starlarkbuildapi.platform.ToolchainInfoApi;
+import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import javax.annotation.Nullable;
import net.starlark.java.annot.Param;
import net.starlark.java.annot.StarlarkBuiltin;
@@ -34,7 +34,7 @@
FeatureConfigurationT extends FeatureConfigurationApi,
BranchFdoProfileT extends BranchFdoProfileApi,
FdoContextT extends FdoContextApi<BranchFdoProfileT>>
- extends ToolchainInfoApi {
+ extends StructApi {
@StarlarkMethod(
name = "needs_pic_for_dynamic_libraries",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
index bacc1b9..7ff9a85 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -190,7 +190,6 @@
srcs = ["CcHostToolchainAliasTest.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
- "//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/test/java/com/google/devtools/build/lib/analysis/util",
@@ -306,7 +305,6 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
- "//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/packages",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
@@ -325,6 +323,7 @@
srcs = ["CcToolchainSelectionTest.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
+ "//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/test/java/com/google/devtools/build/lib/analysis/util",
@@ -353,7 +352,6 @@
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
- "//src/main/java/com/google/devtools/build/lib/analysis/platform",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/common/options",
"//src/test/java/com/google/devtools/build/lib/actions/util",
@@ -455,7 +453,6 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
- "//src/main/java/com/google/devtools/build/lib/analysis/platform",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/test/java/com/google/devtools/build/lib/actions/util",
"//src/test/java/com/google/devtools/build/lib/analysis/util",
@@ -484,7 +481,6 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration",
- "//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/test/java/com/google/devtools/build/lib/analysis/util",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasTest.java
index 26ca74b..b50eb77 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasTest.java
@@ -17,7 +17,6 @@
import static com.google.common.truth.Truth.assertThat;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.util.MockCcSupport;
@@ -34,8 +33,7 @@
scratch.file("a/BUILD", "cc_host_toolchain_alias(name='current_cc_host_toolchain')");
ConfiguredTarget target = getConfiguredTarget("//a:current_cc_host_toolchain");
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(toolchainProvider.isToolConfiguration()).isTrue();
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
index a5513ce..95f9c0d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
@@ -19,7 +19,6 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
@@ -89,7 +88,6 @@
assertThat(info.getValue("sysroot")).isEqualTo("/usr/grte/v1");
- @SuppressWarnings("unchecked")
boolean usePicForDynamicLibraries = (boolean) info.getValue("use_pic_for_dynamic_libraries");
assertThat(usePicForDynamicLibraries).isTrue();
}
@@ -263,8 +261,7 @@
useConfiguration("--cpu=banana");
ConfiguredTarget target = getConfiguredTarget("//suite");
RuleContext ruleContext = getRuleContext(target);
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(
toolchainProvider
@@ -321,7 +318,7 @@
"com/google/devtools/build/lib/analysis/mock/cc_toolchain_config.bzl"));
useConfiguration("--cpu=k8", "--host_cpu=k8");
CcToolchainProvider ccToolchainProvider =
- (CcToolchainProvider) getConfiguredTarget("//a:a").get(ToolchainInfo.PROVIDER);
+ getConfiguredTarget("//a:a").get(CcToolchainProvider.PROVIDER);
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
ccToolchainProvider.addGlobalMakeVariables(builder);
assertThat(builder.build().get("GCOVTOOL")).isNull();
@@ -372,7 +369,7 @@
"com/google/devtools/build/lib/analysis/mock/cc_toolchain_config.bzl"));
useConfiguration("--cpu=k8", "--host_cpu=k8");
CcToolchainProvider ccToolchainProvider =
- (CcToolchainProvider) getConfiguredTarget("//a:a").get(ToolchainInfo.PROVIDER);
+ getConfiguredTarget("//a:a").get(CcToolchainProvider.PROVIDER);
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
ccToolchainProvider.addGlobalMakeVariables(builder);
assertThat(builder.build().get("GCOVTOOL")).isNotNull();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java
index 6b4dd9a..7f05a2c 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java
@@ -18,6 +18,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.analysis.util.ScratchAttributeWriter;
import com.google.devtools.build.lib.cmdline.Label;
@@ -51,11 +52,11 @@
ScratchAttributeWriter.fromLabelString(this, "cc_library", "//lib")
.setList("srcs", "a.cc")
.write();
- CcToolchainProvider toolchain =
- (CcToolchainProvider)
- getRuleContext(target)
- .getToolchainContext()
- .forToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE, ImmutableMap.of()));
+ ToolchainInfo toolchainInfo =
+ getRuleContext(target)
+ .getToolchainContext()
+ .forToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE, ImmutableMap.of()));
+ CcToolchainProvider toolchain = (CcToolchainProvider) toolchainInfo.getValue("cc");
assertThat(toolchain.getCompilerFiles().getSingleton().getExecPathString()).endsWith("k8");
}
@@ -69,11 +70,11 @@
ScratchAttributeWriter.fromLabelString(this, "cc_library", "//lib")
.setList("srcs", "a.cc")
.write();
- CcToolchainProvider toolchain =
- (CcToolchainProvider)
- getRuleContext(target)
- .getToolchainContext()
- .forToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE, ImmutableMap.of()));
+ ToolchainInfo toolchainInfo =
+ getRuleContext(target)
+ .getToolchainContext()
+ .forToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE, ImmutableMap.of()));
+ CcToolchainProvider toolchain = (CcToolchainProvider) toolchainInfo.getValue("cc");
assertThat(toolchain.getToolchainIdentifier()).endsWith("k8");
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
index 5c5031d..92bf287 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java
@@ -29,7 +29,6 @@
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.packages.util.Crosstool.CcToolchainConfig;
import com.google.devtools.build.lib.packages.util.MockCcSupport;
@@ -71,8 +70,7 @@
invalidatePackages();
ConfiguredTarget target = getConfiguredTarget("//a:b");
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(
CppHelper.useInterfaceSharedLibraries(
getConfiguration(target).getFragment(CppConfiguration.class),
@@ -83,7 +81,7 @@
useConfiguration();
invalidatePackages();
target = getConfiguredTarget("//a:b");
- toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(
CppHelper.useInterfaceSharedLibraries(
getConfiguration(target).getFragment(CppConfiguration.class),
@@ -94,7 +92,7 @@
useConfiguration("--nointerface_shared_objects");
invalidatePackages();
target = getConfiguredTarget("//a:b");
- toolchainProvider = (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(
CppHelper.useInterfaceSharedLibraries(
getConfiguration(target).getFragment(CppConfiguration.class),
@@ -184,8 +182,7 @@
private boolean usePicForBinariesWithConfiguration(String... configuration) throws Exception {
useConfiguration(configuration);
ConfiguredTarget target = getConfiguredTarget("//a:b");
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
CppConfiguration cppConfiguration = getRuleContext(target).getFragment(CppConfiguration.class);
FeatureConfiguration featureConfiguration =
CcCommon.configureFeaturesOrThrowEvalException(
@@ -398,7 +395,7 @@
public void testToolchainAlias() throws Exception {
ConfiguredTarget reference = scratchConfiguredTarget("a", "ref",
"cc_toolchain_alias(name='ref')");
- assertThat(reference.get(ToolchainInfo.PROVIDER.getKey())).isNotNull();
+ assertThat(reference.get(CcToolchainProvider.PROVIDER.getKey())).isNotNull();
}
@Test
@@ -549,8 +546,7 @@
ConfiguredTarget target = getConfiguredTarget("//a:a");
RuleContext ruleContext = getRuleContext(target);
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(toolchainProvider.getToolPathFragment(Tool.AR, ruleContext).toString())
.isEqualTo("/absolute/path");
assertThat(toolchainProvider.getToolPathFragment(Tool.CPP, ruleContext).toString())
@@ -647,8 +643,7 @@
scratch.file("a/BUILD", "cc_toolchain_alias(name = 'b')");
ConfiguredTarget target = getConfiguredTarget("//a:b");
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(toolchainProvider.supportsDynamicLinker(FeatureConfiguration.EMPTY)).isFalse();
}
@@ -660,8 +655,7 @@
scratch.file("libc1/header1.h", "#define FOO 1");
useConfiguration();
ConfiguredTarget target = getConfiguredTarget("//a:b");
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
assertThat(toolchainProvider.getSysroot()).isEqualTo("/usr/grte/v1");
}
@@ -681,8 +675,7 @@
CcToolchainConfig.builder().withFeatures(CppRuleClasses.SUPPORTS_DYNAMIC_LINKER));
useConfiguration("--incompatible_use_specific_tool_files");
ConfiguredTarget target = getConfiguredTarget("//a:a");
- CcToolchainProvider toolchainProvider =
- (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER);
+ CcToolchainProvider toolchainProvider = target.get(CcToolchainProvider.PROVIDER);
// Check that the mock toolchain tool file sets are an antichain, so that our subset assertions
// below are meaningful.
ImmutableList<Set<Artifact>> fileGroups =
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java
index d194337..09ba3b3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkstampCompileHelperTest.java
@@ -23,7 +23,6 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.packages.util.Crosstool.CcToolchainConfig;
@@ -67,10 +66,9 @@
(CppCompileAction) getGeneratingAction(compiledLinkstamp);
CcToolchainProvider ccToolchainProvider =
- (CcToolchainProvider)
- getConfiguredTarget(
- ruleClassProvider.getToolsRepository() + "//tools/cpp:current_cc_toolchain")
- .get(ToolchainInfo.PROVIDER);
+ getConfiguredTarget(
+ ruleClassProvider.getToolsRepository() + "//tools/cpp:current_cc_toolchain")
+ .get(CcToolchainProvider.PROVIDER);
List<String> arguments = linkstampCompileAction.getArguments();
assertThatArgumentsAreValid(
@@ -128,10 +126,9 @@
CppCompileAction linkstampCompileAction =
(CppCompileAction) getGeneratingAction(compiledLinkstamp);
CcToolchainProvider ccToolchainProvider =
- (CcToolchainProvider)
- getConfiguredTarget(
- ruleClassProvider.getToolsRepository() + "//tools/cpp:current_cc_toolchain")
- .get(ToolchainInfo.PROVIDER);
+ getConfiguredTarget(
+ ruleClassProvider.getToolsRepository() + "//tools/cpp:current_cc_toolchain")
+ .get(CcToolchainProvider.PROVIDER);
List<String> arguments = linkstampCompileAction.getArguments();
assertThatArgumentsAreValid(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppSysrootTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppSysrootTest.java
index 300c1ff..2bad023 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppSysrootTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppSysrootTest.java
@@ -21,7 +21,6 @@
import com.google.devtools.build.lib.analysis.ConfigurationMakeVariableContext;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
@@ -62,10 +61,8 @@
CcToolchainProvider getCcToolchainProvider(BuildConfiguration configuration) throws Exception {
CppConfiguration cppConfiguration = configuration.getFragment(CppConfiguration.class);
return Preconditions.checkNotNull(
- (CcToolchainProvider)
- getConfiguredTarget(
- cppConfiguration.getRuleProvidingCcToolchainProvider(), configuration)
- .get(ToolchainInfo.PROVIDER));
+ getConfiguredTarget(cppConfiguration.getRuleProvidingCcToolchainProvider(), configuration)
+ .get(CcToolchainProvider.PROVIDER));
}
@Test
diff --git a/tools/cpp/toolchain_utils.bzl b/tools/cpp/toolchain_utils.bzl
index 098cff7..6b124b9 100644
--- a/tools/cpp/toolchain_utils.bzl
+++ b/tools/cpp/toolchain_utils.bzl
@@ -36,9 +36,12 @@
# Check the incompatible flag for toolchain resolution.
if hasattr(cc_common, "is_cc_toolchain_resolution_enabled_do_not_use") and cc_common.is_cc_toolchain_resolution_enabled_do_not_use(ctx = ctx):
- if "@bazel_tools//tools/cpp:toolchain_type" in ctx.toolchains:
- return ctx.toolchains["@bazel_tools//tools/cpp:toolchain_type"]
- fail("In order to use find_cpp_toolchain, you must include the '@bazel_tools//tools/cpp:toolchain_type' in the toolchains argument to your rule.")
+ if not "@bazel_tools//tools/cpp:toolchain_type" in ctx.toolchains:
+ fail("In order to use find_cpp_toolchain, you must include the '@bazel_tools//tools/cpp:toolchain_type' in the toolchains argument to your rule.")
+ toolchain_info = ctx.toolchains["@bazel_tools//tools/cpp:toolchain_type"]
+ if hasattr(toolchain_info, "cc_provider_in_toolchain") and hasattr(toolchain_info, "cc"):
+ return toolchain_info.cc
+ return toolchain_info
# Fall back to the legacy implicit attribute lookup.
if hasattr(ctx.attr, "_cc_toolchain"):