Shared lib dependencies from rlib are included in APEX
This change fixes a bug that shared lib dependencies of an rlib is not installed to the APEX even when the rlib is part of the APEX. Bug: N/A Test: m Change-Id: I88fe461584499839d8018d6b4292374592e7562b
This commit is contained in:
@@ -1927,6 +1927,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
filesInfo = append(filesInfo, af)
|
filesInfo = append(filesInfo, af)
|
||||||
return true // track transitive dependencies
|
return true // track transitive dependencies
|
||||||
}
|
}
|
||||||
|
} else if rust.IsRlibDepTag(depTag) {
|
||||||
|
// Rlib is statically linked, but it might have shared lib
|
||||||
|
// dependencies. Track them.
|
||||||
|
return true
|
||||||
} else if java.IsbootImageContentDepTag(depTag) {
|
} else if java.IsbootImageContentDepTag(depTag) {
|
||||||
// Add the contents of the boot image to the apex.
|
// Add the contents of the boot image to the apex.
|
||||||
switch child.(type) {
|
switch child.(type) {
|
||||||
|
@@ -392,6 +392,15 @@ func TestBasicApex(t *testing.T) {
|
|||||||
srcs: ["foo.rs"],
|
srcs: ["foo.rs"],
|
||||||
crate_name: "foo",
|
crate_name: "foo",
|
||||||
apex_available: ["myapex"],
|
apex_available: ["myapex"],
|
||||||
|
shared_libs: ["libfoo.shared_from_rust"],
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library_shared {
|
||||||
|
name: "libfoo.shared_from_rust",
|
||||||
|
srcs: ["mylib.cpp"],
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
apex_available: ["myapex"],
|
||||||
}
|
}
|
||||||
|
|
||||||
rust_library_dylib {
|
rust_library_dylib {
|
||||||
@@ -539,6 +548,7 @@ func TestBasicApex(t *testing.T) {
|
|||||||
ensureListContains(t, ctx.ModuleVariantsForTests("libfoo.rlib.rust"), "android_arm64_armv8-a_rlib_dylib-std_apex10000")
|
ensureListContains(t, ctx.ModuleVariantsForTests("libfoo.rlib.rust"), "android_arm64_armv8-a_rlib_dylib-std_apex10000")
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("libfoo.dylib.rust"), "android_arm64_armv8-a_dylib_apex10000")
|
ensureListContains(t, ctx.ModuleVariantsForTests("libfoo.dylib.rust"), "android_arm64_armv8-a_dylib_apex10000")
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("libbar.ffi"), "android_arm64_armv8-a_shared_apex10000")
|
ensureListContains(t, ctx.ModuleVariantsForTests("libbar.ffi"), "android_arm64_armv8-a_shared_apex10000")
|
||||||
|
ensureListContains(t, ctx.ModuleVariantsForTests("libfoo.shared_from_rust"), "android_arm64_armv8-a_shared_apex10000")
|
||||||
|
|
||||||
// Ensure that both direct and indirect deps are copied into apex
|
// Ensure that both direct and indirect deps are copied into apex
|
||||||
ensureContains(t, copyCmds, "image.apex/lib64/mylib.so")
|
ensureContains(t, copyCmds, "image.apex/lib64/mylib.so")
|
||||||
@@ -548,6 +558,7 @@ func TestBasicApex(t *testing.T) {
|
|||||||
ensureContains(t, copyCmds, "image.apex/lib64/libfoo.dylib.rust.dylib.so")
|
ensureContains(t, copyCmds, "image.apex/lib64/libfoo.dylib.rust.dylib.so")
|
||||||
ensureContains(t, copyCmds, "image.apex/lib64/libfoo.ffi.so")
|
ensureContains(t, copyCmds, "image.apex/lib64/libfoo.ffi.so")
|
||||||
ensureContains(t, copyCmds, "image.apex/lib64/libbar.ffi.so")
|
ensureContains(t, copyCmds, "image.apex/lib64/libbar.ffi.so")
|
||||||
|
ensureContains(t, copyCmds, "image.apex/lib64/libfoo.shared_from_rust.so")
|
||||||
// .. 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")
|
ensureNotContains(t, copyCmds, "image.apex/javalib/msharedjar.jar")
|
||||||
|
@@ -798,6 +798,11 @@ func IsDylibDepTag(depTag blueprint.DependencyTag) bool {
|
|||||||
return ok && tag == dylibDepTag
|
return ok && tag == dylibDepTag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsRlibDepTag(depTag blueprint.DependencyTag) bool {
|
||||||
|
tag, ok := depTag.(dependencyTag)
|
||||||
|
return ok && tag == rlibDepTag
|
||||||
|
}
|
||||||
|
|
||||||
type autoDep struct {
|
type autoDep struct {
|
||||||
variation string
|
variation string
|
||||||
depTag dependencyTag
|
depTag dependencyTag
|
||||||
|
Reference in New Issue
Block a user