Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e4950a0 authored by Rupert Shuttleworth's avatar Rupert Shuttleworth
Browse files

Add some more properties to the bp2build APEX converter (second try)

In particular:

- AndroidManifest
- file_contexts
- key
- certificate
- min_sdk_version
- updatable
- installable
- native_shared_libs
- binaries

Test: Updated unit test

Change-Id: I1c6e8c4b6b24ce487f64e5d37bd594dbb000fe6f
parent 2695e20d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -219,6 +219,9 @@ var (
		"libjemalloc5_integrationtest",
		"libjemalloc5_stresstestlib",
		"libjemalloc5_unittest",

		// APEX support
		"com.android.runtime", // http://b/194746715, apex, depends on 'libc_malloc_debug' and 'libc_malloc_hooks'
	}

	// Per-module denylist of cc_library modules to only generate the static
+4 −0
Original line number Diff line number Diff line
@@ -147,6 +147,10 @@ func BazelLabelForModuleSrcSingle(ctx BazelConversionPathContext, path string) b
	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
+63 −5
Original line number Diff line number Diff line
@@ -3188,6 +3188,15 @@ func rModulesPackages() map[string][]string {

type bazelApexBundleAttributes struct {
	Manifest           bazel.LabelAttribute
	Android_manifest   bazel.LabelAttribute
	File_contexts      bazel.LabelAttribute
	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 ApexBundleBp2Build(ctx android.TopDownMutatorContext) {

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 fileContextsLabelAttribute bazel.LabelAttribute
	if module.properties.File_contexts != nil {
		fileContextsLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *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,
		Android_manifest:   androidManifestLabelAttribute,
		File_contexts:      fileContextsLabelAttribute,
		Min_sdk_version:    minSdkVersion,
		Key:                keyLabelAttribute,
		Certificate:        certificateLabelAttribute,
		Updatable:          updatableAttribute,
		Installable:        installableAttribute,
		Native_shared_libs: nativeSharedLibsLabelListAttribute,
		Binaries:           binariesStringListAttribute,
	}

	props := bazel.BazelTargetModuleProperties{
+2 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ func registerApexKeyBuildComponents(ctx android.RegistrationContext) {

type apexKey struct {
	android.ModuleBase
	android.BazelModuleBase

	properties apexKeyProperties

@@ -61,6 +62,7 @@ func ApexKeyFactory() android.Module {
	module := &apexKey{}
	module.AddProperties(&module.properties)
	android.InitAndroidArchModule(module, android.HostAndDeviceDefault, android.MultilibCommon)
	android.InitBazelModule(module)
	return module
}

+94 −4
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@ package bp2build
import (
	"android/soong/android"
	"android/soong/apex"
	"android/soong/cc"
	"android/soong/java"

	"testing"
)

@@ -26,6 +29,13 @@ func runApexTestCase(t *testing.T, tc bp2buildTestCase) {
}

func registerApexModuleTypes(ctx android.RegistrationContext) {
	// CC module types needed as they can be APEX dependencies
	cc.RegisterCCBuildComponents(ctx)

	ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
	ctx.RegisterModuleType("apex_key", apex.ApexKeyFactory)
	ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory)
	ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
}

func TestApexBundleSimple(t *testing.T) {
@@ -36,14 +46,94 @@ func TestApexBundleSimple(t *testing.T) {
		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 },
}

filegroup {
	name: "com.android.apogee-file_contexts",
        srcs: [
                "com.android.apogee-file_contexts",
        ],
        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,
)`}})
}

func TestApexBundleDefaultPropertyValues(t *testing.T) {
	runApexTestCase(t, bp2buildTestCase{
		description:                        "apex - default property values",
		moduleTypeUnderTest:                "apex",
		moduleTypeUnderTestFactory:         apex.BundleFactory,
		moduleTypeUnderTestBp2BuildMutator: apex.ApexBundleBp2Build,
		filesystem:                         map[string]string{},
		blueprint: `
apex {
	name: "com.android.apogee",
	manifest: "apogee_manifest.json",
}
`,
		expectedBazelTargets: []string{`apex(
    name = "com.android.apogee",
    manifest = "apogee_manifest.json",
)`}})
}

Loading