diff options
Diffstat (limited to 'java/app.go')
-rwxr-xr-x | java/app.go | 130 |
1 files changed, 94 insertions, 36 deletions
diff --git a/java/app.go b/java/app.go index 7ee0e3857..dabc3192e 100755 --- a/java/app.go +++ b/java/app.go @@ -31,6 +31,7 @@ import ( "android/soong/dexpreopt" "android/soong/genrule" "android/soong/tradefed" + "android/soong/ui/metrics/bp2build_metrics_proto" ) func init() { @@ -1115,6 +1116,8 @@ type AndroidTest struct { testConfig android.Path extraTestConfigs android.Paths data android.Paths + + android.BazelModuleBase } func (a *AndroidTest) InstallInTestcases() bool { @@ -1232,6 +1235,8 @@ func AndroidTestFactory() android.Module { android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) android.InitDefaultableModule(module) android.InitOverridableModule(module, &module.overridableAppProperties.Overrides) + + android.InitBazelModule(module) return module } @@ -1253,6 +1258,8 @@ type AndroidTestHelperApp struct { AndroidApp appTestHelperAppProperties appTestHelperAppProperties + + android.BazelModuleBase } func (a *AndroidTestHelperApp) InstallInTestcases() bool { @@ -1284,6 +1291,7 @@ func AndroidTestHelperAppFactory() android.Module { android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) android.InitDefaultableModule(module) android.InitApexModule(module) + android.InitBazelModule(module) return module } @@ -1590,11 +1598,11 @@ type bazelAndroidAppCertificateAttributes struct { Certificate string } -func (m *AndroidAppCertificate) ConvertWithBp2build(ctx android.TopDownMutatorContext) { +func (m *AndroidAppCertificate) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) { androidAppCertificateBp2Build(ctx, m) } -func androidAppCertificateBp2Build(ctx android.TopDownMutatorContext, module *AndroidAppCertificate) { +func androidAppCertificateBp2Build(ctx android.Bp2buildMutatorContext, module *AndroidAppCertificate) { var certificate string if module.properties.Certificate != nil { certificate = *module.properties.Certificate @@ -1614,7 +1622,6 @@ func androidAppCertificateBp2Build(ctx android.TopDownMutatorContext, module *An type manifestValueAttribute struct { MinSdkVersion *string - MaxSdkVersion *string TargetSdkVersion *string } @@ -1628,38 +1635,34 @@ type bazelAndroidAppAttributes struct { Manifest_values *manifestValueAttribute Optimize *bool Proguard_specs bazel.LabelListAttribute + Updatable *bool } -// ConvertWithBp2build is used to convert android_app to Bazel. -func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { +func convertWithBp2build(ctx android.Bp2buildMutatorContext, a *AndroidApp) (bool, android.CommonAttributes, *bazelAndroidAppAttributes) { aapt, supported := a.convertAaptAttrsWithBp2Build(ctx) if !supported { - return + return false, android.CommonAttributes{}, &bazelAndroidAppAttributes{} } - certificate, certificateName := android.BazelStringOrLabelFromProp(ctx, a.overridableAppProperties.Certificate) - - manifestValues := &manifestValueAttribute{} - // TODO(b/274474008 ): Directly convert deviceProperties.Min_sdk_version in bp2build - // MinSdkVersion(ctx) calls SdkVersion(ctx) if no value for min_sdk_version is set - minSdkVersion := a.MinSdkVersion(ctx) - if !minSdkVersion.IsPreview() && !minSdkVersion.IsInvalid() { - if minSdkStr, err := minSdkVersion.EffectiveVersionString(ctx); err == nil { - manifestValues.MinSdkVersion = &minSdkStr - } + 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{} } - - maxSdkVersion := a.MaxSdkVersion(ctx) - if !maxSdkVersion.IsPreview() && !maxSdkVersion.IsInvalid() { - if maxSdkStr, err := maxSdkVersion.EffectiveVersionString(ctx); err == nil { - manifestValues.MaxSdkVersion = &maxSdkStr - } + 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{} } - targetSdkVersion := a.TargetSdkVersion(ctx) - if !targetSdkVersion.IsPreview() && !targetSdkVersion.IsInvalid() { - if targetSdkStr, err := targetSdkVersion.EffectiveVersionString(ctx); err == nil { - manifestValues.TargetSdkVersion = &targetSdkStr - } + certificate, certificateName := android.BazelStringOrLabelFromProp(ctx, a.overridableAppProperties.Certificate) + + manifestValues := &manifestValueAttribute{ + MinSdkVersion: a.deviceProperties.Min_sdk_version, + TargetSdkVersion: a.deviceProperties.Target_sdk_version, } appAttrs := &bazelAndroidAppAttributes{ @@ -1668,6 +1671,7 @@ func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { Certificate: certificate, Certificate_name: certificateName, Manifest_values: manifestValues, + Updatable: a.appProperties.Updatable, } if !BoolDefault(a.dexProperties.Optimize.Enabled, true) { @@ -1706,17 +1710,26 @@ func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { commonAttrs, bp2BuildInfo, supported := a.convertLibraryAttrsBp2Build(ctx) if !supported { - return + return false, android.CommonAttributes{}, &bazelAndroidAppAttributes{} } depLabels := bp2BuildInfo.DepLabels deps := depLabels.Deps deps.Append(depLabels.StaticDeps) - props := bazel.BazelTargetModuleProperties{ - Rule_class: "android_binary", - Bzl_load_location: "//build/bazel/rules/android:android_binary.bzl", + 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 @@ -1743,10 +1756,55 @@ func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { } } - ctx.CreateBazelTargetModule( - props, - android.CommonAttributes{Name: a.Name(), SkipData: proptools.BoolPtr(true)}, - appAttrs, - ) + 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 { + 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) + + // additionally, it 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) + // optimize EnabledByDefault: true (blueprint mutated 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) + } } |