Merge "Update aconfig storage generation function" into main
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 6cdb225..ed6284d 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -12169,34 +12169,32 @@
},
dependencyPath: []string{"myapex", "libjni", "libbar", "libplatform"},
},
- // TODO: embedded JNI in apps should be checked too, but Soong currently just packages the transitive
- // JNI libraries even if they came from another apex.
- //{
- // name: "app jni library dependency in other apex",
- // bpModifier: addToSharedLibs("libembeddedjni", "libotherapex#impl"),
- // dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libotherapex"},
- //},
- //{
- // name: "transitive app jni library dependency in other apex",
- // bpModifier: func(bp *bpmodify.Blueprint) {
- // addToSharedLibs("libembeddedjni", "libbar")(bp)
- // addToSharedLibs("libbar", "libotherapex#impl")(bp)
- // },
- // dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libotherapex"},
- //},
- //{
- // name: "app jni library dependency in platform",
- // bpModifier: addToSharedLibs("libembeddedjni", "libplatform#impl"),
- // dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libplatform"},
- //},
- //{
- // name: "transitive app jni library dependency in platform",
- // bpModifier: func(bp *bpmodify.Blueprint) {
- // addToSharedLibs("libembeddedjni", "libbar")(bp)
- // addToSharedLibs("libbar", "libplatform#impl")(bp)
- // },
- // dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libplatform"},
- //},
+ {
+ name: "app jni library dependency in other apex",
+ bpModifier: addToSharedLibs("libembeddedjni", "libotherapex#impl"),
+ dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libotherapex"},
+ },
+ {
+ name: "transitive app jni library dependency in other apex",
+ bpModifier: func(bp *bpmodify.Blueprint) {
+ addToSharedLibs("libembeddedjni", "libbar")(bp)
+ addToSharedLibs("libbar", "libotherapex#impl")(bp)
+ },
+ dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libotherapex"},
+ },
+ {
+ name: "app jni library dependency in platform",
+ bpModifier: addToSharedLibs("libembeddedjni", "libplatform#impl"),
+ dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libplatform"},
+ },
+ {
+ name: "transitive app jni library dependency in platform",
+ bpModifier: func(bp *bpmodify.Blueprint) {
+ addToSharedLibs("libembeddedjni", "libbar")(bp)
+ addToSharedLibs("libbar", "libplatform#impl")(bp)
+ },
+ dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libplatform"},
+ },
{
name: "binary dependency in other apex",
bpModifier: addToSharedLibs("mybin", "libotherapex#impl"),
diff --git a/cc/cc.go b/cc/cc.go
index 65ab686..03f738f 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -3345,17 +3345,17 @@
return depPaths
}
-func ShouldUseStubForApex(ctx android.ModuleContext, dep android.Module) bool {
+func ShouldUseStubForApex(ctx android.ModuleContext, parent, dep android.Module) bool {
inVendorOrProduct := false
bootstrap := false
- if linkable, ok := ctx.Module().(LinkableInterface); !ok {
- panic(fmt.Errorf("Not a Linkable module: %q", ctx.ModuleName()))
+ if linkable, ok := parent.(LinkableInterface); !ok {
+ ctx.ModuleErrorf("Not a Linkable module: %q", ctx.ModuleName())
} else {
inVendorOrProduct = linkable.InVendorOrProduct()
bootstrap = linkable.Bootstrap()
}
- apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider)
+ apexInfo, _ := android.OtherModuleProvider(ctx, parent, android.ApexInfoProvider)
useStubs := false
@@ -3402,7 +3402,7 @@
if !libDepTag.explicitlyVersioned && len(sharedLibraryStubsInfo.SharedStubLibraries) > 0 {
// when to use (unspecified) stubs, use the latest one.
- if ShouldUseStubForApex(ctx, dep) {
+ if ShouldUseStubForApex(ctx, ctx.Module(), dep) {
stubs := sharedLibraryStubsInfo.SharedStubLibraries
toUse := stubs[len(stubs)-1]
sharedLibraryInfo = toUse.SharedLibraryInfo
diff --git a/cc/config/global.go b/cc/config/global.go
index dcc7719..b19682d 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -245,6 +245,7 @@
"-Werror=int-to-pointer-cast",
"-Werror=pointer-to-int-cast",
"-Werror=xor-used-as-pow",
+ "-Wimplicit-int-float-conversion",
// http://b/161386391 for -Wno-void-pointer-to-enum-cast
"-Wno-void-pointer-to-enum-cast",
// http://b/161386391 for -Wno-void-pointer-to-int-cast
diff --git a/cc/linkable.go b/cc/linkable.go
index ef204eb..1a9a9ab 100644
--- a/cc/linkable.go
+++ b/cc/linkable.go
@@ -135,6 +135,10 @@
// IsNdk returns true if the library is in the configs known NDK list.
IsNdk(config android.Config) bool
+ // HasStubsVariants true if this module is a stub or has a sibling variant
+ // that is a stub.
+ HasStubsVariants() bool
+
// IsStubs returns true if the this is a stubs library.
IsStubs() bool
diff --git a/cc/prebuilt.go b/cc/prebuilt.go
index ba4c662..96a07bc 100644
--- a/cc/prebuilt.go
+++ b/cc/prebuilt.go
@@ -16,7 +16,6 @@
import (
"path/filepath"
- "strings"
"github.com/google/blueprint/depset"
"github.com/google/blueprint/proptools"
@@ -120,22 +119,6 @@
// Stub variants will create a stub .so file from stub .c files
if p.buildStubs() && objs.objFiles != nil {
// TODO (b/275273834): Make objs.objFiles == nil a hard error when the symbol files have been added to module sdk.
-
- // The map.txt files of libclang_rt.* contain version information, but the checked in .so files do not.
- // e.g. libclang_rt.* libs impl
- // $ nm -D prebuilts/../libclang_rt.hwasan-aarch64-android.so
- // __hwasan_init
-
- // stubs generated from .map.txt
- // $ nm -D out/soong/.intermediates/../<stubs>/libclang_rt.hwasan-aarch64-android.so
- // __hwasan_init@@LIBCLANG_RT_ASAN
-
- // Special-case libclang_rt.* libs to account for this discrepancy.
- // TODO (spandandas): Remove this special case https://r.android.com/3236596 has been submitted, and a new set of map.txt
- // files of libclang_rt.* libs have been generated.
- if strings.Contains(ctx.ModuleName(), "libclang_rt.") {
- p.versionScriptPath = android.OptionalPathForPath(nil)
- }
return p.linkShared(ctx, flags, deps, objs)
}
diff --git a/java/app.go b/java/app.go
index 7f80160..832a083 100644
--- a/java/app.go
+++ b/java/app.go
@@ -1082,7 +1082,17 @@
app.SdkVersion(ctx).Kind != android.SdkCorePlatform && !app.RequiresStableAPIs(ctx)
}
jniLib, prebuiltJniPackages := collectJniDeps(ctx, shouldCollectRecursiveNativeDeps,
- checkNativeSdkVersion, func(dep cc.LinkableInterface) bool { return !dep.IsNdk(ctx.Config()) && !dep.IsStubs() })
+ checkNativeSdkVersion, func(parent, child android.Module) bool {
+ childLinkable, _ := child.(cc.LinkableInterface)
+ parentLinkable, _ := parent.(cc.LinkableInterface)
+ useStubsOfDep := childLinkable.IsStubs()
+ if parent.(android.ApexModule).NotInPlatform() && parentLinkable != nil {
+ // APK-in-APEX
+ // If the parent is a linkable interface, use stubs if the dependency edge crosses an apex boundary.
+ useStubsOfDep = useStubsOfDep || (childLinkable.HasStubsVariants() && cc.ShouldUseStubForApex(ctx, parent, child))
+ }
+ return !childLinkable.IsNdk(ctx.Config()) && !useStubsOfDep
+ })
var certificates []Certificate
@@ -1117,7 +1127,7 @@
func collectJniDeps(ctx android.ModuleContext,
shouldCollectRecursiveNativeDeps bool,
checkNativeSdkVersion bool,
- filter func(cc.LinkableInterface) bool) ([]jniLib, android.Paths) {
+ filter func(parent, child android.Module) bool) ([]jniLib, android.Paths) {
var jniLibs []jniLib
var prebuiltJniPackages android.Paths
seenModulePaths := make(map[string]bool)
@@ -1128,7 +1138,7 @@
if IsJniDepTag(tag) || cc.IsSharedDepTag(tag) {
if dep, ok := module.(cc.LinkableInterface); ok {
- if filter != nil && !filter(dep) {
+ if filter != nil && !filter(parent, module) {
return false
}
diff --git a/rust/rust.go b/rust/rust.go
index 48f946e..eeb228c 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -722,6 +722,10 @@
return false
}
+func (mod *Module) HasStubsVariants() bool {
+ return false
+}
+
func (mod *Module) IsStubs() bool {
return false
}