From f59038d2a46937287ab25316676287905ab67009 Mon Sep 17 00:00:00 2001 From: hlopko Date: Fri, 1 Mar 2019 11:56:34 -0800 Subject: [PATCH] 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 --- .../lib/rules/cpp/CcToolchainProvider.java | 6 ++++ .../cpp/CcToolchainProviderApi.java | 9 ++++++ .../lib/rules/cpp/SkylarkCcCommonTest.java | 30 +++++++++++++++++++ 3 files changed, 45 insertions(+) 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 8ff522e0502bee..b04cf4c05e4688 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 @@ public ImmutableList getBuiltInIncludeDirectoriesAsStrings() { .collect(ImmutableList.toImmutableList()); } + @Override + public SkylarkNestedSet getAllFilesForStarlark() { + return SkylarkNestedSet.of(Artifact.class, getAllFiles()); + } + public ImmutableList 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 edeb44a78beaf5..816a134719254c 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; @@ -60,6 +61,14 @@ public interface CcToolchainProviderApi 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, 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 572bf950015db5..4c6a48109bdf90 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 @@ -73,6 +73,36 @@ public void setSkylarkSemanticsOptions() throws Exception { invalidatePackages(); } + @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(