Merge "Reland "Also package recursive jni_libs deps of android_apps as well as direct deps." with bug fix."
This commit is contained in:
commit
ddd27246ee
5 changed files with 69 additions and 22 deletions
4
cc/cc.go
4
cc/cc.go
|
@ -755,7 +755,7 @@ func (c *Module) isCoverageVariant() bool {
|
|||
return c.coverage.Properties.IsCoverageVariant
|
||||
}
|
||||
|
||||
func (c *Module) isNdk() bool {
|
||||
func (c *Module) IsNdk() bool {
|
||||
return inList(c.Name(), ndkMigratedLibs)
|
||||
}
|
||||
|
||||
|
@ -995,7 +995,7 @@ func (ctx *moduleContextImpl) useVndk() bool {
|
|||
}
|
||||
|
||||
func (ctx *moduleContextImpl) isNdk() bool {
|
||||
return ctx.mod.isNdk()
|
||||
return ctx.mod.IsNdk()
|
||||
}
|
||||
|
||||
func (ctx *moduleContextImpl) isLlndk(config android.Config) bool {
|
||||
|
|
42
java/app.go
42
java/app.go
|
@ -167,18 +167,11 @@ func (a *AndroidApp) DepsMutator(ctx android.BottomUpMutatorContext) {
|
|||
a.aapt.deps(ctx, sdkDep)
|
||||
}
|
||||
|
||||
tag := &jniDependencyTag{}
|
||||
for _, jniTarget := range ctx.MultiTargets() {
|
||||
variation := append(jniTarget.Variations(),
|
||||
blueprint.Variation{Mutator: "link", Variation: "shared"})
|
||||
tag := &jniDependencyTag{
|
||||
target: jniTarget,
|
||||
}
|
||||
ctx.AddFarVariationDependencies(variation, tag, a.appProperties.Jni_libs...)
|
||||
if String(a.appProperties.Stl) == "c++_shared" {
|
||||
if a.shouldEmbedJnis(ctx) {
|
||||
ctx.AddFarVariationDependencies(variation, tag, "ndk_libc++_shared")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a.usesLibrary.deps(ctx, sdkDep.hasFrameworkLibs())
|
||||
|
@ -471,7 +464,7 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
|
||||
dexJarFile := a.dexBuildActions(ctx)
|
||||
|
||||
jniLibs, certificateDeps := collectAppDeps(ctx)
|
||||
jniLibs, certificateDeps := collectAppDeps(ctx, a.shouldEmbedJnis(ctx))
|
||||
jniJarFile := a.jniBuildActions(jniLibs, ctx)
|
||||
|
||||
if ctx.Failed() {
|
||||
|
@ -507,22 +500,33 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
}
|
||||
}
|
||||
|
||||
func collectAppDeps(ctx android.ModuleContext) ([]jniLib, []Certificate) {
|
||||
func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool) ([]jniLib, []Certificate) {
|
||||
var jniLibs []jniLib
|
||||
var certificates []Certificate
|
||||
seenModulePaths := make(map[string]bool)
|
||||
|
||||
ctx.VisitDirectDeps(func(module android.Module) {
|
||||
ctx.WalkDeps(func(module android.Module, parent android.Module) bool {
|
||||
otherName := ctx.OtherModuleName(module)
|
||||
tag := ctx.OtherModuleDependencyTag(module)
|
||||
|
||||
if jniTag, ok := tag.(*jniDependencyTag); ok {
|
||||
if IsJniDepTag(tag) || tag == cc.SharedDepTag {
|
||||
if dep, ok := module.(*cc.Module); ok {
|
||||
if dep.IsNdk() || dep.IsStubs() {
|
||||
return false
|
||||
}
|
||||
|
||||
lib := dep.OutputFile()
|
||||
path := lib.Path()
|
||||
if seenModulePaths[path.String()] {
|
||||
return false
|
||||
}
|
||||
seenModulePaths[path.String()] = true
|
||||
|
||||
if lib.Valid() {
|
||||
jniLibs = append(jniLibs, jniLib{
|
||||
name: ctx.OtherModuleName(module),
|
||||
path: lib.Path(),
|
||||
target: jniTag.target,
|
||||
path: path,
|
||||
target: module.Target(),
|
||||
})
|
||||
} else {
|
||||
ctx.ModuleErrorf("dependency %q missing output file", otherName)
|
||||
|
@ -530,13 +534,19 @@ func collectAppDeps(ctx android.ModuleContext) ([]jniLib, []Certificate) {
|
|||
} else {
|
||||
ctx.ModuleErrorf("jni_libs dependency %q must be a cc library", otherName)
|
||||
}
|
||||
} else if tag == certificateTag {
|
||||
|
||||
return shouldCollectRecursiveNativeDeps
|
||||
}
|
||||
|
||||
if tag == certificateTag {
|
||||
if dep, ok := module.(*AndroidAppCertificate); ok {
|
||||
certificates = append(certificates, dep.Certificate)
|
||||
} else {
|
||||
ctx.ModuleErrorf("certificate dependency %q must be an android_app_certificate module", otherName)
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
})
|
||||
|
||||
return jniLibs, certificates
|
||||
|
@ -968,7 +978,7 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
|
|||
ctx.ModuleErrorf("One and only one of certficate, presigned, and default_dev_cert properties must be set")
|
||||
}
|
||||
|
||||
_, certificates := collectAppDeps(ctx)
|
||||
_, certificates := collectAppDeps(ctx, false)
|
||||
|
||||
// TODO: LOCAL_EXTRACT_APK/LOCAL_EXTRACT_DPI_APK
|
||||
// TODO: LOCAL_PACKAGE_SPLITS
|
||||
|
|
|
@ -200,14 +200,14 @@ func TransformJniLibsToJar(ctx android.ModuleContext, outputFile android.Writabl
|
|||
}
|
||||
|
||||
if uncompressJNI {
|
||||
jarArgs = append(jarArgs, "-L 0")
|
||||
jarArgs = append(jarArgs, "-L", "0")
|
||||
}
|
||||
|
||||
for _, j := range jniLibs {
|
||||
deps = append(deps, j.path)
|
||||
jarArgs = append(jarArgs,
|
||||
"-P "+targetToJniDir(j.target),
|
||||
"-f "+j.path.String())
|
||||
"-P", targetToJniDir(j.target),
|
||||
"-f", j.path.String())
|
||||
}
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
|
|
|
@ -1630,8 +1630,46 @@ func TestAndroidTestImport(t *testing.T) {
|
|||
|
||||
func TestStl(t *testing.T) {
|
||||
ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
|
||||
cc_library {
|
||||
name: "ndk_libunwind",
|
||||
sdk_version: "current",
|
||||
stl: "none",
|
||||
system_shared_libs: [],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libc.ndk.current",
|
||||
sdk_version: "current",
|
||||
stl: "none",
|
||||
system_shared_libs: [],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libm.ndk.current",
|
||||
sdk_version: "current",
|
||||
stl: "none",
|
||||
system_shared_libs: [],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libdl.ndk.current",
|
||||
sdk_version: "current",
|
||||
stl: "none",
|
||||
system_shared_libs: [],
|
||||
}
|
||||
|
||||
cc_object {
|
||||
name: "ndk_crtbegin_so.27",
|
||||
}
|
||||
|
||||
cc_object {
|
||||
name: "ndk_crtend_so.27",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libjni",
|
||||
sdk_version: "current",
|
||||
stl: "c++_shared",
|
||||
}
|
||||
|
||||
android_test {
|
||||
|
|
|
@ -466,7 +466,6 @@ type dependencyTag struct {
|
|||
|
||||
type jniDependencyTag struct {
|
||||
blueprint.BaseDependencyTag
|
||||
target android.Target
|
||||
}
|
||||
|
||||
func IsJniDepTag(depTag blueprint.DependencyTag) bool {
|
||||
|
|
Loading…
Reference in a new issue