Add `BuildInfo` translator target to `cc_toolchain`.
PiperOrigin-RevId: 567596098
Change-Id: Ia24f9275e2320093223e7d7f427a0b3553726ac6
diff --git a/src/create_embedded_tools.py b/src/create_embedded_tools.py
index 3b4d59d..1bac79f 100644
--- a/src/create_embedded_tools.py
+++ b/src/create_embedded_tools.py
@@ -38,6 +38,10 @@
'*tools/build_defs/build_info/BUILD.tools',
lambda x: 'tools/build_defs/build_info/BUILD',
),
+ (
+ '*tools/build_defs/build_info/templates/BUILD.tools',
+ lambda x: 'tools/build_defs/build_info/templates/BUILD',
+ ),
('*tools/j2objc/BUILD.tools', lambda x: 'tools/j2objc/BUILD'),
('*tools/platforms/*', lambda x: 'platforms/' + os.path.basename(x)),
('*tools/cpp/BUILD.tools', lambda x: 'tools/cpp/BUILD'),
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
index b8b4e8c..c42c4e4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
@@ -116,7 +116,8 @@
PRIVATE_BUILDINFO_API_ALLOWLIST =
ImmutableSet.of(
BuiltinRestriction.allowlistEntry("", "test"), // for tests
- BuiltinRestriction.allowlistEntry("", "tools/build_defs/build_info"));
+ BuiltinRestriction.allowlistEntry("", "tools/build_defs/build_info"),
+ BuiltinRestriction.allowlistEntry("bazel_tools", "tools/build_defs/build_info"));
public StarlarkActionFactory(StarlarkActionContext context) {
this.context = context;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java
index 58c3ba0..1fd8066 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcStarlarkInternal.java
@@ -272,7 +272,8 @@
/* stripExecutable= */ stripExecutable,
/* ldExecutable= */ ldExecutable,
/* gcovExecutable= */ gcovExecutable,
- /* ccToolchainBuildVariablesFunc */ attributes.getCcToolchainBuildVariablesFunc());
+ /* ccToolchainBuildVariablesFunc */ attributes.getCcToolchainBuildVariablesFunc(),
+ /* ccBuildInfoTranslator */ attributes.getCcBuildInfoTranslator());
}
@StarlarkMethod(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
index c275bf2..f91a38e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
@@ -24,6 +24,7 @@
import com.google.devtools.build.lib.analysis.LicensesProvider;
import com.google.devtools.build.lib.analysis.LicensesProvider.TargetLicense;
import com.google.devtools.build.lib.analysis.LicensesProviderImpl;
+import com.google.devtools.build.lib.analysis.OutputGroupInfo;
import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
@@ -105,6 +106,7 @@
private final StarlarkFunction ccToolchainBuildVariablesFunc;
private final String lateBoundLibc;
private final String lateBoundTargetLibc;
+ private final OutputGroupInfo ccBuildInfoTranslator;
public CcToolchainAttributesProvider(
RuleContext ruleContext,
@@ -230,6 +232,8 @@
Allowlist.fetchPackageSpecificationProvider(
ruleContext, CcToolchainRule.LOOSE_HEADER_CHECK_ALLOWLIST);
this.ccToolchainBuildVariablesFunc = ccToolchainBuildVariablesFunc;
+ this.ccBuildInfoTranslator =
+ OutputGroupInfo.get(ruleContext.getPrerequisite("$build_info_translator"));
}
// This is to avoid Starlark limitation of not being able to have complex logic in configuration
@@ -574,6 +578,10 @@
return allowlistForLooseHeaderCheck;
}
+ public OutputGroupInfo getCcBuildInfoTranslator() {
+ return ccBuildInfoTranslator;
+ }
+
private static NestedSet<Artifact> getFiles(RuleContext context, String attribute) {
TransitiveInfoCollection dep = context.getPrerequisite(attribute);
return dep.getProvider(FileProvider.class).getFilesToBuild();
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 a6ea7a5..89ad7db 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
@@ -19,6 +19,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.LicensesProvider;
+import com.google.devtools.build.lib.analysis.OutputGroupInfo;
import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
import com.google.devtools.build.lib.analysis.RuleErrorConsumer;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
@@ -62,7 +63,8 @@
StarlarkRuleContext,
InvalidConfigurationException,
CppConfiguration,
- CcToolchainVariables>,
+ CcToolchainVariables,
+ OutputGroupInfo>,
HasCcToolchainLabel {
public static final BuiltinProvider<CcToolchainProvider> PROVIDER =
@@ -139,6 +141,7 @@
private final String ldExecutable;
private final String gcovExecutable;
private final StarlarkFunction ccToolchainBuildVariablesFunc;
+ private final OutputGroupInfo ccBuildInfoTranslator;
public CcToolchainProvider(
@Nullable CppConfiguration cppConfiguration,
@@ -202,7 +205,8 @@
String stripExecutable,
String ldExecutable,
String gcovExecutable,
- StarlarkFunction ccToolchainBuildVariablesFunc) {
+ StarlarkFunction ccToolchainBuildVariablesFunc,
+ OutputGroupInfo ccBuildInfoTranslator) {
super();
this.cppConfiguration = cppConfiguration;
this.crosstoolTopPathFragment = crosstoolTopPathFragment;
@@ -270,6 +274,7 @@
this.gcovExecutable = gcovExecutable;
this.grepIncludes = grepIncludes;
this.ccToolchainBuildVariablesFunc = ccToolchainBuildVariablesFunc;
+ this.ccBuildInfoTranslator = ccBuildInfoTranslator;
}
@Override
@@ -1064,4 +1069,15 @@
public PackageSpecificationProvider getAllowlistForLooseHeaderCheck() {
return allowListForLooseHeaderCheck;
}
+
+ public OutputGroupInfo getCcBuildInfoTranslator() {
+ return ccBuildInfoTranslator;
+ }
+
+ @Override
+ public OutputGroupInfo getCcBuildInfoTranslatorForStarlark(StarlarkThread thread)
+ throws EvalException {
+ CcModule.checkPrivateStarlarkificationAllowlist(thread);
+ return getCcBuildInfoTranslator();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
index e407595..0e62486 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
@@ -41,7 +41,8 @@
StarlarkRuleContextT,
?,
? extends CppConfigurationApi<?>,
- CcToolchainVariablesT>,
+ CcToolchainVariablesT,
+ ?>,
FeatureConfigurationT extends FeatureConfigurationApi,
CompilationContextT extends CcCompilationContextApi<FileT, CppModuleMapT>,
CompilationOutputsT extends CcCompilationOutputsApi<FileT>,
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
index aa8a59f..7d74818 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcBootstrap.java
@@ -54,6 +54,7 @@
? extends StarlarkRuleContextApi<? extends ConstraintValueInfoApi>,
?,
? extends CppConfigurationApi<?>,
+ ?,
?>,
? extends FeatureConfigurationApi,
? extends
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
index c6d1842..f9eac7c 100755
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java
@@ -55,7 +55,8 @@
StarlarkRuleContextT,
?,
? extends CppConfigurationApi<?>,
- CcToolchainVariablesT>,
+ CcToolchainVariablesT,
+ ?>,
FeatureConfigurationT extends FeatureConfigurationApi,
CompilationContextT extends CcCompilationContextApi<FileT, CppModuleMapT>,
LtoBackendArtifactsT extends LtoBackendArtifactsApi<FileT>,
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 d2743f57..3d915c6 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,6 +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.OutputGroupInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
@@ -41,7 +42,8 @@
StarlarkRuleContextT extends StarlarkRuleContextApi<ConstraintValueT>,
InvalidConfigurationExceptionT extends Exception,
CppConfigurationT extends CppConfigurationApi<InvalidConfigurationExceptionT>,
- CcToolchainVariablesT extends CcToolchainVariablesApi>
+ CcToolchainVariablesT extends CcToolchainVariablesApi,
+ OutputGroupInfoT extends OutputGroupInfoApi>
extends StructApi {
@StarlarkMethod(
@@ -307,4 +309,7 @@
CppConfigurationT cppConfiguration,
StarlarkThread thread)
throws EvalException, InterruptedException;
+
+ @StarlarkMethod(name = "build_info_files", documented = false, useStarlarkThread = true)
+ OutputGroupInfoT getCcBuildInfoTranslatorForStarlark(StarlarkThread thread) throws EvalException;
}
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
index 6e43499..85b952f 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/WrapCcHelperApi.java
@@ -49,6 +49,7 @@
starlarkRuleContextT,
?,
? extends CppConfigurationApi<?>,
+ ?,
?>,
CompilationInfoT extends CompilationInfoApi<FileT>,
FileT extends FileApi,
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl
index 78ab88f..99ddb18 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl
@@ -191,6 +191,10 @@
providers = [PackageSpecificationInfo],
cfg = "exec",
),
+ "_build_info_translator": attr.label(
+ default = semantics.BUILD_INFO_TRANLATOR_LABEL,
+ providers = [OutputGroupInfo],
+ ),
"_is_apple": attr.bool(
default = False,
),
diff --git a/src/main/starlark/builtins_bzl/common/cc/semantics.bzl b/src/main/starlark/builtins_bzl/common/cc/semantics.bzl
index 5238ad1..c2a4723 100644
--- a/src/main/starlark/builtins_bzl/common/cc/semantics.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/semantics.bzl
@@ -199,4 +199,5 @@
get_nocopts_attr = _get_nocopts_attr,
get_experimental_link_static_libraries_once = _get_experimental_link_static_libraries_once,
check_cc_shared_library_tags = _check_cc_shared_library_tags,
+ BUILD_INFO_TRANLATOR_LABEL = "@bazel_tools//tools/build_defs/build_info:cc_build_info",
)
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index 65d8fcf..740ac5f 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -627,6 +627,22 @@
config.create("embedded_tools/MODULE.bazel", "module(name='bazel_tools')");
config.create("embedded_tools/tools/build_defs/repo/BUILD");
config.create(
+ "embedded_tools/tools/build_defs/build_info/bazel_cc_build_info.bzl",
+ "def _impl(ctx):",
+ " output_groups = {",
+ " 'non_redacted_build_info_files': depset([ctx.info_file, ctx.version_file]),",
+ " 'redacted_build_info_files': depset([ctx.version_file]),",
+ " }",
+ " return OutputGroupInfo(**output_groups)",
+ "bazel_cc_build_info = rule(implementation = _impl)");
+ config.create(
+ "embedded_tools/tools/build_defs/build_info/BUILD",
+ "load('//tools/build_defs/build_info:bazel_cc_build_info.bzl'," + " 'bazel_cc_build_info')",
+ "bazel_cc_build_info(",
+ " name = 'cc_build_info',",
+ " visibility = ['//visibility:public'],",
+ ")");
+ config.create(
"embedded_tools/tools/build_defs/repo/utils.bzl",
"def maybe(repo_rule, name, **kwargs):",
" if name not in native.existing_rules():",