Mark LLNDK prebuilts as LLNDK
so that Vendor APEXes don't embed the LLNDK prebuilts (which are just stubs of LLNDK libraries). Bug: 280697209 Test: m nothing (soong test) Change-Id: I9e6c123e73fa0ab56d8494a01652ee32a9b6a6cd
This commit is contained in:
@@ -4187,6 +4187,174 @@ func TestVndkApexShouldNotProvideNativeLibs(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestVendorApexWithVndkPrebuilts(t *testing.T) {
|
||||
ctx := testApex(t, "",
|
||||
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
||||
variables.DeviceVndkVersion = proptools.StringPtr("27")
|
||||
}),
|
||||
android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
|
||||
cc.RegisterVendorSnapshotModules(ctx)
|
||||
}),
|
||||
withFiles(map[string][]byte{
|
||||
"vendor/foo/Android.bp": []byte(`
|
||||
apex {
|
||||
name: "myapex",
|
||||
binaries: ["foo"],
|
||||
key: "myapex.key",
|
||||
min_sdk_version: "27",
|
||||
vendor: true,
|
||||
}
|
||||
|
||||
cc_binary {
|
||||
name: "foo",
|
||||
vendor: true,
|
||||
srcs: ["abc.cpp"],
|
||||
shared_libs: [
|
||||
"libllndk",
|
||||
"libvndk",
|
||||
],
|
||||
nocrt: true,
|
||||
system_shared_libs: [],
|
||||
min_sdk_version: "27",
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
`),
|
||||
// Simulate VNDK prebuilts with vendor_snapshot
|
||||
"prebuilts/vndk/Android.bp": []byte(`
|
||||
vndk_prebuilt_shared {
|
||||
name: "libllndk",
|
||||
version: "27",
|
||||
vendor_available: true,
|
||||
product_available: true,
|
||||
target_arch: "arm64",
|
||||
arch: {
|
||||
arm64: {
|
||||
srcs: ["libllndk.so"],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
vndk_prebuilt_shared {
|
||||
name: "libvndk",
|
||||
version: "27",
|
||||
vendor_available: true,
|
||||
product_available: true,
|
||||
target_arch: "arm64",
|
||||
arch: {
|
||||
arm64: {
|
||||
srcs: ["libvndk.so"],
|
||||
},
|
||||
},
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
min_sdk_version: "27",
|
||||
}
|
||||
|
||||
vndk_prebuilt_shared {
|
||||
name: "libc++",
|
||||
version: "27",
|
||||
target_arch: "arm64",
|
||||
vendor_available: true,
|
||||
product_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
support_system_process: true,
|
||||
},
|
||||
arch: {
|
||||
arm64: {
|
||||
srcs: ["libc++.so"],
|
||||
},
|
||||
},
|
||||
min_sdk_version: "apex_inherit",
|
||||
}
|
||||
|
||||
vendor_snapshot {
|
||||
name: "vendor_snapshot",
|
||||
version: "27",
|
||||
arch: {
|
||||
arm64: {
|
||||
vndk_libs: [
|
||||
"libc++",
|
||||
"libllndk",
|
||||
"libvndk",
|
||||
],
|
||||
static_libs: [
|
||||
"libc++demangle",
|
||||
"libclang_rt.builtins",
|
||||
"libunwind",
|
||||
],
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
vendor_snapshot_static {
|
||||
name: "libclang_rt.builtins",
|
||||
version: "27",
|
||||
target_arch: "arm64",
|
||||
vendor: true,
|
||||
arch: {
|
||||
arm64: {
|
||||
src: "libclang_rt.builtins-aarch64-android.a",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
vendor_snapshot_static {
|
||||
name: "libc++demangle",
|
||||
version: "27",
|
||||
target_arch: "arm64",
|
||||
compile_multilib: "64",
|
||||
vendor: true,
|
||||
arch: {
|
||||
arm64: {
|
||||
src: "libc++demangle.a",
|
||||
},
|
||||
},
|
||||
min_sdk_version: "apex_inherit",
|
||||
}
|
||||
|
||||
vendor_snapshot_static {
|
||||
name: "libunwind",
|
||||
version: "27",
|
||||
target_arch: "arm64",
|
||||
compile_multilib: "64",
|
||||
vendor: true,
|
||||
arch: {
|
||||
arm64: {
|
||||
src: "libunwind.a",
|
||||
},
|
||||
},
|
||||
min_sdk_version: "apex_inherit",
|
||||
}
|
||||
`),
|
||||
}))
|
||||
|
||||
// Should embed the prebuilt VNDK libraries in the apex
|
||||
ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
|
||||
"bin/foo",
|
||||
"prebuilts/vndk/libc++.so:lib64/libc++.so",
|
||||
"prebuilts/vndk/libvndk.so:lib64/libvndk.so",
|
||||
})
|
||||
|
||||
// Should link foo with prebuilt libraries (shared/static)
|
||||
ldRule := ctx.ModuleForTests("foo", "android_vendor.27_arm64_armv8-a_myapex").Rule("ld")
|
||||
android.AssertStringDoesContain(t, "should link to prebuilt llndk", ldRule.Args["libFlags"], "prebuilts/vndk/libllndk.so")
|
||||
android.AssertStringDoesContain(t, "should link to prebuilt vndk", ldRule.Args["libFlags"], "prebuilts/vndk/libvndk.so")
|
||||
android.AssertStringDoesContain(t, "should link to prebuilt libc++demangle", ldRule.Args["libFlags"], "prebuilts/vndk/libc++demangle.a")
|
||||
android.AssertStringDoesContain(t, "should link to prebuilt libunwind", ldRule.Args["libFlags"], "prebuilts/vndk/libunwind.a")
|
||||
|
||||
// Should declare the LLNDK library as a "required" external dependency
|
||||
manifestRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexManifestRule")
|
||||
requireNativeLibs := names(manifestRule.Args["requireNativeLibs"])
|
||||
ensureListContains(t, requireNativeLibs, "libllndk.so")
|
||||
}
|
||||
|
||||
func TestDependenciesInApexManifest(t *testing.T) {
|
||||
ctx := testApex(t, `
|
||||
apex {
|
||||
|
@@ -241,7 +241,7 @@ var (
|
||||
func vndkModuleLister(predicate func(*Module) bool) moduleListerFunc {
|
||||
return func(ctx android.SingletonContext) (moduleNames, fileNames []string) {
|
||||
ctx.VisitAllModules(func(m android.Module) {
|
||||
if c, ok := m.(*Module); ok && predicate(c) {
|
||||
if c, ok := m.(*Module); ok && predicate(c) && !c.IsVndkPrebuiltLibrary() {
|
||||
filename, err := getVndkFileName(c)
|
||||
if err != nil {
|
||||
ctx.ModuleErrorf(m, "%s", err)
|
||||
@@ -402,6 +402,11 @@ func VndkMutator(mctx android.BottomUpMutatorContext) {
|
||||
m.VendorProperties.IsVNDKPrivate = Bool(prebuiltLib.Properties.Llndk.Private)
|
||||
}
|
||||
|
||||
if m.IsVndkPrebuiltLibrary() && !m.IsVndk() {
|
||||
m.VendorProperties.IsLLNDK = true
|
||||
// TODO(b/280697209): copy "llndk.private" flag to vndk_prebuilt_shared
|
||||
}
|
||||
|
||||
if (isLib && lib.buildShared()) || (isPrebuiltLib && prebuiltLib.buildShared()) {
|
||||
if m.vndkdep != nil && m.vndkdep.isVndk() && !m.vndkdep.isVndkExt() {
|
||||
processVndkLibrary(mctx, m)
|
||||
|
Reference in New Issue
Block a user