Merge "Remove ConvertWithBp2build implementations" into main

This commit is contained in:
Colin Cross
2023-12-11 23:12:53 +00:00
committed by Gerrit Code Review
168 changed files with 64 additions and 39712 deletions

View File

@@ -29,12 +29,10 @@ import (
"github.com/google/blueprint/proptools"
"android/soong/android"
"android/soong/bazel"
"android/soong/cc"
"android/soong/dexpreopt"
"android/soong/genrule"
"android/soong/tradefed"
"android/soong/ui/metrics/bp2build_metrics_proto"
)
func init() {
@@ -184,7 +182,6 @@ type overridableAppProperties struct {
}
type AndroidApp struct {
android.BazelModuleBase
Library
aapt
android.OverridableModuleBase
@@ -1173,7 +1170,6 @@ func AndroidAppFactory() android.Module {
android.InitDefaultableModule(module)
android.InitOverridableModule(module, &module.overridableAppProperties.Overrides)
android.InitApexModule(module)
android.InitBazelModule(module)
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
a := ctx.Module().(*AndroidApp)
@@ -1258,8 +1254,6 @@ type AndroidTest struct {
testConfig android.Path
extraTestConfigs android.Paths
data android.Paths
android.BazelModuleBase
}
func (a *AndroidTest) InstallInTestcases() bool {
@@ -1386,7 +1380,6 @@ func AndroidTestFactory() android.Module {
android.InitDefaultableModule(module)
android.InitOverridableModule(module, &module.overridableAppProperties.Overrides)
android.InitBazelModule(module)
return module
}
@@ -1410,8 +1403,6 @@ type AndroidTestHelperApp struct {
AndroidApp
appTestHelperAppProperties appTestHelperAppProperties
android.BazelModuleBase
}
func (a *AndroidTestHelperApp) InstallInTestcases() bool {
@@ -1443,13 +1434,11 @@ func AndroidTestHelperAppFactory() android.Module {
android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon)
android.InitDefaultableModule(module)
android.InitApexModule(module)
android.InitBazelModule(module)
return module
}
type AndroidAppCertificate struct {
android.ModuleBase
android.BazelModuleBase
properties AndroidAppCertificateProperties
Certificate Certificate
@@ -1466,7 +1455,6 @@ func AndroidAppCertificateFactory() android.Module {
module := &AndroidAppCertificate{}
module.AddProperties(&module.properties)
android.InitAndroidModule(module)
android.InitBazelModule(module)
return module
}
@@ -1743,255 +1731,3 @@ func (u *usesLibrary) verifyUsesLibrariesManifest(ctx android.ModuleContext, man
func (u *usesLibrary) verifyUsesLibrariesAPK(ctx android.ModuleContext, apk android.Path) {
u.verifyUsesLibraries(ctx, apk, nil) // for APKs manifest_check does not write output file
}
// For Bazel / bp2build
type bazelAndroidAppCertificateAttributes struct {
Certificate string
}
func (m *AndroidAppCertificate) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
androidAppCertificateBp2Build(ctx, m)
}
func androidAppCertificateBp2Build(ctx android.Bp2buildMutatorContext, module *AndroidAppCertificate) {
var certificate string
if module.properties.Certificate != nil {
certificate = *module.properties.Certificate
}
attrs := &bazelAndroidAppCertificateAttributes{
Certificate: certificate,
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "android_app_certificate",
Bzl_load_location: "//build/bazel/rules/android:android_app_certificate.bzl",
}
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: module.Name()}, attrs)
}
type manifestValueAttribute struct {
MinSdkVersion *string
TargetSdkVersion *string
}
type bazelAndroidAppAttributes struct {
*javaCommonAttributes
*bazelAapt
Deps bazel.LabelListAttribute
Custom_package *string
Certificate bazel.LabelAttribute
Certificate_name bazel.StringAttribute
Manifest_values *manifestValueAttribute
Optimize *bool
Proguard_specs bazel.LabelListAttribute
Updatable *bool
}
func (b bazelAapt) ConvertJavaResources(ctx android.Bp2buildMutatorContext, javaAttrs *javaCommonAttributes) bool {
// TODO (b/300470246) bp2build support for java_resources & java_resource_dirs in android rules
hasJavaResources := !javaAttrs.javaResourcesAttributes.Resources.IsEmpty()
if hasJavaResources {
ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_UNSUPPORTED, "(b/300470246) java resources in android_* module")
}
return hasJavaResources
}
func convertWithBp2build(ctx android.Bp2buildMutatorContext, a *AndroidApp) (bool, android.CommonAttributes, *bazelAndroidAppAttributes) {
aapt, supported := a.convertAaptAttrsWithBp2Build(ctx)
if !supported {
return false, android.CommonAttributes{}, &bazelAndroidAppAttributes{}
}
if a.appProperties.Jni_uses_platform_apis != nil {
ctx.MarkBp2buildUnconvertible(
bp2build_metrics_proto.UnconvertedReasonType_UNSUPPORTED,
"TODO - b/299360988: Add bp2build support for jni_uses_platform_apis",
)
return false, android.CommonAttributes{}, &bazelAndroidAppAttributes{}
}
if a.appProperties.Jni_uses_sdk_apis != nil {
ctx.MarkBp2buildUnconvertible(
bp2build_metrics_proto.UnconvertedReasonType_UNSUPPORTED,
"TODO - b/299360988: Add bp2build support for jni_uses_sdk_apis",
)
return false, android.CommonAttributes{}, &bazelAndroidAppAttributes{}
}
certificate, certificateName := android.BazelStringOrLabelFromProp(ctx, a.overridableAppProperties.Certificate)
manifestValues := &manifestValueAttribute{
MinSdkVersion: a.deviceProperties.Min_sdk_version,
TargetSdkVersion: a.deviceProperties.Target_sdk_version,
}
appAttrs := &bazelAndroidAppAttributes{
// TODO(b/209576404): handle package name override by product variable PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES
Custom_package: a.overridableAppProperties.Package_name,
Certificate: certificate,
Certificate_name: certificateName,
Manifest_values: manifestValues,
Updatable: a.appProperties.Updatable,
}
// As framework-res has no sources, no deps in the Bazel sense, and java compilation, dexing and optimization is skipped by
// Soong specifically for it, return early here before any of the conversion work for the above is attempted.
if ctx.ModuleName() == "framework-res" {
appAttrs.bazelAapt = aapt
return true, android.CommonAttributes{Name: a.Name(), SkipData: proptools.BoolPtr(true)}, appAttrs
}
// Optimization is..
// - enabled by default for android_app, android_test_helper_app
// - disabled by default for android_test
//
// TODO(b/192032291): Disable android_test_helper_app optimization by
// default after auditing downstream usage.
if a.dexProperties.Optimize.EnabledByDefault != a.dexer.effectiveOptimizeEnabled() {
// Property is explicitly defined by default from default, so emit the Bazel attribute.
appAttrs.Optimize = proptools.BoolPtr(a.dexer.effectiveOptimizeEnabled())
}
if a.dexer.effectiveOptimizeEnabled() {
handCraftedFlags := ""
if Bool(a.dexProperties.Optimize.Ignore_warnings) {
handCraftedFlags += "-ignorewarning "
}
if !Bool(a.dexProperties.Optimize.Shrink) {
handCraftedFlags += "-dontshrink "
}
if !Bool(a.dexProperties.Optimize.Optimize) {
handCraftedFlags += "-dontoptimize "
}
if !Bool(a.dexProperties.Optimize.Obfuscate) {
handCraftedFlags += "-dontobfuscate "
}
appAttrs.Proguard_specs = bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, a.dexProperties.Optimize.Proguard_flags_files))
if handCraftedFlags != "" {
generatedFlagFileRuleName := a.Name() + "_proguard_flags"
ctx.CreateBazelTargetModule(bazel.BazelTargetModuleProperties{
Rule_class: "genrule",
}, android.CommonAttributes{
Name: generatedFlagFileRuleName,
SkipData: proptools.BoolPtr(true),
}, &genrule.BazelGenruleAttributes{
Outs: []string{a.Name() + "_proguard.flags"},
Cmd: bazel.StringAttribute{
Value: proptools.StringPtr("echo " + handCraftedFlags + "> $(OUTS)"),
},
})
appAttrs.Proguard_specs.Add(bazel.MakeLabelAttribute(":" + generatedFlagFileRuleName))
}
}
commonAttrs, bp2BuildInfo, supported := a.convertLibraryAttrsBp2Build(ctx)
if !supported {
return false, android.CommonAttributes{}, &bazelAndroidAppAttributes{}
}
if hasJavaResources := aapt.ConvertJavaResources(ctx, commonAttrs); hasJavaResources {
return false, android.CommonAttributes{}, &bazelAndroidAppAttributes{}
}
depLabels := bp2BuildInfo.DepLabels
deps := depLabels.Deps
deps.Append(depLabels.StaticDeps)
var jniDeps bazel.LabelListAttribute
archVariantProps := a.GetArchVariantProperties(ctx, &appProperties{})
for axis, configToProps := range archVariantProps {
for config, _props := range configToProps {
if archProps, ok := _props.(*appProperties); ok {
archJniLibs := android.BazelLabelForModuleDeps(
ctx,
android.LastUniqueStrings(android.CopyOf(archProps.Jni_libs)))
jniDeps.SetSelectValue(axis, config, archJniLibs)
}
}
}
deps.Append(jniDeps)
if !bp2BuildInfo.hasKotlin {
appAttrs.javaCommonAttributes = commonAttrs
appAttrs.bazelAapt = aapt
appAttrs.Deps = deps
} else {
ktName := a.Name() + "_kt"
ctx.CreateBazelTargetModule(
AndroidLibraryBazelTargetModuleProperties(),
android.CommonAttributes{Name: ktName},
&bazelAndroidLibrary{
javaLibraryAttributes: &javaLibraryAttributes{
javaCommonAttributes: commonAttrs,
Deps: deps,
},
bazelAapt: aapt,
},
)
appAttrs.bazelAapt = &bazelAapt{Manifest: aapt.Manifest}
appAttrs.Deps = bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + ktName})
appAttrs.javaCommonAttributes = &javaCommonAttributes{
Sdk_version: commonAttrs.Sdk_version,
}
}
return true, android.CommonAttributes{Name: a.Name(), SkipData: proptools.BoolPtr(true)}, appAttrs
}
// ConvertWithBp2build is used to convert android_app to Bazel.
func (a *AndroidApp) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
if ok, commonAttrs, appAttrs := convertWithBp2build(ctx, a); ok {
var props bazel.BazelTargetModuleProperties
if ctx.ModuleName() == "framework-res" {
props = bazel.BazelTargetModuleProperties{
Rule_class: "framework_resources",
Bzl_load_location: "//build/bazel/rules/android:framework_resources.bzl",
}
} else {
props = bazel.BazelTargetModuleProperties{
Rule_class: "android_binary",
Bzl_load_location: "//build/bazel/rules/android:android_binary.bzl",
}
}
ctx.CreateBazelTargetModule(props, commonAttrs, appAttrs)
}
}
// ConvertWithBp2build is used to convert android_test to Bazel.
func (at *AndroidTest) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
if ok, commonAttrs, appAttrs := convertWithBp2build(ctx, &at.AndroidApp); ok {
props := bazel.BazelTargetModuleProperties{
Rule_class: "android_test",
Bzl_load_location: "//build/bazel/rules/android:android_test.bzl",
}
ctx.CreateBazelTargetModule(props, commonAttrs, appAttrs)
}
}
func (atha *AndroidTestHelperApp) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
if ok, commonAttrs, appAttrs := convertWithBp2build(ctx, &atha.AndroidApp); ok {
// an android_test_helper_app is an android_binary with testonly = True
commonAttrs.Testonly = proptools.BoolPtr(true)
// android_test_helper_app sets default values differently to android_app,
// https://cs.android.com/android/platform/superproject/main/+/main:build/soong/java/app.go;l=1273-1279;drc=e12c083198403ec694af6c625aed11327eb2bf7f
//
// installable: true (settable prop)
// use_embedded_native_libs: true (settable prop)
// lint.test: true (settable prop)
// AlwaysPackageNativeLibs: true (blueprint mutated prop)
// dexpreopt isTest: true (not prop)
props := bazel.BazelTargetModuleProperties{
Rule_class: "android_binary",
Bzl_load_location: "//build/bazel/rules/android:android_binary.bzl",
}
ctx.CreateBazelTargetModule(props, commonAttrs, appAttrs)
}
}