diff options
author | Colin Cross <ccross@android.com> | 2020-07-17 22:16:01 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-07-17 22:16:01 +0000 |
commit | 681d4b7cf1f0195a6f1d62d55ed61a3b51a85986 (patch) | |
tree | 792c7d70e973f04ac251dd8e35ac120ea4492ac2 | |
parent | db4d465142d7ec6a987d36c9b628a6c31590b3dd (diff) | |
parent | b32b71222e2ae958f8c06e415c434e4b067a8527 (diff) | |
download | build_soong-681d4b7cf1f0195a6f1d62d55ed61a3b51a85986.tar.gz build_soong-681d4b7cf1f0195a6f1d62d55ed61a3b51a85986.tar.bz2 build_soong-681d4b7cf1f0195a6f1d62d55ed61a3b51a85986.zip |
Merge "Pass unstripped JNI libraries to Make" into rvc-dev
-rw-r--r-- | apex/androidmk.go | 15 | ||||
-rw-r--r-- | java/androidmk.go | 10 | ||||
-rwxr-xr-x | java/app.go | 43 | ||||
-rw-r--r-- | java/java.go | 9 |
4 files changed, 56 insertions, 21 deletions
diff --git a/apex/androidmk.go b/apex/androidmk.go index e299588a..5879e56a 100644 --- a/apex/androidmk.go +++ b/apex/androidmk.go @@ -113,10 +113,11 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, apexName, mo } // /apex/<apex_name>/{lib|framework|...} pathWhenActivated := filepath.Join("$(PRODUCT_OUT)", "apex", apexName, fi.installDir) + var modulePath string if apexType == flattenedApex { // /system/apex/<name>/{lib|framework|...} - fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join(a.installDir.ToMakePath().String(), - apexBundleName, fi.installDir)) + modulePath = filepath.Join(a.installDir.ToMakePath().String(), apexBundleName, fi.installDir) + fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", modulePath) if a.primaryApexType && !symbolFilesNotNeeded { fmt.Fprintln(w, "LOCAL_SOONG_SYMBOL_PATH :=", pathWhenActivated) } @@ -128,6 +129,7 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, apexName, mo fmt.Fprintln(w, "LOCAL_NOTICE_FILE :=", fi.module.NoticeFile().Path().String()) } } else { + modulePath = pathWhenActivated fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", pathWhenActivated) // For non-flattend APEXes, the merged notice file is attached to the APEX itself. @@ -190,8 +192,13 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, apexName, mo // we need to remove the suffix from LOCAL_MODULE_STEM, otherwise // we will have foo.apk.apk fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", strings.TrimSuffix(fi.Stem(), ".apk")) - if app, ok := fi.module.(*java.AndroidApp); ok && len(app.JniCoverageOutputs()) > 0 { - fmt.Fprintln(w, "LOCAL_PREBUILT_COVERAGE_ARCHIVE :=", strings.Join(app.JniCoverageOutputs().Strings(), " ")) + if app, ok := fi.module.(*java.AndroidApp); ok { + if jniCoverageOutputs := app.JniCoverageOutputs(); len(jniCoverageOutputs) > 0 { + fmt.Fprintln(w, "LOCAL_PREBUILT_COVERAGE_ARCHIVE :=", strings.Join(jniCoverageOutputs.Strings(), " ")) + } + if jniLibSymbols := app.JNISymbolsInstalls(modulePath); len(jniLibSymbols) > 0 { + fmt.Fprintln(w, "LOCAL_SOONG_JNI_LIBS_SYMBOLS :=", jniLibSymbols.String()) + } } fmt.Fprintln(w, "include $(BUILD_SYSTEM)/soong_app_prebuilt.mk") case appSet: diff --git a/java/androidmk.go b/java/androidmk.go index 48b9f868..62f97067 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -374,9 +374,15 @@ func (app *AndroidApp) AndroidMkEntries() []android.AndroidMkEntries { entries.SetString("LOCAL_CERTIFICATE", app.certificate.AndroidMkString()) entries.AddStrings("LOCAL_OVERRIDES_PACKAGES", app.getOverriddenPackages()...) - for _, jniLib := range app.installJniLibs { - entries.AddStrings("LOCAL_SOONG_JNI_LIBS_"+jniLib.target.Arch.ArchType.String(), jniLib.name) + if app.embeddedJniLibs { + jniSymbols := app.JNISymbolsInstalls(app.installPathForJNISymbols.String()) + entries.SetString("LOCAL_SOONG_JNI_LIBS_SYMBOLS", jniSymbols.String()) + } else { + for _, jniLib := range app.jniLibs { + entries.AddStrings("LOCAL_SOONG_JNI_LIBS_"+jniLib.target.Arch.ArchType.String(), jniLib.name) + } } + if len(app.jniCoverageOutputs) > 0 { entries.AddStrings("LOCAL_PREBUILT_COVERAGE_ARCHIVE", app.jniCoverageOutputs.Strings()...) } diff --git a/java/app.go b/java/app.go index fe703843..e75d8749 100755 --- a/java/app.go +++ b/java/app.go @@ -291,8 +291,10 @@ type AndroidApp struct { overridableAppProperties overridableAppProperties - installJniLibs []jniLib - jniCoverageOutputs android.Paths + jniLibs []jniLib + installPathForJNISymbols android.Path + embeddedJniLibs bool + jniCoverageOutputs android.Paths bundleFile android.Path @@ -567,8 +569,7 @@ func (a *AndroidApp) proguardBuildActions(ctx android.ModuleContext) { a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, a.proguardOptionsFile) } -func (a *AndroidApp) dexBuildActions(ctx android.ModuleContext) android.Path { - +func (a *AndroidApp) installPath(ctx android.ModuleContext) android.InstallPath { var installDir string if ctx.ModuleName() == "framework-res" { // framework-res.apk is installed as system/framework/framework-res.apk @@ -578,7 +579,12 @@ func (a *AndroidApp) dexBuildActions(ctx android.ModuleContext) android.Path { } else { installDir = filepath.Join("app", a.installApkName) } - a.dexpreopter.installPath = android.PathForModuleInstall(ctx, installDir, a.installApkName+".apk") + + return android.PathForModuleInstall(ctx, installDir, a.installApkName+".apk") +} + +func (a *AndroidApp) dexBuildActions(ctx android.ModuleContext) android.Path { + a.dexpreopter.installPath = a.installPath(ctx) if a.deviceProperties.Uncompress_dex == nil { // If the value was not force-set by the user, use reasonable default based on the module. a.deviceProperties.Uncompress_dex = proptools.BoolPtr(a.shouldUncompressDex(ctx)) @@ -600,8 +606,10 @@ func (a *AndroidApp) dexBuildActions(ctx android.ModuleContext) android.Path { func (a *AndroidApp) jniBuildActions(jniLibs []jniLib, ctx android.ModuleContext) android.WritablePath { var jniJarFile android.WritablePath if len(jniLibs) > 0 { + a.jniLibs = jniLibs if a.shouldEmbedJnis(ctx) { jniJarFile = android.PathForModuleOut(ctx, "jnilibs.zip") + a.installPathForJNISymbols = a.installPath(ctx).ToMakePath() TransformJniLibsToJar(ctx, jniJarFile, jniLibs, a.useEmbeddedNativeLibs(ctx)) for _, jni := range jniLibs { if jni.coverageFile.Valid() { @@ -619,13 +627,25 @@ func (a *AndroidApp) jniBuildActions(jniLibs []jniLib, ctx android.ModuleContext } } } - } else { - a.installJniLibs = jniLibs + a.embeddedJniLibs = true } } return jniJarFile } +func (a *AndroidApp) JNISymbolsInstalls(installPath string) android.RuleBuilderInstalls { + var jniSymbols android.RuleBuilderInstalls + for _, jniLib := range a.jniLibs { + if jniLib.unstrippedFile != nil { + jniSymbols = append(jniSymbols, android.RuleBuilderInstall{ + From: jniLib.unstrippedFile, + To: filepath.Join(installPath, targetToJniDir(jniLib.target), jniLib.unstrippedFile.Base()), + }) + } + } + return jniSymbols +} + func (a *AndroidApp) noticeBuildActions(ctx android.ModuleContext) { // Collect NOTICE files from all dependencies. seenModules := make(map[android.Module]bool) @@ -852,10 +872,11 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface, if lib.Valid() { jniLibs = append(jniLibs, jniLib{ - name: ctx.OtherModuleName(module), - path: path, - target: module.Target(), - coverageFile: dep.CoverageOutputFile(), + name: ctx.OtherModuleName(module), + path: path, + target: module.Target(), + coverageFile: dep.CoverageOutputFile(), + unstrippedFile: dep.UnstrippedOutputFile(), }) } else { ctx.ModuleErrorf("dependency %q missing output file", otherName) diff --git a/java/java.go b/java/java.go index 72c91a5e..0a764e63 100644 --- a/java/java.go +++ b/java/java.go @@ -626,10 +626,11 @@ func (s sdkDep) hasFrameworkLibs() bool { } type jniLib struct { - name string - path android.Path - target android.Target - coverageFile android.OptionalPath + name string + path android.Path + target android.Target + coverageFile android.OptionalPath + unstrippedFile android.Path } func (j *Module) shouldInstrument(ctx android.BaseModuleContext) bool { |