summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authormichaelbai <michaelbai@chromium.org>2016-03-23 13:35:23 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-23 20:37:31 +0000
commitb6fa1bb99d858a511761e8625e2436846c88b440 (patch)
tree80f9b0595c50c071dc73ee94416f35aa77803138 /build
parent9a9d0e9e1925d20b48a4d08693d0504939c9f60d (diff)
downloadchromium_src-b6fa1bb99d858a511761e8625e2436846c88b440.zip
chromium_src-b6fa1bb99d858a511761e8625e2436846c88b440.tar.gz
chromium_src-b6fa1bb99d858a511761e8625e2436846c88b440.tar.bz2
Support packaging secondary abi native libraries in APK.
BUG=594807 Review URL: https://codereview.chromium.org/1828523002 Cr-Commit-Position: refs/heads/master@{#382917}
Diffstat (limited to 'build')
-rwxr-xr-xbuild/android/gyp/apkbuilder.py64
-rw-r--r--build/config/android/config.gni5
-rw-r--r--build/config/android/internal_rules.gni12
-rw-r--r--build/config/android/rules.gni2
4 files changed, 70 insertions, 13 deletions
diff --git a/build/android/gyp/apkbuilder.py b/build/android/gyp/apkbuilder.py
index 3661913..ef5f2cf 100755
--- a/build/android/gyp/apkbuilder.py
+++ b/build/android/gyp/apkbuilder.py
@@ -50,8 +50,16 @@ def _ParseArgs(args):
help='GYP-list of native libraries to include. '
'Can be specified multiple times.',
default=[])
+ parser.add_argument('--secondary-native-libs',
+ action='append',
+ help='GYP-list of native libraries for secondary '
+ 'android-abi. Can be specified multiple times.',
+ default=[])
parser.add_argument('--android-abi',
help='Android architecture to use for native libraries')
+ parser.add_argument('--secondary-android-abi',
+ help='The secondary Android architecture to use for'
+ 'secondary native libraries')
parser.add_argument('--native-lib-placeholders',
help='GYP-list of native library placeholders to add.',
default='[]')
@@ -70,10 +78,18 @@ def _ParseArgs(args):
for gyp_list in options.native_libs:
all_libs.extend(build_utils.ParseGypList(gyp_list))
options.native_libs = all_libs
+ secondary_libs = []
+ for gyp_list in options.secondary_native_libs:
+ secondary_libs.extend(build_utils.ParseGypList(gyp_list))
+ options.secondary_native_libs = secondary_libs
+
if not options.android_abi and (options.native_libs or
options.native_lib_placeholders):
raise Exception('Must specify --android-abi with --native-libs')
+ if not options.secondary_android_abi and options.secondary_native_libs:
+ raise Exception('Must specify --secondary-android-abi with'
+ ' --secondary-native-libs')
return options
@@ -143,6 +159,22 @@ def _CreateAssetsList(path_tuples):
return '\n'.join(dests) + '\n'
+def _AddNativeLibraries(out_apk, native_libs, android_abi, uncompress):
+ """Add native libraries to APK."""
+ for path in native_libs:
+ basename = os.path.basename(path)
+ apk_path = 'lib/%s/%s' % (android_abi, basename)
+
+ compress = None
+ if (uncompress and os.path.splitext(basename)[1] == '.so'):
+ compress = False
+
+ build_utils.AddToZipHermetic(out_apk,
+ apk_path,
+ src_path=path,
+ compress=compress)
+
+
def main(args):
args = build_utils.ExpandFileArgs(args)
options = _ParseArgs(args)
@@ -150,6 +182,12 @@ def main(args):
native_libs = sorted(options.native_libs)
input_paths = [options.resource_apk, __file__] + native_libs
+
+ secondary_native_libs = []
+ if options.secondary_native_libs:
+ secondary_native_libs = sorted(options.secondary_native_libs)
+ input_paths += secondary_native_libs
+
if options.dex_file:
input_paths.append(options.dex_file)
@@ -160,6 +198,9 @@ def main(args):
options.native_lib_placeholders,
options.uncompress_shared_libraries]
+ if options.secondary_android_abi:
+ input_strings.append(options.secondary_android_abi)
+
_assets = _ExpandPaths(options.assets)
_uncompressed_assets = _ExpandPaths(options.uncompressed_assets)
@@ -208,19 +249,16 @@ def main(args):
src_path=options.dex_file)
# 4. Native libraries.
- for path in native_libs:
- basename = os.path.basename(path)
- apk_path = 'lib/%s/%s' % (options.android_abi, basename)
-
- compress = None
- if (options.uncompress_shared_libraries and
- os.path.splitext(basename)[1] == '.so'):
- compress = False
-
- build_utils.AddToZipHermetic(out_apk,
- apk_path,
- src_path=path,
- compress=compress)
+ _AddNativeLibraries(out_apk,
+ native_libs,
+ options.android_abi,
+ options.uncompress_shared_libraries)
+
+ if options.secondary_android_abi:
+ _AddNativeLibraries(out_apk,
+ secondary_native_libs,
+ options.secondary_android_abi,
+ options.uncompress_shared_libraries)
for name in sorted(options.native_lib_placeholders):
# Empty libs files are ignored by md5check, but rezip requires them
diff --git a/build/config/android/config.gni b/build/config/android/config.gni
index aff3b2f..1009801 100644
--- a/build/config/android/config.gni
+++ b/build/config/android/config.gni
@@ -232,8 +232,11 @@ if (is_android) {
# ABI ------------------------------------------------------------------------
+ # Intentionally do not define android_app_secondary_abi for 64-bit
+ # android_app_abi, since they are not used.
if (current_cpu == "x86") {
android_app_abi = "x86"
+ android_app_secondary_abi = "x86_64"
} else if (current_cpu == "arm") {
import("//build/config/arm.gni")
if (arm_version < 7) {
@@ -241,8 +244,10 @@ if (is_android) {
} else {
android_app_abi = "armeabi-v7a"
}
+ android_app_secondary_abi = "arm64-v8a"
} else if (current_cpu == "mipsel") {
android_app_abi = "mips"
+ android_app_secondary_abi = "mips64"
} else if (current_cpu == "x64") {
android_app_abi = "x86_64"
} else if (current_cpu == "arm64") {
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 6c421df..d5ad627 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -784,6 +784,16 @@ template("package_apk") {
if (_native_lib_placeholders != []) {
args += [ "--native-lib-placeholders=$_native_lib_placeholders" ]
}
+ if (defined(invoker.secondary_native_libs) &&
+ invoker.secondary_native_libs != []) {
+ assert(defined(android_app_secondary_abi))
+ inputs += invoker.secondary_native_libs
+ _secondary_native_libs = rebase_path(invoker.secondary_native_libs)
+ args += [
+ "--secondary-native-libs=$_secondary_native_libs",
+ "--secondary-android-abi=$android_app_secondary_abi",
+ ]
+ }
if (defined(invoker.emma_instrument) && invoker.emma_instrument) {
_emma_device_jar = "$android_sdk_root/tools/lib/emma_device.jar"
@@ -1100,6 +1110,7 @@ template("create_apk") {
"emma_instrument",
"native_lib_placeholders",
"native_libs_filearg",
+ "secondary_native_libs",
"uncompress_shared_libraries",
"write_asset_list",
])
@@ -1120,6 +1131,7 @@ template("create_apk") {
[
"assets_build_config",
"emma_instrument",
+ "secondary_native_libs",
"uncompress_shared_libraries",
])
_dex_target = "//build/android/incremental_install:bootstrap_java__dex"
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index f024675..9ed3a69 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1270,6 +1270,7 @@ template("android_java_prebuilt") {
# requires_sdk_api_level_23: If defined and true, the apk is intended for
# installation only on Android M or later. In these releases the system
# linker does relocation unpacking, so we can enable it unconditionally.
+# secondary_native_libs: the path of native libraries for secondary app abi.
#
# DEPRECATED_java_in_dir: Directory containing java files. All .java files in
# this directory will be included in the library. This is only supported to
@@ -1774,6 +1775,7 @@ template("android_apk") {
"language_splits",
"page_align_shared_libraries",
"public_deps",
+ "secondary_native_libs",
"shared_resources",
"uncompress_shared_libraries",
"write_asset_list",