Add `CcToolchainInfo.all_files` field
Previously, we accessed that information from TransitiveInfoCollection, but when we migrate to platforms/toolchains we only have access to the toolchain provider. This cl adds a field on the `CcToolchainInfo` so we can migrate C++ rules to platforms/toolchains.
https://github.com/bazelbuild/bazel/issues/6516
RELNOTES: None.
PiperOrigin-RevId: 236351968
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 8ff522e..b04cf4c 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
@@ -37,6 +37,7 @@
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
@@ -362,6 +363,11 @@
.collect(ImmutableList.toImmutableList());
}
+ @Override
+ public SkylarkNestedSet getAllFilesForStarlark() {
+ return SkylarkNestedSet.of(Artifact.class, getAllFiles());
+ }
+
public ImmutableList<PathFragment> getBuiltInIncludeDirectories() {
return builtInIncludeDirectories;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java
index edeb44a..816a134 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java
@@ -19,6 +19,7 @@
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
import javax.annotation.Nullable;
@@ -61,6 +62,14 @@
public ImmutableList<String> getBuiltInIncludeDirectoriesAsStrings();
@SkylarkCallable(
+ name = "all_files",
+ doc =
+ "Returns all toolchain files (so they can be passed to actions using this "
+ + "toolchain as inputs).",
+ structField = true)
+ public SkylarkNestedSet getAllFilesForStarlark();
+
+ @SkylarkCallable(
name = "sysroot",
structField = true,
allowReturnNones = true,
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
index 572bf95..4c6a481 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
@@ -74,6 +74,36 @@
}
@Test
+ public void testAllFiles() throws Exception {
+ scratch.file(
+ "a/BUILD",
+ "load(':rule.bzl', 'crule')",
+ "cc_toolchain_alias(name='alias')",
+ "crule(name='r')");
+
+ scratch.file(
+ "a/rule.bzl",
+ "def _impl(ctx):",
+ " toolchain = ctx.attr._cc_toolchain[cc_common.CcToolchainInfo]",
+ " return struct(all_files = toolchain.all_files)",
+ "crule = rule(",
+ " _impl,",
+ " attrs = { ",
+ " '_cc_toolchain': attr.label(default=Label('//a:alias'))",
+ " },",
+ ");");
+
+ ConfiguredTarget r = getConfiguredTarget("//a:r");
+ @SuppressWarnings("unchecked")
+ SkylarkNestedSet allFiles = (SkylarkNestedSet) r.get("all_files");
+ RuleContext ruleContext = getRuleContext(r);
+ CcToolchainProvider toolchain =
+ CppHelper.getToolchain(
+ ruleContext, ruleContext.getPrerequisite("$cc_toolchain", Mode.TARGET));
+ assertThat(allFiles.getSet(Artifact.class)).isEqualTo(toolchain.getAllFiles());
+ }
+
+ @Test
public void testGetToolForAction() throws Exception {
scratch.file(
"a/BUILD",