diff --git a/apex/apex.go b/apex/apex.go index dae0f26d4..95118a4cf 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -530,11 +530,8 @@ func addDependenciesForNativeModules(ctx android.BottomUpMutatorContext, nativeM if ctx.Device() { binVariations = append(binVariations, blueprint.Variation{Mutator: "image", Variation: imageVariation}) - libVariations = append(libVariations, - blueprint.Variation{Mutator: "image", Variation: imageVariation}, - blueprint.Variation{Mutator: "version", Variation: ""}) // "" is the non-stub variant - rustLibVariations = append(rustLibVariations, - blueprint.Variation{Mutator: "image", Variation: imageVariation}) + libVariations = append(libVariations, blueprint.Variation{Mutator: "image", Variation: imageVariation}) + rustLibVariations = append(rustLibVariations, blueprint.Variation{Mutator: "image", Variation: imageVariation}) } // Use *FarVariation* to be able to depend on modules having conflicting variations with @@ -1530,6 +1527,9 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { provideNativeLibs = append(provideNativeLibs, fi.stem()) } return true // track transitive dependencies + } else if r, ok := child.(*rust.Module); ok { + fi := apexFileForRustLibrary(ctx, r) + filesInfo = append(filesInfo, fi) } else { propertyName := "native_shared_libs" if isJniLib { @@ -1702,6 +1702,11 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { return false } + filesInfo = append(filesInfo, af) + return true // track transitive dependencies + } else if rm, ok := child.(*rust.Module); ok { + af := apexFileForRustLibrary(ctx, rm) + af.transitiveDep = true filesInfo = append(filesInfo, af) return true // track transitive dependencies } diff --git a/apex/apex_test.go b/apex/apex_test.go index 302843bc6..5b841fc8c 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -362,7 +362,10 @@ func TestBasicApex(t *testing.T) { androidManifest: ":myapex.androidmanifest", key: "myapex.key", binaries: ["foo.rust"], - native_shared_libs: ["mylib"], + native_shared_libs: [ + "mylib", + "libfoo.ffi", + ], rust_dyn_libs: ["libfoo.dylib.rust"], multilib: { both: { @@ -399,7 +402,10 @@ func TestBasicApex(t *testing.T) { cc_library { name: "mylib", srcs: ["mylib.cpp"], - shared_libs: ["mylib2"], + shared_libs: [ + "mylib2", + "libbar.ffi", + ], system_shared_libs: [], stl: "none", // TODO: remove //apex_available:platform @@ -451,6 +457,20 @@ func TestBasicApex(t *testing.T) { apex_available: ["myapex"], } + rust_ffi_shared { + name: "libfoo.ffi", + srcs: ["foo.rs"], + crate_name: "foo", + apex_available: ["myapex"], + } + + rust_ffi_shared { + name: "libbar.ffi", + srcs: ["foo.rs"], + crate_name: "bar", + apex_available: ["myapex"], + } + apex { name: "com.android.gki.fake", binaries: ["foo"], @@ -566,12 +586,14 @@ func TestBasicApex(t *testing.T) { ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common_apex10000") ensureListContains(t, ctx.ModuleVariantsForTests("myjar_dex"), "android_common_apex10000") ensureListContains(t, ctx.ModuleVariantsForTests("foo.rust"), "android_arm64_armv8-a_apex10000") + ensureListContains(t, ctx.ModuleVariantsForTests("libfoo.ffi"), "android_arm64_armv8-a_shared_apex10000") // Ensure that apex variant is created for the indirect dep ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_shared_apex10000") ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common_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("libbar.ffi"), "android_arm64_armv8-a_shared_apex10000") // Ensure that both direct and indirect deps are copied into apex ensureContains(t, copyCmds, "image.apex/lib64/mylib.so") @@ -579,6 +601,8 @@ func TestBasicApex(t *testing.T) { ensureContains(t, copyCmds, "image.apex/javalib/myjar_stem.jar") ensureContains(t, copyCmds, "image.apex/javalib/myjar_dex.jar") 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/libbar.ffi.so") // .. but not for java libs ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar") ensureNotContains(t, copyCmds, "image.apex/javalib/msharedjar.jar")