Support asset_dirs property in bp2build for android_{app,library}

Bug: 276928228
Test: Unit Tests
Change-Id: I6a2899de21e046e54cd0cd71314bf7aec4a470f6
This commit is contained in:
Romain Jobredeaux
2023-08-16 17:39:12 -04:00
parent b6e0a64bf1
commit 7a71e07040
3 changed files with 41 additions and 5 deletions

View File

@@ -23,6 +23,7 @@ import (
"android/soong/android"
"android/soong/bazel"
"android/soong/dexpreopt"
"android/soong/ui/metrics/bp2build_metrics_proto"
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
@@ -1228,6 +1229,8 @@ func AARImportFactory() android.Module {
type bazelAapt struct {
Manifest bazel.Label
Resource_files bazel.LabelListAttribute
Assets_dir bazel.StringAttribute
Assets bazel.LabelListAttribute
}
type bazelAndroidLibrary struct {
@@ -1242,7 +1245,7 @@ type bazelAndroidLibraryImport struct {
Sdk_version bazel.StringAttribute
}
func (a *aapt) convertAaptAttrsWithBp2Build(ctx android.TopDownMutatorContext) *bazelAapt {
func (a *aapt) convertAaptAttrsWithBp2Build(ctx android.TopDownMutatorContext) (*bazelAapt, bool) {
manifest := proptools.StringDefault(a.aaptProperties.Manifest, "AndroidManifest.xml")
resourceFiles := bazel.LabelList{
@@ -1252,10 +1255,30 @@ func (a *aapt) convertAaptAttrsWithBp2Build(ctx android.TopDownMutatorContext) *
files := android.RootToModuleRelativePaths(ctx, androidResourceGlob(ctx, dir))
resourceFiles.Includes = append(resourceFiles.Includes, files...)
}
assetsDir := bazel.StringAttribute{}
var assets bazel.LabelList
for i, dir := range android.PathsWithOptionalDefaultForModuleSrc(ctx, a.aaptProperties.Asset_dirs, "assets") {
if i > 0 {
ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_PROPERTY_UNSUPPORTED, "multiple asset_dirs")
return &bazelAapt{}, false
}
// Assets_dirs are relative to the module dir when specified, but if the default in used in
// PathsWithOptionalDefaultForModuleSrc, then dir is relative to the top.
assetsRelDir, error := filepath.Rel(ctx.ModuleDir(), dir.Rel())
if error != nil {
assetsRelDir = dir.Rel()
}
assetsDir.Value = proptools.StringPtr(assetsRelDir)
assets = bazel.MakeLabelList(android.RootToModuleRelativePaths(ctx, androidResourceGlob(ctx, dir)))
}
return &bazelAapt{
android.BazelLabelForModuleSrcSingle(ctx, manifest),
bazel.MakeLabelListAttribute(resourceFiles),
}
assetsDir,
bazel.MakeLabelListAttribute(assets),
}, true
}
func (a *AARImport) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
@@ -1328,6 +1351,10 @@ func (a *AndroidLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext)
name := a.Name()
props := AndroidLibraryBazelTargetModuleProperties()
aaptAttrs, supported := a.convertAaptAttrsWithBp2Build(ctx)
if !supported {
return
}
ctx.CreateBazelTargetModule(
props,
android.CommonAttributes{Name: name},
@@ -1337,7 +1364,7 @@ func (a *AndroidLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext)
Deps: deps,
Exports: depLabels.StaticDeps,
},
a.convertAaptAttrsWithBp2Build(ctx),
aaptAttrs,
},
)