Introduce BazelStringOrLabelFromProp.

Soong supports string properties, but they are overloaded, and can mean
one of three things:

* path reference
* module reference
* string literal

Bazel has different types: label and string attributes. Thus there needs
to be a way to categorize them correctly in bp2build.

This CL introduces a new function to be used on properties like
apex_key.private_key / apex_key.public_key, as well as
android_app.certificate / apex.certificate.

It is important to disambiguate the prop betenn a string literal
attribute or file/rule target label attribute, so this functions does
just that.  The new attributes are then further handled by their
respective macros (apex_key, android_binary, apex).

Bug: 253557437
Fixes: 253557437
Test: presubmits, new tests

Change-Id: Id8111cdd60d3aabcae7d17fe9da84d0ee3966023
This commit is contained in:
Jingwen Chen
2022-10-14 09:56:07 +00:00
parent a9e1df1522
commit 6817bbb3c8
6 changed files with 173 additions and 53 deletions

View File

@@ -2665,12 +2665,13 @@ func (o *OverrideApex) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
// Certificate
if overridableProperties.Certificate == nil {
// delegated to the rule attr default
attrs.Certificate = nil
// If overridableProperties.Certificate is nil, clear this out as
// well with zeroed structs, so the override_apex does not use the
// base apex's certificate.
attrs.Certificate = bazel.LabelAttribute{}
attrs.Certificate_name = bazel.StringAttribute{}
} else {
certificateName, certificate := java.ParseCertificateToAttribute(ctx, overridableProperties.Certificate)
attrs.Certificate_name = certificateName
attrs.Certificate = certificate
attrs.Certificate, attrs.Certificate_name = android.BazelStringOrLabelFromProp(ctx, overridableProperties.Certificate)
}
// Prebuilts
@@ -3346,8 +3347,8 @@ type bazelApexBundleAttributes struct {
Android_manifest bazel.LabelAttribute
File_contexts bazel.LabelAttribute
Key bazel.LabelAttribute
Certificate *bazel.Label // used when the certificate prop is a module
Certificate_name *string // used when the certificate prop is a string
Certificate bazel.LabelAttribute // used when the certificate prop is a module
Certificate_name bazel.StringAttribute // used when the certificate prop is a string
Min_sdk_version *string
Updatable bazel.BoolAttribute
Installable bazel.BoolAttribute
@@ -3409,7 +3410,8 @@ func convertWithBp2build(a *apexBundle, ctx android.TopDownMutatorContext) (baze
keyLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *a.overridableProperties.Key))
}
certificateName, certificate := java.ParseCertificateToAttribute(ctx, a.overridableProperties.Certificate)
// Certificate
certificate, certificateName := android.BazelStringOrLabelFromProp(ctx, a.overridableProperties.Certificate)
nativeSharedLibs := &convertedNativeSharedLibs{
Native_shared_libs_32: bazel.LabelListAttribute{},