rust ffi libraries can be included in APEX

This CL fixes a bug that rust_ffi_shared libraries can't be included in
an APEX either directly (via native_shared_libs property) or indirectly.

Bug: 175105284
Test: m
Change-Id: I2e2d3e11b3901f3412b9725e47a8ebf31f93847b
This commit is contained in:
Jiyong Park
2020-12-09 00:20:45 +09:00
parent 47132c4943
commit f2cc1b77f3
2 changed files with 36 additions and 7 deletions

View File

@@ -522,11 +522,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
@@ -1522,6 +1519,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 {
@@ -1683,6 +1683,11 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
}
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
}
} else if cc.IsTestPerSrcDepTag(depTag) {
if cc, ok := child.(*cc.Module); ok {