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

@@ -201,10 +201,10 @@ func (s *apexKeysText) MakeVars(ctx android.MakeVarsContext) {
type bazelApexKeyAttributes struct {
Public_key bazel.LabelAttribute
Public_key_name bazel.LabelAttribute
Public_key_name bazel.StringAttribute
Private_key bazel.LabelAttribute
Private_key_name bazel.LabelAttribute
Private_key_name bazel.StringAttribute
}
// ConvertWithBp2build performs conversion apexKey for bp2build
@@ -213,27 +213,11 @@ func (m *apexKey) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
}
func apexKeyBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexKey) {
var privateKeyLabelAttribute bazel.LabelAttribute
var privateKeyNameAttribute bazel.LabelAttribute
if module.properties.Private_key != nil {
m := String(module.properties.Private_key)
if android.SrcIsModule(m) == "" {
privateKeyNameAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.Private_key))
} else {
privateKeyLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.properties.Private_key))
}
}
privateKeyLabelAttribute, privateKeyNameAttribute :=
android.BazelStringOrLabelFromProp(ctx, module.properties.Private_key)
var publicKeyLabelAttribute bazel.LabelAttribute
var publicKeyNameAttribute bazel.LabelAttribute
if module.properties.Public_key != nil {
m := String(module.properties.Public_key)
if android.SrcIsModule(m) == "" {
publicKeyNameAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.Public_key))
} else {
publicKeyLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.properties.Public_key))
}
}
publicKeyLabelAttribute, publicKeyNameAttribute :=
android.BazelStringOrLabelFromProp(ctx, module.properties.Public_key)
attrs := &bazelApexKeyAttributes{
Private_key: privateKeyLabelAttribute,