aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorPeter Collingbourne <pcc@google.com>2019-12-18 23:29:58 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-12-18 23:29:58 +0000
commitddd27246ee988fd66d9264ca28d789d41516d53c (patch)
treeb5ad2ff4de1a1f3731a655c8137cb4e9d86df348 /java
parent0bfb9e8d9b6c61af0593d7642770f05da64aaffa (diff)
parentad84f975d2cf6eedb2bc3aa4f027b9c0a3664d83 (diff)
downloadbuild_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-xjava/app.go42
-rw-r--r--java/app_builder.go6
-rw-r--r--java/app_test.go38
-rw-r--r--java/java.go1
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 {