Loading apex/apex.go +33 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,23 @@ type apexTargetBundleProperties struct { } } type apexArchBundleProperties struct { Arch struct { Arm struct { ApexNativeDependencies } Arm64 struct { ApexNativeDependencies } X86 struct { ApexNativeDependencies } X86_64 struct { ApexNativeDependencies } } } // These properties can be used in override_apex to override the corresponding properties in the // base apex. type overridableProperties struct { Loading Loading @@ -273,6 +290,7 @@ type apexBundle struct { // Properties properties apexBundleProperties targetProperties apexTargetBundleProperties archProperties apexArchBundleProperties overridableProperties overridableProperties vndkProperties apexVndkProperties // only for apex_vndk modules Loading Loading @@ -653,6 +671,20 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) { } } // Add native modules targeting a specific arch variant switch target.Arch.ArchType { case android.Arm: depsList = append(depsList, a.archProperties.Arch.Arm.ApexNativeDependencies) case android.Arm64: depsList = append(depsList, a.archProperties.Arch.Arm64.ApexNativeDependencies) case android.X86: depsList = append(depsList, a.archProperties.Arch.X86.ApexNativeDependencies) case android.X86_64: depsList = append(depsList, a.archProperties.Arch.X86_64.ApexNativeDependencies) default: panic(fmt.Errorf("unsupported arch %v\n", ctx.Arch().ArchType)) } for _, d := range depsList { addDependenciesForNativeModules(ctx, d, target, imageVariation) } Loading Loading @@ -1931,6 +1963,7 @@ func newApexBundle() *apexBundle { module.AddProperties(&module.properties) module.AddProperties(&module.targetProperties) module.AddProperties(&module.archProperties) module.AddProperties(&module.overridableProperties) android.InitAndroidMultiTargetsArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) Loading apex/apex_test.go +58 −0 Original line number Diff line number Diff line Loading @@ -3891,6 +3891,64 @@ func TestApexWithTarget(t *testing.T) { ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_shared") } func TestApexWithArch(t *testing.T) { ctx, _ := testApex(t, ` apex { name: "myapex", key: "myapex.key", arch: { arm64: { native_shared_libs: ["mylib.arm64"], }, x86_64: { native_shared_libs: ["mylib.x64"], }, } } apex_key { name: "myapex.key", public_key: "testkey.avbpubkey", private_key: "testkey.pem", } cc_library { name: "mylib.arm64", srcs: ["mylib.cpp"], system_shared_libs: [], stl: "none", // TODO: remove //apex_available:platform apex_available: [ "//apex_available:platform", "myapex", ], } cc_library { name: "mylib.x64", srcs: ["mylib.cpp"], system_shared_libs: [], stl: "none", // TODO: remove //apex_available:platform apex_available: [ "//apex_available:platform", "myapex", ], } `) apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule") copyCmds := apexRule.Args["copy_commands"] // Ensure that apex variant is created for the direct dep ensureListContains(t, ctx.ModuleVariantsForTests("mylib.arm64"), "android_arm64_armv8-a_shared_apex10000") ensureListNotContains(t, ctx.ModuleVariantsForTests("mylib.x64"), "android_arm64_armv8-a_shared_apex10000") // Ensure that both direct and indirect deps are copied into apex ensureContains(t, copyCmds, "image.apex/lib64/mylib.arm64.so") ensureNotContains(t, copyCmds, "image.apex/lib64/mylib.x64.so") } func TestApexWithShBinary(t *testing.T) { ctx, _ := testApex(t, ` apex { Loading Loading
apex/apex.go +33 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,23 @@ type apexTargetBundleProperties struct { } } type apexArchBundleProperties struct { Arch struct { Arm struct { ApexNativeDependencies } Arm64 struct { ApexNativeDependencies } X86 struct { ApexNativeDependencies } X86_64 struct { ApexNativeDependencies } } } // These properties can be used in override_apex to override the corresponding properties in the // base apex. type overridableProperties struct { Loading Loading @@ -273,6 +290,7 @@ type apexBundle struct { // Properties properties apexBundleProperties targetProperties apexTargetBundleProperties archProperties apexArchBundleProperties overridableProperties overridableProperties vndkProperties apexVndkProperties // only for apex_vndk modules Loading Loading @@ -653,6 +671,20 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) { } } // Add native modules targeting a specific arch variant switch target.Arch.ArchType { case android.Arm: depsList = append(depsList, a.archProperties.Arch.Arm.ApexNativeDependencies) case android.Arm64: depsList = append(depsList, a.archProperties.Arch.Arm64.ApexNativeDependencies) case android.X86: depsList = append(depsList, a.archProperties.Arch.X86.ApexNativeDependencies) case android.X86_64: depsList = append(depsList, a.archProperties.Arch.X86_64.ApexNativeDependencies) default: panic(fmt.Errorf("unsupported arch %v\n", ctx.Arch().ArchType)) } for _, d := range depsList { addDependenciesForNativeModules(ctx, d, target, imageVariation) } Loading Loading @@ -1931,6 +1963,7 @@ func newApexBundle() *apexBundle { module.AddProperties(&module.properties) module.AddProperties(&module.targetProperties) module.AddProperties(&module.archProperties) module.AddProperties(&module.overridableProperties) android.InitAndroidMultiTargetsArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) Loading
apex/apex_test.go +58 −0 Original line number Diff line number Diff line Loading @@ -3891,6 +3891,64 @@ func TestApexWithTarget(t *testing.T) { ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_shared") } func TestApexWithArch(t *testing.T) { ctx, _ := testApex(t, ` apex { name: "myapex", key: "myapex.key", arch: { arm64: { native_shared_libs: ["mylib.arm64"], }, x86_64: { native_shared_libs: ["mylib.x64"], }, } } apex_key { name: "myapex.key", public_key: "testkey.avbpubkey", private_key: "testkey.pem", } cc_library { name: "mylib.arm64", srcs: ["mylib.cpp"], system_shared_libs: [], stl: "none", // TODO: remove //apex_available:platform apex_available: [ "//apex_available:platform", "myapex", ], } cc_library { name: "mylib.x64", srcs: ["mylib.cpp"], system_shared_libs: [], stl: "none", // TODO: remove //apex_available:platform apex_available: [ "//apex_available:platform", "myapex", ], } `) apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule") copyCmds := apexRule.Args["copy_commands"] // Ensure that apex variant is created for the direct dep ensureListContains(t, ctx.ModuleVariantsForTests("mylib.arm64"), "android_arm64_armv8-a_shared_apex10000") ensureListNotContains(t, ctx.ModuleVariantsForTests("mylib.x64"), "android_arm64_armv8-a_shared_apex10000") // Ensure that both direct and indirect deps are copied into apex ensureContains(t, copyCmds, "image.apex/lib64/mylib.arm64.so") ensureNotContains(t, copyCmds, "image.apex/lib64/mylib.x64.so") } func TestApexWithShBinary(t *testing.T) { ctx, _ := testApex(t, ` apex { Loading