Create APEX variation only when needed
Create an APEX variation of a module only when it is either directly included in an APEX or the dependency to the module demands that the module should be included. For example, a non-static dependency to a java library no longer creates an APEX variant of the library. Bug: 146907857 Test: m (apex_test amended) Test: cat out/soong/build.ninja | grep "Module:" | wc -l reduced from 47132 to 45881 Change-Id: Icd79fb4b60668d852b9f018343b934b5e42a8eda
This commit is contained in:
@@ -185,6 +185,8 @@ func (m *ApexModuleBase) CreateApexVariations(mctx BottomUpMutatorContext) []Mod
|
|||||||
}
|
}
|
||||||
variations = append(variations, m.apexVariations...)
|
variations = append(variations, m.apexVariations...)
|
||||||
|
|
||||||
|
defaultVariation := ""
|
||||||
|
mctx.SetDefaultDependencyVariation(&defaultVariation)
|
||||||
modules := mctx.CreateVariations(variations...)
|
modules := mctx.CreateVariations(variations...)
|
||||||
for i, m := range modules {
|
for i, m := range modules {
|
||||||
if availableForPlatform && i == 0 {
|
if availableForPlatform && i == 0 {
|
||||||
|
@@ -105,7 +105,8 @@ func apexDepsMutator(mctx android.BottomUpMutatorContext) {
|
|||||||
android.UpdateApexDependency(apexBundleName, depName, directDep)
|
android.UpdateApexDependency(apexBundleName, depName, directDep)
|
||||||
}
|
}
|
||||||
|
|
||||||
if am, ok := child.(android.ApexModule); ok && am.CanHaveApexVariants() {
|
if am, ok := child.(android.ApexModule); ok && am.CanHaveApexVariants() &&
|
||||||
|
(directDep || am.DepIsInSameApex(mctx, child)) {
|
||||||
am.BuildForApex(apexBundleName)
|
am.BuildForApex(apexBundleName)
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
@@ -438,6 +438,7 @@ func TestBasicApex(t *testing.T) {
|
|||||||
system_modules: "none",
|
system_modules: "none",
|
||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
static_libs: ["myotherjar"],
|
static_libs: ["myotherjar"],
|
||||||
|
libs: ["mysharedjar"],
|
||||||
}
|
}
|
||||||
|
|
||||||
java_library {
|
java_library {
|
||||||
@@ -447,6 +448,14 @@ func TestBasicApex(t *testing.T) {
|
|||||||
system_modules: "none",
|
system_modules: "none",
|
||||||
compile_dex: true,
|
compile_dex: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "mysharedjar",
|
||||||
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
|
sdk_version: "none",
|
||||||
|
system_modules: "none",
|
||||||
|
compile_dex: true,
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
|
|
||||||
apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule")
|
apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule")
|
||||||
@@ -475,12 +484,17 @@ func TestBasicApex(t *testing.T) {
|
|||||||
ensureContains(t, copyCmds, "image.apex/javalib/myjar.jar")
|
ensureContains(t, copyCmds, "image.apex/javalib/myjar.jar")
|
||||||
// .. but not for java libs
|
// .. but not for java libs
|
||||||
ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar")
|
ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar")
|
||||||
|
ensureNotContains(t, copyCmds, "image.apex/javalib/msharedjar.jar")
|
||||||
|
|
||||||
// Ensure that the platform variant ends with _shared or _common
|
// Ensure that the platform variant ends with _shared or _common
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_shared")
|
ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_shared")
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_shared")
|
ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_shared")
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common")
|
ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common")
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common")
|
ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common")
|
||||||
|
ensureListContains(t, ctx.ModuleVariantsForTests("mysharedjar"), "android_common")
|
||||||
|
|
||||||
|
// Ensure that dynamic dependency to java libs are not included
|
||||||
|
ensureListNotContains(t, ctx.ModuleVariantsForTests("mysharedjar"), "android_common_myapex")
|
||||||
|
|
||||||
// Ensure that all symlinks are present.
|
// Ensure that all symlinks are present.
|
||||||
found_foo_link_64 := false
|
found_foo_link_64 := false
|
||||||
@@ -700,9 +714,9 @@ func TestApexWithStubs(t *testing.T) {
|
|||||||
mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"]
|
mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"]
|
||||||
|
|
||||||
// Ensure that mylib is linking with the latest version of stubs for mylib2
|
// Ensure that mylib is linking with the latest version of stubs for mylib2
|
||||||
ensureContains(t, mylibLdFlags, "mylib2/android_arm64_armv8-a_shared_3_myapex/mylib2.so")
|
ensureContains(t, mylibLdFlags, "mylib2/android_arm64_armv8-a_shared_3/mylib2.so")
|
||||||
// ... and not linking to the non-stub (impl) variant of mylib2
|
// ... and not linking to the non-stub (impl) variant of mylib2
|
||||||
ensureNotContains(t, mylibLdFlags, "mylib2/android_arm64_armv8-a_shared_myapex/mylib2.so")
|
ensureNotContains(t, mylibLdFlags, "mylib2/android_arm64_armv8-a_shared/mylib2.so")
|
||||||
|
|
||||||
// Ensure that mylib is linking with the non-stub (impl) of mylib3 (because mylib3 is in the same apex)
|
// Ensure that mylib is linking with the non-stub (impl) of mylib3 (because mylib3 is in the same apex)
|
||||||
ensureContains(t, mylibLdFlags, "mylib3/android_arm64_armv8-a_shared_myapex/mylib3.so")
|
ensureContains(t, mylibLdFlags, "mylib3/android_arm64_armv8-a_shared_myapex/mylib3.so")
|
||||||
@@ -714,7 +728,7 @@ func TestApexWithStubs(t *testing.T) {
|
|||||||
ensureNotContains(t, mylib2Cflags, "-include ")
|
ensureNotContains(t, mylib2Cflags, "-include ")
|
||||||
|
|
||||||
// Ensure that genstub is invoked with --apex
|
// Ensure that genstub is invoked with --apex
|
||||||
ensureContains(t, "--apex", ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_3_myapex").Rule("genStubSrc").Args["flags"])
|
ensureContains(t, "--apex", ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_3").Rule("genStubSrc").Args["flags"])
|
||||||
|
|
||||||
ensureExactContents(t, ctx, "myapex", []string{
|
ensureExactContents(t, ctx, "myapex", []string{
|
||||||
"lib64/mylib.so",
|
"lib64/mylib.so",
|
||||||
@@ -780,11 +794,11 @@ func TestApexWithExplicitStubsDependency(t *testing.T) {
|
|||||||
mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"]
|
mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"]
|
||||||
|
|
||||||
// Ensure that mylib is linking with version 10 of libfoo
|
// Ensure that mylib is linking with version 10 of libfoo
|
||||||
ensureContains(t, mylibLdFlags, "libfoo/android_arm64_armv8-a_shared_10_myapex/libfoo.so")
|
ensureContains(t, mylibLdFlags, "libfoo/android_arm64_armv8-a_shared_10/libfoo.so")
|
||||||
// ... and not linking to the non-stub (impl) variant of libfoo
|
// ... and not linking to the non-stub (impl) variant of libfoo
|
||||||
ensureNotContains(t, mylibLdFlags, "libfoo/android_arm64_armv8-a_shared_myapex/libfoo.so")
|
ensureNotContains(t, mylibLdFlags, "libfoo/android_arm64_armv8-a_shared/libfoo.so")
|
||||||
|
|
||||||
libFooStubsLdFlags := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared_10_myapex").Rule("ld").Args["libFlags"]
|
libFooStubsLdFlags := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared_10").Rule("ld").Args["libFlags"]
|
||||||
|
|
||||||
// Ensure that libfoo stubs is not linking to libbar (since it is a stubs)
|
// Ensure that libfoo stubs is not linking to libbar (since it is a stubs)
|
||||||
ensureNotContains(t, libFooStubsLdFlags, "libbar.so")
|
ensureNotContains(t, libFooStubsLdFlags, "libbar.so")
|
||||||
@@ -996,9 +1010,9 @@ func TestApexWithSystemLibsStubs(t *testing.T) {
|
|||||||
|
|
||||||
// For dependency to libc
|
// For dependency to libc
|
||||||
// Ensure that mylib is linking with the latest version of stubs
|
// Ensure that mylib is linking with the latest version of stubs
|
||||||
ensureContains(t, mylibLdFlags, "libc/android_arm64_armv8-a_shared_29_myapex/libc.so")
|
ensureContains(t, mylibLdFlags, "libc/android_arm64_armv8-a_shared_29/libc.so")
|
||||||
// ... and not linking to the non-stub (impl) variant
|
// ... and not linking to the non-stub (impl) variant
|
||||||
ensureNotContains(t, mylibLdFlags, "libc/android_arm64_armv8-a_shared_myapex/libc.so")
|
ensureNotContains(t, mylibLdFlags, "libc/android_arm64_armv8-a_shared/libc.so")
|
||||||
// ... Cflags from stub is correctly exported to mylib
|
// ... Cflags from stub is correctly exported to mylib
|
||||||
ensureContains(t, mylibCFlags, "__LIBC_API__=29")
|
ensureContains(t, mylibCFlags, "__LIBC_API__=29")
|
||||||
ensureContains(t, mylibSharedCFlags, "__LIBC_API__=29")
|
ensureContains(t, mylibSharedCFlags, "__LIBC_API__=29")
|
||||||
@@ -1007,17 +1021,17 @@ func TestApexWithSystemLibsStubs(t *testing.T) {
|
|||||||
// Ensure that mylib is linking with the non-stub (impl) variant
|
// Ensure that mylib is linking with the non-stub (impl) variant
|
||||||
ensureContains(t, mylibLdFlags, "libm/android_arm64_armv8-a_shared_myapex/libm.so")
|
ensureContains(t, mylibLdFlags, "libm/android_arm64_armv8-a_shared_myapex/libm.so")
|
||||||
// ... and not linking to the stub variant
|
// ... and not linking to the stub variant
|
||||||
ensureNotContains(t, mylibLdFlags, "libm/android_arm64_armv8-a_shared_29_myapex/libm.so")
|
ensureNotContains(t, mylibLdFlags, "libm/android_arm64_armv8-a_shared_29/libm.so")
|
||||||
// ... and is not compiling with the stub
|
// ... and is not compiling with the stub
|
||||||
ensureNotContains(t, mylibCFlags, "__LIBM_API__=29")
|
ensureNotContains(t, mylibCFlags, "__LIBM_API__=29")
|
||||||
ensureNotContains(t, mylibSharedCFlags, "__LIBM_API__=29")
|
ensureNotContains(t, mylibSharedCFlags, "__LIBM_API__=29")
|
||||||
|
|
||||||
// For dependency to libdl
|
// For dependency to libdl
|
||||||
// Ensure that mylib is linking with the specified version of stubs
|
// Ensure that mylib is linking with the specified version of stubs
|
||||||
ensureContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_27_myapex/libdl.so")
|
ensureContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_27/libdl.so")
|
||||||
// ... and not linking to the other versions of stubs
|
// ... and not linking to the other versions of stubs
|
||||||
ensureNotContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_28_myapex/libdl.so")
|
ensureNotContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_28/libdl.so")
|
||||||
ensureNotContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_29_myapex/libdl.so")
|
ensureNotContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_29/libdl.so")
|
||||||
// ... and not linking to the non-stub (impl) variant
|
// ... and not linking to the non-stub (impl) variant
|
||||||
ensureNotContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_myapex/libdl.so")
|
ensureNotContains(t, mylibLdFlags, "libdl/android_arm64_armv8-a_shared_myapex/libdl.so")
|
||||||
// ... Cflags from stub is correctly exported to mylib
|
// ... Cflags from stub is correctly exported to mylib
|
||||||
|
Reference in New Issue
Block a user