diff options
author | Peter Collingbourne <pcc@google.com> | 2019-12-18 23:29:58 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-12-18 23:29:58 +0000 |
commit | ddd27246ee988fd66d9264ca28d789d41516d53c (patch) | |
tree | b5ad2ff4de1a1f3731a655c8137cb4e9d86df348 /java | |
parent | 0bfb9e8d9b6c61af0593d7642770f05da64aaffa (diff) | |
parent | ad84f975d2cf6eedb2bc3aa4f027b9c0a3664d83 (diff) | |
download | build_soong-ddd27246ee988fd66d9264ca28d789d41516d53c.tar.gz build_soong-ddd27246ee988fd66d9264ca28d789d41516d53c.tar.bz2 build_soong-ddd27246ee988fd66d9264ca28d789d41516d53c.zip |
Merge "Reland "Also package recursive jni_libs deps of android_apps as well as direct deps." with bug fix."
Diffstat (limited to 'java')
-rwxr-xr-x | java/app.go | 42 | ||||
-rw-r--r-- | java/app_builder.go | 6 | ||||
-rw-r--r-- | java/app_test.go | 38 | ||||
-rw-r--r-- | java/java.go | 1 |
4 files changed, 67 insertions, 20 deletions
diff --git a/java/app.go b/java/app.go index 9fa7179f..ae637fd7 100755 --- a/java/app.go +++ b/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 diff --git a/java/app_builder.go b/java/app_builder.go index ec2f6daf..5e7fbe6d 100644 --- a/java/app_builder.go +++ b/java/app_builder.go @@ -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{ diff --git a/java/app_test.go b/java/app_test.go index 335cdbff..9bdef4e9 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -1631,7 +1631,45 @@ 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 { diff --git a/java/java.go b/java/java.go index 59bfaf75..9745da45 100644 --- a/java/java.go +++ b/java/java.go @@ -466,7 +466,6 @@ type dependencyTag struct { type jniDependencyTag struct { blueprint.BaseDependencyTag - target android.Target } func IsJniDepTag(depTag blueprint.DependencyTag) bool { |