Skip to content

Commit 66ac39c

Browse files
susinmotioncopybara-github
authored andcommitted
Automated rollback of commit 5ac62a2.
*** Reason for rollback *** Breaks tests in Blaze nightly *** Original change description *** BEGIN_PUBLIC Switch Cpp `BuildInfo` system to new API. END_PUBLIC PiperOrigin-RevId: 571997366 Change-Id: Ic8804ec876da3762584c79146f9945ee634a483c
1 parent bbe453e commit 66ac39c

File tree

10 files changed

+109
-88
lines changed

10 files changed

+109
-88
lines changed

src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,6 @@ public class BuildConfigurationValue
8383
private static final Interner<ImmutableSortedMap<Class<? extends Fragment>, Fragment>>
8484
fragmentsInterner = BlazeInterners.newWeakInterner();
8585

86-
private static final ImmutableSet<BuiltinRestriction.AllowlistEntry> ANDROID_ALLOWLIST =
87-
ImmutableSet.of(
88-
BuiltinRestriction.allowlistEntry("", "third_party/bazel_rules/rules_android"),
89-
BuiltinRestriction.allowlistEntry("build_bazel_rules_android", ""),
90-
BuiltinRestriction.allowlistEntry("rules_android", ""),
91-
BuiltinRestriction.allowlistEntry("", "tools/build_defs/android"));
92-
9386
/** Global state necessary to build a BuildConfiguration. */
9487
public interface GlobalStateProvider {
9588
/** Computes the default shell environment for actions from the command line options. */
@@ -740,7 +733,7 @@ public boolean isToolConfiguration() {
740733

741734
@Override
742735
public boolean isToolConfigurationForStarlark(StarlarkThread thread) throws EvalException {
743-
BuiltinRestriction.failIfCalledOutsideAllowlist(thread, ANDROID_ALLOWLIST);
736+
BuiltinRestriction.failIfCalledOutsideBuiltins(thread);
744737
return isToolConfiguration();
745738
}
746739

src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,13 @@
114114
public final class StarlarkRuleContext
115115
implements StarlarkRuleContextApi<ConstraintValueInfo>, StarlarkActionContext {
116116

117-
public static final ImmutableSet<BuiltinRestriction.AllowlistEntry>
118-
PRIVATE_STARLARKIFICATION_ALLOWLIST =
119-
ImmutableSet.of(
120-
BuiltinRestriction.allowlistEntry("", "test"), // for tests
121-
BuiltinRestriction.allowlistEntry("", "third_party/bazel_rules/rules_android"),
122-
BuiltinRestriction.allowlistEntry("build_bazel_rules_android", ""),
123-
BuiltinRestriction.allowlistEntry("rules_android", ""),
124-
BuiltinRestriction.allowlistEntry("", "tools/build_defs/android"));
117+
static final ImmutableSet<BuiltinRestriction.AllowlistEntry> PRIVATE_STARLARKIFICATION_ALLOWLIST =
118+
ImmutableSet.of(
119+
BuiltinRestriction.allowlistEntry("", "test"), // for tests
120+
BuiltinRestriction.allowlistEntry("", "third_party/bazel_rules/rules_android"),
121+
BuiltinRestriction.allowlistEntry("build_bazel_rules_android", ""),
122+
BuiltinRestriction.allowlistEntry("rules_android", ""),
123+
BuiltinRestriction.allowlistEntry("", "tools/build_defs/android"));
125124

126125
private static final String EXECUTABLE_OUTPUT_NAME = "executable";
127126

src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2977,15 +2977,7 @@ public void registerLinkstampCompileAction(
29772977
compilationInputs.getSet(Artifact.class),
29782978
/* nonCodeInputs= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
29792979
inputsForValidation.getSet(Artifact.class),
2980-
AnalysisUtils.isStampingEnabled(ruleContext, ruleContext.getConfiguration())
2981-
? ccToolchain
2982-
.getCcBuildInfoTranslator()
2983-
.getOutputGroup("non_redacted_build_info_files")
2984-
.toList()
2985-
: ccToolchain
2986-
.getCcBuildInfoTranslator()
2987-
.getOutputGroup("redacted_build_info_files")
2988-
.toList(),
2980+
ruleContext.getBuildInfo(CppBuildInfo.KEY),
29892981
/* additionalLinkstampDefines= */ ImmutableList.of(),
29902982
ccToolchain,
29912983
ruleContext.getConfiguration().isCodeCoverageEnabled(),
@@ -3001,6 +2993,18 @@ public void registerLinkstampCompileAction(
30012993
getSemantics()));
30022994
}
30032995

2996+
@StarlarkMethod(
2997+
name = "get_build_info",
2998+
documented = false,
2999+
parameters = {@Param(name = "ctx")},
3000+
useStarlarkThread = true)
3001+
public Sequence<Artifact> getBuildInfo(StarlarkRuleContext ruleContext, StarlarkThread thread)
3002+
throws EvalException, InterruptedException {
3003+
isCalledFromStarlarkCcCommon(thread);
3004+
return StarlarkList.immutableCopyOf(
3005+
ruleContext.getRuleContext().getBuildInfo(CppBuildInfo.KEY));
3006+
}
3007+
30043008
@StarlarkMethod(
30053009
name = "create_extra_link_time_library",
30063010
documented = false,

src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -556,17 +556,11 @@ public CppLinkAction build() throws InterruptedException, RuleErrorException {
556556
}
557557

558558
final ImmutableList<Artifact> buildInfoHeaderArtifacts =
559-
linkstamps.isEmpty()
560-
? ImmutableList.of()
561-
: isStampingEnabled
562-
? toolchain
563-
.getCcBuildInfoTranslator()
564-
.getOutputGroup("non_redacted_build_info_files")
565-
.toList()
566-
: toolchain
567-
.getCcBuildInfoTranslator()
568-
.getOutputGroup("redacted_build_info_files")
569-
.toList();
559+
!linkstamps.isEmpty()
560+
? actionConstructionContext
561+
.getAnalysisEnvironment()
562+
.getBuildInfo(isStampingEnabled, CppBuildInfo.KEY, configuration)
563+
: ImmutableList.of();
570564

571565
boolean needWholeArchive =
572566
wholeArchive

src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.google.devtools.build.lib.rules.cpp.CcLinkingHelper;
4242
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
4343
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
44+
import com.google.devtools.build.lib.rules.cpp.CppBuildInfo;
4445
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
4546
import com.google.devtools.build.lib.rules.cpp.CppHelper;
4647
import com.google.devtools.build.lib.rules.cpp.CppLinkAction;
@@ -188,15 +189,12 @@ public static NativeDepsRunfiles createNativeDepsAction(
188189
List<Artifact> buildInfoArtifacts =
189190
linkstamps.isEmpty()
190191
? ImmutableList.<Artifact>of()
191-
: AnalysisUtils.isStampingEnabled(ruleContext, configuration)
192-
? toolchain
193-
.getCcBuildInfoTranslator()
194-
.getOutputGroup("non_redacted_build_info_files")
195-
.toList()
196-
: toolchain
197-
.getCcBuildInfoTranslator()
198-
.getOutputGroup("redacted_build_info_files")
199-
.toList();
192+
: ruleContext
193+
.getAnalysisEnvironment()
194+
.getBuildInfo(
195+
AnalysisUtils.isStampingEnabled(ruleContext, configuration),
196+
CppBuildInfo.KEY,
197+
configuration);
200198

201199
ImmutableSortedSet.Builder<String> requestedFeaturesBuilder =
202200
ImmutableSortedSet.<String>naturalOrder()

src/main/starlark/builtins_bzl/common/cc/cc_common.bzl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,10 @@ def _get_tool_requirement_for_action(*, feature_configuration, action_name):
651651
cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST)
652652
return cc_common_internal.get_tool_requirement_for_action(feature_configuration = feature_configuration, action_name = action_name)
653653

654+
def _get_build_info(ctx):
655+
cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST)
656+
return cc_common_internal.get_build_info(ctx)
657+
654658
def _create_extra_link_time_library(*, build_library_func, **kwargs):
655659
cc_common_internal.check_private_api(allowlist = _BUILTINS)
656660
return cc_common_internal.create_extra_link_time_library(build_library_func = build_library_func, **kwargs)
@@ -915,6 +919,7 @@ cc_common = struct(
915919
create_debug_context = _create_debug_context,
916920
merge_debug_context = _merge_debug_context,
917921
get_tool_requirement_for_action = _get_tool_requirement_for_action,
922+
get_build_info = _get_build_info,
918923
create_extra_link_time_library = _create_extra_link_time_library,
919924
register_linkstamp_compile_action = _register_linkstamp_compile_action,
920925
compile = _compile,

src/main/starlark/builtins_bzl/common/python/py_executable.bzl

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,7 @@
1313
# limitations under the License.
1414
"""Common functionality between test/binary executables."""
1515

16-
load(":common/cc/cc_common.bzl", _cc_common = "cc_common")
1716
load(":common/cc/cc_helper.bzl", "cc_helper")
18-
load(
19-
":common/python/attributes.bzl",
20-
"AGNOSTIC_EXECUTABLE_ATTRS",
21-
"COMMON_ATTRS",
22-
"PY_SRCS_ATTRS",
23-
"SRCS_VERSION_ALL_VALUES",
24-
"create_srcs_attr",
25-
"create_srcs_version_attr",
26-
)
2717
load(
2818
":common/python/common.bzl",
2919
"TOOLCHAIN_TYPE",
@@ -37,6 +27,15 @@ load(
3727
"filter_to_py_srcs",
3828
"union_attrs",
3929
)
30+
load(
31+
":common/python/attributes.bzl",
32+
"AGNOSTIC_EXECUTABLE_ATTRS",
33+
"COMMON_ATTRS",
34+
"PY_SRCS_ATTRS",
35+
"SRCS_VERSION_ALL_VALUES",
36+
"create_srcs_attr",
37+
"create_srcs_version_attr",
38+
)
4039
load(
4140
":common/python/providers.bzl",
4241
"PyCcLinkParamsProvider",
@@ -49,6 +48,7 @@ load(
4948
"IS_BAZEL",
5049
"PY_RUNTIME_ATTR_NAME",
5150
)
51+
load(":common/cc/cc_common.bzl", _cc_common = "cc_common")
5252

5353
_py_builtins = _builtins.internal.py_builtins
5454

@@ -490,7 +490,6 @@ def _get_native_deps_details(ctx, *, semantics, cc_details, is_test):
490490
if share_native_deps:
491491
linked_lib = _create_shared_native_deps_dso(
492492
ctx,
493-
cc_toolchain = cc_details.cc_toolchain,
494493
cc_info = cc_info,
495494
is_test = is_test,
496495
requested_features = cc_feature_config.requested_features,
@@ -528,7 +527,6 @@ def _get_native_deps_details(ctx, *, semantics, cc_details, is_test):
528527
def _create_shared_native_deps_dso(
529528
ctx,
530529
*,
531-
cc_toolchain,
532530
cc_info,
533531
is_test,
534532
feature_configuration,
@@ -544,12 +542,6 @@ def _create_shared_native_deps_dso(
544542
feature_configuration = feature_configuration,
545543
)
546544
)
547-
if not linkstamps:
548-
build_info_artifacts = []
549-
elif cc_helper.is_stamping_enabled(ctx):
550-
build_info_artifacts = cc_toolchain.build_info_files().non_redacted_build_info_files.to_list()
551-
else:
552-
build_info_artifacts = cc_toolchain.build_info_files().redacted_build_info_files.to_list()
553545
dso_hash = _get_shared_native_deps_hash(
554546
linker_inputs = cc_helper.get_static_mode_params_for_dynamic_library_libraries(
555547
depset([
@@ -564,7 +556,7 @@ def _create_shared_native_deps_dso(
564556
for flag in input.user_link_flags
565557
],
566558
linkstamps = [linkstamp.file() for linkstamp in linkstamps.to_list()],
567-
build_info_artifacts = build_info_artifacts,
559+
build_info_artifacts = _cc_common.get_build_info(ctx) if linkstamps else [],
568560
features = requested_features,
569561
is_test_target_partially_disabled_thin_lto = is_test and partially_disabled_thin_lto,
570562
)

src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationStarlarkTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ public void testIsToolConfigurationIsBlocked() throws Exception {
7373

7474
AssertionError e =
7575
assertThrows(AssertionError.class, () -> getConfiguredTarget("//example:custom"));
76-
assertThat(e).hasMessageThat().contains("file '//example:rule.bzl' cannot use private API");
76+
assertThat(e)
77+
.hasMessageThat()
78+
.contains("file '//example:rule.bzl' cannot use private @_builtins API");
7779
}
7880

7981
@Test

src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -629,15 +629,9 @@ public void setupMockToolsRepository(MockToolsConfig config) throws IOException
629629
config.create(
630630
"embedded_tools/tools/build_defs/build_info/bazel_cc_build_info.bzl",
631631
"def _impl(ctx):",
632-
" volatile_file = ctx.actions.declare_file('volatile_file.h')",
633-
" non_volatile_file = ctx.actions.declare_file('non_volatile_file.h')",
634-
" redacted_file = ctx.actions.declare_file('redacted_file.h')",
635-
" ctx.actions.write(output = volatile_file, content = '')",
636-
" ctx.actions.write(output = non_volatile_file, content = '')",
637-
" ctx.actions.write(output = redacted_file, content = '')",
638632
" output_groups = {",
639-
" 'non_redacted_build_info_files': depset([volatile_file, non_volatile_file]),",
640-
" 'redacted_build_info_files': depset([redacted_file]),",
633+
" 'non_redacted_build_info_files': depset([ctx.info_file, ctx.version_file]),",
634+
" 'redacted_build_info_files': depset([ctx.version_file]),",
641635
" }",
642636
" return OutputGroupInfo(**output_groups)",
643637
"bazel_cc_build_info = rule(implementation = _impl)");

src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static com.google.common.truth.Truth.assertThat;
1717
import static com.google.common.truth.Truth8.assertThat;
1818
import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.baseArtifactNames;
19+
import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.prettyArtifactNames;
1920
import static com.google.devtools.build.lib.rules.cpp.SolibSymlinkAction.MAX_FILENAME_LENGTH;
2021
import static org.junit.Assert.assertThrows;
2122

@@ -27,6 +28,7 @@
2728
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
2829
import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
2930
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
31+
import com.google.devtools.build.lib.analysis.FileProvider;
3032
import com.google.devtools.build.lib.analysis.RuleContext;
3133
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
3234
import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil;
@@ -84,11 +86,6 @@
8486
@RunWith(JUnit4.class)
8587
public class StarlarkCcCommonTest extends BuildViewTestCase {
8688

87-
private static final String REDACTED_ARTIFACT_PATH =
88-
"tools/build_defs/build_info/redacted_file.h";
89-
private static final String NON_REDACTED_ARTIFACT_PATH =
90-
"tools/build_defs/build_info/volatile_file.h";
91-
9289
@Before
9390
public void setUp() throws Exception {
9491
scratch.file("myinfo/myinfo.bzl", "MyInfo = provider()");
@@ -6064,23 +6061,16 @@ private CppCompileAction getLinkstampCompileAction(String label)
60646061
return linkstampCompileAction;
60656062
}
60666063

6067-
public String getBuildInfoFile(String commonPath) {
6068-
if (AnalysisMock.get().isThisBazel()) {
6069-
return getRelativeOutputPath() + "/k8-fastbuild/bin/external/bazel_tools/" + commonPath;
6070-
} else {
6071-
return getRelativeOutputPath() + "/k8-fastbuild/bin/" + commonPath;
6072-
}
6073-
}
6074-
60756064
private void assertStampEnabled(CppCompileAction linkstampAction)
60766065
throws CommandLineExpansionException {
60776066
assertThat(linkstampAction.getArguments())
6078-
.contains(getBuildInfoFile(NON_REDACTED_ARTIFACT_PATH));
6067+
.contains(getRelativeOutputPath() + "/k8-fastbuild/include/build-info-volatile.h");
60796068
}
60806069

60816070
private void assertStampDisabled(CppCompileAction linkstampAction)
60826071
throws CommandLineExpansionException {
6083-
assertThat(linkstampAction.getArguments()).contains(getBuildInfoFile(REDACTED_ARTIFACT_PATH));
6072+
assertThat(linkstampAction.getArguments())
6073+
.contains(getRelativeOutputPath() + "/k8-fastbuild/include/build-info-redacted.h");
60846074
}
60856075

60866076
@Test
@@ -8073,6 +8063,56 @@ public void testCcToolchainCompileFilesNotAccessibleFromOutsideBuiltins() throws
80738063
assertThat(e).hasMessageThat().contains("cannot use private API");
80748064
}
80758065

8066+
@Test
8067+
public void testGetBuildInfoArtifactsIsPrivateApi() throws Exception {
8068+
scratch.file(
8069+
"foo/BUILD", "load(':custom_rule.bzl', 'custom_rule')", "custom_rule(name = 'custom')");
8070+
scratch.file(
8071+
"foo/custom_rule.bzl",
8072+
"def _impl(ctx):",
8073+
" cc_common.get_build_info(ctx)",
8074+
" return []",
8075+
"custom_rule = rule(",
8076+
" implementation = _impl,",
8077+
")");
8078+
invalidatePackages();
8079+
8080+
AssertionError e =
8081+
assertThrows(AssertionError.class, () -> getConfiguredTarget("//foo:custom"));
8082+
8083+
assertThat(e).hasMessageThat().contains("cannot use private API");
8084+
}
8085+
8086+
@Test
8087+
public void testBuildInfoArtifacts() throws Exception {
8088+
scratch.file(
8089+
"bazel_internal/test_rules/cc/rule.bzl",
8090+
"def _impl(ctx):",
8091+
" artifacts = cc_common.get_build_info(ctx)",
8092+
" return [DefaultInfo(files = depset(artifacts))]",
8093+
"build_info_rule = rule(",
8094+
" implementation = _impl,",
8095+
" attrs = {'stamp': attr.int()},",
8096+
")");
8097+
scratch.file(
8098+
"bazel_internal/test_rules/cc/BUILD",
8099+
"load(':rule.bzl', 'build_info_rule')",
8100+
"build_info_rule(name = 'stamped', stamp = 1,)",
8101+
"build_info_rule(name = 'unstamped', stamp = 0,)");
8102+
assertThat(
8103+
prettyArtifactNames(
8104+
getConfiguredTarget("//bazel_internal/test_rules/cc:stamped")
8105+
.getProvider(FileProvider.class)
8106+
.getFilesToBuild()))
8107+
.containsExactly("build-info-nonvolatile.h", "build-info-volatile.h");
8108+
assertThat(
8109+
prettyArtifactNames(
8110+
getConfiguredTarget("//bazel_internal/test_rules/cc:unstamped")
8111+
.getProvider(FileProvider.class)
8112+
.getFilesToBuild()))
8113+
.containsExactly("build-info-redacted.h");
8114+
}
8115+
80768116
@Test
80778117
public void testCheckPrivateApiCanOnlyBeCalledFromCcCommonBzl() throws Exception {
80788118
scratch.file(

0 commit comments

Comments
 (0)