Add some more properties to the bp2build APEX converter.
In particular:
- AndroidManifest
- file_contexts
- key
- certificate
- min_sdk_version
- updatable
- installable
- native_shared_libs
- binaries
Test: Updated unit test
Change-Id: I9ea13f021d63ec0f75006b3b0b23ec8178c7e9da
diff --git a/android/bazel_paths.go b/android/bazel_paths.go
index 26cacdb..b050774 100644
--- a/android/bazel_paths.go
+++ b/android/bazel_paths.go
@@ -147,6 +147,10 @@
return BazelLabelForModuleSrcExcludes(ctx, []string{path}, []string(nil)).Includes[0]
}
+func BazelLabelForModuleDepSingle(ctx BazelConversionPathContext, path string) bazel.Label {
+ return BazelLabelForModuleDepsExcludes(ctx, []string{path}, []string(nil)).Includes[0]
+}
+
// BazelLabelForModuleSrc expects a list of path (relative to local module directory) and module
// references (":<module>") and returns a bazel.LabelList{} containing the resolved references in
// paths, relative to the local module, or Bazel-labels (absolute if in a different package or
diff --git a/apex/apex.go b/apex/apex.go
index d385ac1..6f8f9c0 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -3187,7 +3187,16 @@
// For Bazel / bp2build
type bazelApexBundleAttributes struct {
- Manifest bazel.LabelAttribute
+ Manifest bazel.LabelAttribute
+ Android_manifest bazel.LabelAttribute
+ File_contexts string
+ Key bazel.LabelAttribute
+ Certificate bazel.LabelAttribute
+ Min_sdk_version string
+ Updatable bazel.BoolAttribute
+ Installable bazel.BoolAttribute
+ Native_shared_libs bazel.LabelListAttribute
+ Binaries bazel.StringListAttribute
}
type bazelApexBundle struct {
@@ -3220,14 +3229,63 @@
func apexBundleBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexBundle) {
var manifestLabelAttribute bazel.LabelAttribute
-
- manifestStringPtr := module.properties.Manifest
if module.properties.Manifest != nil {
- manifestLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *manifestStringPtr))
+ manifestLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.Manifest))
+ }
+
+ var androidManifestLabelAttribute bazel.LabelAttribute
+ if module.properties.AndroidManifest != nil {
+ androidManifestLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.AndroidManifest))
+ }
+
+ var fileContexts string
+ if module.properties.File_contexts != nil {
+ fileContexts = *module.properties.File_contexts
+ }
+
+ var minSdkVersion string
+ if module.properties.Min_sdk_version != nil {
+ minSdkVersion = *module.properties.Min_sdk_version
+ }
+
+ var keyLabelAttribute bazel.LabelAttribute
+ if module.overridableProperties.Key != nil {
+ keyLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.overridableProperties.Key))
+ }
+
+ var certificateLabelAttribute bazel.LabelAttribute
+ if module.overridableProperties.Certificate != nil {
+ certificateLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.overridableProperties.Certificate))
+ }
+
+ nativeSharedLibs := module.properties.ApexNativeDependencies.Native_shared_libs
+ nativeSharedLibsLabelList := android.BazelLabelForModuleDeps(ctx, nativeSharedLibs)
+ nativeSharedLibsLabelListAttribute := bazel.MakeLabelListAttribute(nativeSharedLibsLabelList)
+
+ binaries := module.properties.ApexNativeDependencies.Binaries
+ binariesStringListAttribute := bazel.MakeStringListAttribute(binaries)
+
+ var updatableAttribute bazel.BoolAttribute
+ if module.properties.Updatable != nil {
+ updatableAttribute.Value = module.properties.Updatable
+ }
+
+ var installableAttribute bazel.BoolAttribute
+ if module.properties.Installable != nil {
+ installableAttribute.Value = module.properties.Installable
}
attrs := &bazelApexBundleAttributes{
- Manifest: manifestLabelAttribute,
+ Manifest: manifestLabelAttribute,
+ Android_manifest: androidManifestLabelAttribute,
+ File_contexts: fileContexts,
+ Min_sdk_version: minSdkVersion,
+ Key: keyLabelAttribute,
+ Certificate: certificateLabelAttribute,
+ Updatable: updatableAttribute,
+ Installable: installableAttribute,
+ Native_shared_libs: nativeSharedLibsLabelListAttribute,
+ Binaries: binariesStringListAttribute,
}
props := bazel.BazelTargetModuleProperties{
diff --git a/apex/key.go b/apex/key.go
index 8b33b59..4bd0dc4 100644
--- a/apex/key.go
+++ b/apex/key.go
@@ -37,6 +37,7 @@
type apexKey struct {
android.ModuleBase
+ android.BazelModuleBase
properties apexKeyProperties
@@ -61,6 +62,7 @@
module := &apexKey{}
module.AddProperties(&module.properties)
android.InitAndroidArchModule(module, android.HostAndDeviceDefault, android.MultilibCommon)
+ android.InitBazelModule(module)
return module
}
diff --git a/bp2build/apex_conversion_test.go b/bp2build/apex_conversion_test.go
index f4a1016..d38300e 100644
--- a/bp2build/apex_conversion_test.go
+++ b/bp2build/apex_conversion_test.go
@@ -17,6 +17,9 @@
import (
"android/soong/android"
"android/soong/apex"
+ "android/soong/cc"
+ "android/soong/java"
+
"testing"
)
@@ -26,6 +29,13 @@
}
func registerApexModuleTypes(ctx android.RegistrationContext) {
+ // CC module types needed as they can be APEX dependencies viathe native_shared_libs property
+ cc.RegisterCCBuildComponents(ctx)
+ ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
+
+ ctx.RegisterModuleType("apex_key", apex.ApexKeyFactory)
+
+ ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory)
}
func TestApexBundleSimple(t *testing.T) {
@@ -36,14 +46,67 @@
moduleTypeUnderTestBp2BuildMutator: apex.ApexBundleBp2Build,
filesystem: map[string]string{},
blueprint: `
+apex_key {
+ name: "com.android.apogee.key",
+ public_key: "com.android.apogee.avbpubkey",
+ private_key: "com.android.apogee.pem",
+ bazel_module: { bp2build_available: false },
+}
+
+android_app_certificate {
+ name: "com.android.apogee.certificate",
+ certificate: "com.android.apogee",
+ bazel_module: { bp2build_available: false },
+}
+
+cc_library {
+ name: "native_shared_lib_1",
+ bazel_module: { bp2build_available: false },
+}
+
+cc_library {
+ name: "native_shared_lib_2",
+ bazel_module: { bp2build_available: false },
+}
+
apex {
- name: "apogee",
- manifest: "manifest.json",
+ name: "com.android.apogee",
+ manifest: "apogee_manifest.json",
+ androidManifest: "ApogeeAndroidManifest.xml",
+ file_contexts: "com.android.apogee-file_contexts",
+ min_sdk_version: "29",
+ key: "com.android.apogee.key",
+ certificate: "com.android.apogee.certificate",
+ updatable: false,
+ installable: false,
+ native_shared_libs: [
+ "native_shared_lib_1",
+ "native_shared_lib_2",
+ ],
+ binaries: [
+ "binary_1",
+ "binary_2",
+ ],
}
`,
expectedBazelTargets: []string{`apex(
- name = "apogee",
- manifest = "manifest.json",
+ name = "com.android.apogee",
+ android_manifest = "ApogeeAndroidManifest.xml",
+ binaries = [
+ "binary_1",
+ "binary_2",
+ ],
+ certificate = ":com.android.apogee.certificate",
+ file_contexts = "com.android.apogee-file_contexts",
+ installable = False,
+ key = ":com.android.apogee.key",
+ manifest = "apogee_manifest.json",
+ min_sdk_version = "29",
+ native_shared_libs = [
+ ":native_shared_lib_1",
+ ":native_shared_lib_2",
+ ],
+ updatable = False,
)`}})
}
diff --git a/java/app.go b/java/app.go
index 4e967ad..c69210f 100755
--- a/java/app.go
+++ b/java/app.go
@@ -1104,6 +1104,8 @@
type AndroidAppCertificate struct {
android.ModuleBase
+ android.BazelModuleBase
+
properties AndroidAppCertificateProperties
Certificate Certificate
}
@@ -1119,6 +1121,7 @@
module := &AndroidAppCertificate{}
module.AddProperties(&module.properties)
android.InitAndroidModule(module)
+ android.InitBazelModule(module)
return module
}