diff options
Diffstat (limited to 'apex')
| -rw-r--r-- | apex/apex.go | 30 | ||||
| -rw-r--r-- | apex/apex_test.go | 99 | ||||
| -rw-r--r-- | apex/builder.go | 5 | ||||
| -rw-r--r-- | apex/prebuilt.go | 11 |
4 files changed, 86 insertions, 59 deletions
diff --git a/apex/apex.go b/apex/apex.go index 7ac3bc8d4..1f0618750 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -158,8 +158,8 @@ type apexBundleProperties struct { // is 'image'. Payload_type *string - // The type of filesystem to use when the payload_type is 'image'. Either 'ext4' or 'f2fs'. - // Default 'ext4'. + // The type of filesystem to use when the payload_type is 'image'. Either 'ext4', 'f2fs' + // or 'erofs'. Default 'ext4'. Payload_fs_type *string // For telling the APEX to ignore special handling for system libraries such as bionic. @@ -348,7 +348,6 @@ type apexBundle struct { // Flags for special variants of APEX testApex bool vndkApex bool - artApex bool // Tells whether this variant of the APEX bundle is the primary one or not. Only the primary // one gets installed to the device. @@ -754,13 +753,6 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) { ctx.AddFarVariationDependencies(commonVariation, fsTag, a.properties.Filesystems...) ctx.AddFarVariationDependencies(commonVariation, compatConfigTag, a.properties.Compat_configs...) - if a.artApex { - // With EMMA_INSTRUMENT_FRAMEWORK=true the ART boot image includes jacoco library. - if ctx.Config().IsEnvTrue("EMMA_INSTRUMENT_FRAMEWORK") { - ctx.AddFarVariationDependencies(commonVariation, javaLibTag, "jacocoagent") - } - } - // Marks that this APEX (in fact all the modules in it) has to be built with the given SDKs. // This field currently isn't used. // TODO(jiyong): consider dropping this feature @@ -1151,8 +1143,9 @@ const ( zipApexType = "zip" flattenedApexType = "flattened" - ext4FsType = "ext4" - f2fsFsType = "f2fs" + ext4FsType = "ext4" + f2fsFsType = "f2fs" + erofsFsType = "erofs" ) // The suffix for the output "file", not the module @@ -1625,6 +1618,7 @@ type fsType int const ( ext4 fsType = iota f2fs + erofs ) func (f fsType) string() string { @@ -1633,6 +1627,8 @@ func (f fsType) string() string { return ext4FsType case f2fs: return f2fsFsType + case erofs: + return erofsFsType default: panic(fmt.Errorf("unknown APEX payload type %d", f)) } @@ -1679,6 +1675,9 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { if _, ok := depTag.(android.ExcludeFromApexContentsTag); ok { return false } + if mod, ok := child.(android.Module); ok && !mod.Enabled() { + return false + } depName := ctx.OtherModuleName(child) if _, isDirectDep := parent.(*apexBundle); isDirectDep { switch depTag { @@ -2056,8 +2055,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.payloadFsType = ext4 case f2fsFsType: a.payloadFsType = f2fs + case erofsFsType: + a.payloadFsType = erofs default: - ctx.PropertyErrorf("payload_fs_type", "%q is not a valid filesystem for apex [ext4, f2fs]", *a.properties.Payload_fs_type) + ctx.PropertyErrorf("payload_fs_type", "%q is not a valid filesystem for apex [ext4, f2fs, erofs]", *a.properties.Payload_fs_type) } // Optimization. If we are building bundled APEX, for the files that are gathered due to the @@ -2194,10 +2195,9 @@ func newApexBundle() *apexBundle { return module } -func ApexBundleFactory(testApex bool, artApex bool) android.Module { +func ApexBundleFactory(testApex bool) android.Module { bundle := newApexBundle() bundle.testApex = testApex - bundle.artApex = artApex return bundle } diff --git a/apex/apex_test.go b/apex/apex_test.go index 5d7a1be19..78a6bb8f4 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -3183,7 +3183,6 @@ func TestMacro(t *testing.T) { "myapex", "otherapex", ], - use_apex_name_macro: true, recovery_available: true, min_sdk_version: "29", } @@ -3198,13 +3197,11 @@ func TestMacro(t *testing.T) { mylibCFlags = ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_apex10000").Rule("cc").Args["cFlags"] ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_MIN_SDK_VERSION__=10000") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") // APEX variant has __ANDROID_APEX__ and __ANDROID_APEX_SDK__ defined mylibCFlags = ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_apex29").Rule("cc").Args["cFlags"] ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_MIN_SDK_VERSION__=29") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") // When a cc_library sets use_apex_name_macro: true each apex gets a unique variant and // each variant defines additional macros to distinguish which apex variant it is built for @@ -3213,42 +3210,15 @@ func TestMacro(t *testing.T) { mylibCFlags = ctx.ModuleForTests("mylib3", "android_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib3", "android_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib3", "android_arm64_armv8-a_static_otherapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - // recovery variant does not set __ANDROID_APEX_MIN_SDK_VERSION__ mylibCFlags = ctx.ModuleForTests("mylib3", "android_recovery_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MIN_SDK_VERSION__") - // When a dependency of a cc_library sets use_apex_name_macro: true each apex gets a unique - // variant. - // non-APEX variant does not have __ANDROID_APEX__ defined mylibCFlags = ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - - // APEX variant has __ANDROID_APEX__ defined - mylibCFlags = ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_otherapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") - // recovery variant does not set __ANDROID_APEX_MIN_SDK_VERSION__ mylibCFlags = ctx.ModuleForTests("mylib2", "android_recovery_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") @@ -8289,6 +8259,75 @@ func TestProhibitStaticExecutable(t *testing.T) { `) } +func TestAndroidMk_DexpreoptBuiltInstalledForApex(t *testing.T) { + ctx := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + updatable: false, + java_libs: ["foo"], + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + java_library { + name: "foo", + srcs: ["foo.java"], + apex_available: ["myapex"], + installable: true, + } + `, + dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), + ) + + apexBundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) + data := android.AndroidMkDataForTest(t, ctx, apexBundle) + var builder strings.Builder + data.Custom(&builder, apexBundle.BaseModuleName(), "TARGET_", "", data) + androidMk := builder.String() + ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.odex foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.vdex") +} + +func TestAndroidMk_DexpreoptBuiltInstalledForApex_Prebuilt(t *testing.T) { + ctx := testApex(t, ` + prebuilt_apex { + name: "myapex", + arch: { + arm64: { + src: "myapex-arm64.apex", + }, + arm: { + src: "myapex-arm.apex", + }, + }, + exported_java_libs: ["foo"], + } + + java_import { + name: "foo", + jars: ["foo.jar"], + installable: true, + } + `, + dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), + ) + + prebuilt := ctx.ModuleForTests("myapex", "android_common_myapex").Module().(*Prebuilt) + entriesList := android.AndroidMkEntriesForTest(t, ctx, prebuilt) + mainModuleEntries := entriesList[0] + android.AssertArrayString(t, + "LOCAL_REQUIRED_MODULES", + mainModuleEntries.EntryMap["LOCAL_REQUIRED_MODULES"], + []string{ + "foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.odex", + "foo-dexpreopt-arm64-apex@myapex@javalib@foo.jar@classes.vdex", + }) +} + func TestMain(m *testing.M) { os.Exit(m.Run()) } diff --git a/apex/builder.go b/apex/builder.go index c05c20c47..772f7897a 100644 --- a/apex/builder.go +++ b/apex/builder.go @@ -65,6 +65,7 @@ func init() { pctx.HostBinToolVariable("extract_apks", "extract_apks") pctx.HostBinToolVariable("make_f2fs", "make_f2fs") pctx.HostBinToolVariable("sload_f2fs", "sload_f2fs") + pctx.HostBinToolVariable("make_erofs", "make_erofs") pctx.HostBinToolVariable("apex_compression_tool", "apex_compression_tool") pctx.SourcePathVariable("genNdkUsedbyApexPath", "build/soong/scripts/gen_ndk_usedby_apex.sh") } @@ -120,7 +121,7 @@ var ( `--payload_type image ` + `--key ${key} ${opt_flags} ${image_dir} ${out} `, CommandDeps: []string{"${apexer}", "${avbtool}", "${e2fsdroid}", "${merge_zips}", - "${mke2fs}", "${resize2fs}", "${sefcontext_compile}", "${make_f2fs}", "${sload_f2fs}", + "${mke2fs}", "${resize2fs}", "${sefcontext_compile}", "${make_f2fs}", "${sload_f2fs}", "${make_erofs}", "${soong_zip}", "${zipalign}", "${aapt2}", "prebuilts/sdk/current/public/android.jar"}, Rspfile: "${out}.copy_commands", RspfileContent: "${copy_commands}", @@ -715,12 +716,10 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { } } apisBackedbyOutputFile := android.PathForModuleOut(ctx, a.Name()+"_backing.txt") - ndkLibraryList := android.PathForSource(ctx, "system/core/rootdir/etc/public.libraries.android.txt") rule := android.NewRuleBuilder(pctx, ctx) rule.Command(). Tool(android.PathForSource(ctx, "build/soong/scripts/gen_ndk_backedby_apex.sh")). Output(apisBackedbyOutputFile). - Input(ndkLibraryList). Flags(libNames) rule.Build("ndk_backedby_list", "Generate API libraries backed by Apex") a.apisBackedByModuleFile = apisBackedbyOutputFile diff --git a/apex/prebuilt.go b/apex/prebuilt.go index 53ef4d787..61e7a0be3 100644 --- a/apex/prebuilt.go +++ b/apex/prebuilt.go @@ -264,17 +264,6 @@ func (p *prebuiltCommon) createEntriesForApexFile(fi apexFile, apexName string) // we need to remove the suffix from LOCAL_MODULE_STEM, otherwise // we will have foo.jar.jar entries.SetString("LOCAL_MODULE_STEM", strings.TrimSuffix(fi.stem(), ".jar")) - var classesJar android.Path - var headerJar android.Path - if javaModule, ok := fi.module.(java.ApexDependency); ok { - classesJar = javaModule.ImplementationAndResourcesJars()[0] - headerJar = javaModule.HeaderJars()[0] - } else { - classesJar = fi.builtFile - headerJar = fi.builtFile - } - entries.SetString("LOCAL_SOONG_CLASSES_JAR", classesJar.String()) - entries.SetString("LOCAL_SOONG_HEADER_JAR", headerJar.String()) entries.SetString("LOCAL_SOONG_DEX_JAR", fi.builtFile.String()) entries.SetString("LOCAL_DEX_PREOPT", "false") }, |