Skip to content

Commit

Permalink
Add internal purpose parameter to create_compilation_context
Browse files Browse the repository at this point in the history
This is an internal parameter and is guarded by an internal allow list.

PiperOrigin-RevId: 345280582
  • Loading branch information
c-mita authored and copybara-github committed Dec 2, 2020
1 parent bf574de commit 4ed0dab
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -705,10 +705,14 @@ public CcCompilationContext createCcCompilationContext(
Object textualHdrsNoneable,
Object modularPublicHdrsNoneable,
Object modularPrivateHdrsNoneable,
Object purposeNoneable,
StarlarkThread thread)
throws EvalException {
if (checkObjectsBound(
textualHdrsNoneable, modularPrivateHdrsNoneable, modularPublicHdrsNoneable)) {
textualHdrsNoneable,
modularPrivateHdrsNoneable,
modularPublicHdrsNoneable,
purposeNoneable)) {
checkPrivateStarlarkificationAllowlist(thread);
}
ImmutableList<Artifact> textualHdrs = asClassImmutableList(textualHdrsNoneable);
Expand Down Expand Up @@ -745,6 +749,9 @@ public CcCompilationContext createCcCompilationContext(
ccCompilationContext.addTextualHdrs(textualHdrs);
ccCompilationContext.addModularPublicHdrs(modularPublicHdrs);
ccCompilationContext.addModularPrivateHdrs(modularPrivateHdrs);
if (purposeNoneable != null && purposeNoneable != Starlark.UNBOUND) {
ccCompilationContext.setPurpose((String) purposeNoneable);
}

return ccCompilationContext.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -856,6 +856,12 @@ CcInfoApi<FileT> mergeCcInfos(
positional = false,
named = true,
defaultValue = "unbound"),
@Param(
name = "purpose",
documented = false,
positional = false,
named = true,
defaultValue = "unbound"),
})
CompilationContextT createCcCompilationContext(
Object headers,
Expand All @@ -868,6 +874,7 @@ CompilationContextT createCcCompilationContext(
Object textualHdrs,
Object modularPublicHdrs,
Object modularPrivateHdrs,
Object purpose,
StarlarkThread thread)
throws EvalException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ public CcCompilationContextApi<FileApi> createCcCompilationContext(
Object textualHdrs,
Object modularPublicHdrs,
Object modularPrivateHdrs,
Object purpose,
StarlarkThread thread)
throws EvalException {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6863,9 +6863,12 @@ public void testExpandedCompileApiBlocked() throws Exception {
public void testExpandedCcCompilationContextApiBlocked() throws Exception {
scratch.file(
"b/BUILD",
"load('//my_rules:rule.bzl', 'method_rule', 'param_rule')",
"param_rule(",
" name = 'p',",
"load('//my_rules:rule.bzl', 'method_rule', 'param_1_rule', 'param_2_rule')",
"param_1_rule(",
" name = 'p1',",
")",
"param_2_rule(",
" name = 'p2',",
")",
"method_rule(",
" name = 'm',",
Expand All @@ -6877,19 +6880,26 @@ public void testExpandedCcCompilationContextApiBlocked() throws Exception {
" comp_context = cc_common.create_compilation_context()",
" comp_context.transitive_compilation_prerequisites()",
" return [CcInfo(compilation_context = comp_context)]",
"def _p_impl(ctx):",
" comp_context = cc_common.create_compilation_context()",
"def _p1_impl(ctx):",
" comp_context = cc_common.create_compilation_context(textual_hdrs = ['dummy.h'])",
" return [CcInfo(compilation_context = comp_context)]",
"def _p2_impl(ctx):",
" comp_context = cc_common.create_compilation_context(purpose = 'testing')",
" return [CcInfo(compilation_context = comp_context)]",
"method_rule = rule(",
" implementation = _m_impl,",
")",
"param_rule = rule(",
" implementation = _p_impl,",
"param_1_rule = rule(",
" implementation = _p1_impl,",
")",
"param_2_rule = rule(",
" implementation = _p2_impl,",
")");
AssertionError e = assertThrows(AssertionError.class, () -> getConfiguredTarget("//b:m"));
assertThat(e).hasMessageThat().contains("Rule in 'my_rules' cannot use private API");
e = assertThrows(AssertionError.class, () -> getConfiguredTarget("//b:p"));
e = assertThrows(AssertionError.class, () -> getConfiguredTarget("//b:p1"));
assertThat(e).hasMessageThat().contains("Rule in 'my_rules' cannot use private API");
e = assertThrows(AssertionError.class, () -> getConfiguredTarget("//b:p2"));
assertThat(e).hasMessageThat().contains("Rule in 'my_rules' cannot use private API");
}

Expand Down

0 comments on commit 4ed0dab

Please sign in to comment.