Index: build/config/android/rules.gni |
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni |
index 704ca6dbbd57014feb4941ff4290f9f8b891a88b..fe8e24f175a1fb2a4b42f45c005cde363355d031 100644 |
--- a/build/config/android/rules.gni |
+++ b/build/config/android/rules.gni |
@@ -1293,30 +1293,29 @@ template("android_apk") { |
_srcjar_deps += invoker.srcjar_deps |
} |
- _load_library_from_apk = false |
+ _use_chromium_linker = |
+ defined(invoker.use_chromium_linker) && invoker.use_chromium_linker && |
+ chromium_linker_supported |
+ _enable_relocation_packing = |
+ defined(invoker.enable_relocation_packing) && |
+ invoker.enable_relocation_packing && _use_chromium_linker |
+ _load_library_from_apk = |
+ defined(invoker.load_library_from_apk) && invoker.load_library_from_apk |
+ |
+ assert(_use_chromium_linker || true) # Mark as used. |
+ assert(_enable_relocation_packing || true) # Mark as used. |
+ |
+ assert( |
+ !_load_library_from_apk || _use_chromium_linker, |
+ "Loading library from the apk requires use" + " of the Chromium linker.") |
# The dependency that makes the chromium linker, if any is needed. |
- _chromium_linker_dep = [] |
+ _native_libs_deps = [] |
if (defined(invoker.native_libs) && invoker.native_libs != []) { |
- _use_chromium_linker = false |
- if (defined(invoker.use_chromium_linker)) { |
- _use_chromium_linker = |
- invoker.use_chromium_linker && chromium_linker_supported |
- _chromium_linker_dep = [ "//base/android/linker:chromium_android_linker" ] |
- } |
- |
- if (defined(invoker.load_library_from_apk) && |
- invoker.load_library_from_apk) { |
- _load_library_from_apk = true |
- assert(_use_chromium_linker, |
- "Loading library from the apk requires use" + |
- " of the Chromium linker.") |
- } |
- |
if (is_component_build) { |
_native_libs += [ "$root_shlib_dir/libc++_shared.so" ] |
- _chromium_linker_dep += [ "//build/android:cpplib_stripped" ] |
+ _native_libs_deps += [ "//build/android:cpplib_stripped" ] |
} |
# Allow native_libs to be in the form "foo.so" or "foo.cr.so" |
@@ -1326,21 +1325,6 @@ template("android_apk") { |
_first_ext_removed, |
"$root_shlib_dir/{{source_name_part}}$shlib_extension") |
- # Add in target_cpu so that other architectures are not accidentally |
- # included when switching target_cpu without doing a clean build. |
- _native_libs_dir = gen_dir + "/lib-$target_cpu" |
- |
- if (_use_chromium_linker) { |
- _native_libs += |
- [ "$root_shlib_dir/libchromium_android_linker$shlib_extension" ] |
- } |
- |
- _enable_relocation_packing = false |
- if (_use_chromium_linker && defined(invoker.enable_relocation_packing) && |
- invoker.enable_relocation_packing) { |
- _enable_relocation_packing = true |
- } |
- |
_native_lib_version_rule = "" |
if (defined(invoker.native_lib_version_rule)) { |
_native_lib_version_rule = invoker.native_lib_version_rule |
@@ -1387,7 +1371,7 @@ template("android_apk") { |
build_config = _build_config |
android_manifest = _android_manifest |
- deps = _chromium_linker_dep + _android_manifest_deps |
+ deps = _native_libs_deps + _android_manifest_deps |
if (defined(invoker.deps)) { |
deps += invoker.deps |
} |
@@ -1592,62 +1576,67 @@ template("android_apk") { |
} |
} |
- if (_native_libs != []) { |
+ _native_libs_file_arg_dep = ":$build_config_target" |
+ _native_libs_file_arg = "@FileArg($_rebased_build_config:native:libraries)" |
+ |
+ if (_native_libs != [] && _enable_relocation_packing) { |
_prepare_native_target_name = "${_template_name}__prepare_native" |
+ _native_libs_dir = "$gen_dir/packed-libs" |
+ _native_libs_json = "$gen_dir/packed-libs/filelist.json" |
+ _rebased_native_libs_json = rebase_path(_native_libs_json, root_build_dir) |
+ |
+ _native_libs_file_arg_dep = ":$_prepare_native_target_name" |
+ _native_libs_file_arg = "@FileArg($_rebased_native_libs_json:files)" |
+ |
action(_prepare_native_target_name) { |
forward_variables_from(invoker, |
[ |
- "data_deps", |
+ "deps", |
"public_deps", |
]) |
script = "//build/android/gyp/pack_relocations.py" |
- packed_libraries_dir = "$_native_libs_dir/$android_app_abi" |
depfile = "$target_gen_dir/$target_name.d" |
outputs = [ |
depfile, |
+ _native_libs_json, |
] |
- inputs = _native_libs |
- deps = _chromium_linker_dep |
+ inputs = _native_libs + [ _build_config ] |
- inputs += [ _build_config ] |
- deps += [ ":$build_config_target" ] |
- |
- rebased_gdbserver = rebase_path(android_gdbserver, root_build_dir) |
- skip_packing_list = [ |
- rebased_gdbserver, |
- "libchromium_android_linker.so", |
+ deps += _native_libs_deps |
+ deps += [ |
+ ":$build_config_target", |
+ relocation_packer_target, |
] |
- enable_packing_arg = 0 |
- if (_enable_relocation_packing) { |
- enable_packing_arg = 1 |
- deps += [ relocation_packer_target ] |
- } |
- |
args = [ |
"--depfile", |
rebase_path(depfile, root_build_dir), |
- "--enable-packing=$enable_packing_arg", |
- "--exclude-packing-list=$skip_packing_list", |
+ "--enable-packing=1", |
"--android-pack-relocations", |
rebase_path(relocation_packer_exe, root_build_dir), |
"--stripped-libraries-dir", |
rebase_path(root_build_dir, root_build_dir), |
"--packed-libraries-dir", |
- rebase_path(packed_libraries_dir, root_build_dir), |
+ rebase_path(_native_libs_dir, root_build_dir), |
"--libraries=@FileArg(${_rebased_build_config}:native:libraries)", |
- "--clear-dir", |
+ "--filelistjson=$_rebased_native_libs_json", |
] |
+ } |
+ } |
- if (defined(invoker.deps)) { |
- deps += invoker.deps |
- } |
+ _extra_native_libs = [] |
+ _extra_native_libs_deps = [] |
+ if (_native_libs != []) { |
+ if (is_debug) { |
+ _extra_native_libs = [ android_gdbserver ] |
+ } |
- if (is_debug) { |
- inputs += [ android_gdbserver ] |
- args += [ "--libraries=$rebased_gdbserver" ] |
- } |
+ if (_use_chromium_linker) { |
+ _extra_native_libs = |
+ [ "$root_shlib_dir/libchromium_android_linker$shlib_extension" ] |
+ _extra_native_libs_deps += |
+ [ "//base/android/linker:chromium_android_linker" ] |
} |
} |
@@ -1660,6 +1649,7 @@ template("android_apk") { |
"deps", |
"extensions_to_not_compress", |
"language_splits", |
+ "public_deps", |
"shared_resources", |
"write_asset_list", |
]) |
@@ -1700,13 +1690,14 @@ template("android_apk") { |
] |
if (_native_libs != [] && !_create_abi_split) { |
- native_libs_dir = _native_libs_dir |
+ deps += _native_libs_deps + _extra_native_libs_deps + |
+ [ _native_libs_file_arg_dep ] |
+ native_libs_filearg = _native_libs_file_arg |
+ native_libs = _extra_native_libs |
# Placeholders necessary for some older devices. |
# http://crbug.com/395038 |
forward_variables_from(invoker, [ "native_lib_placeholders" ]) |
- |
- deps += [ ":$_prepare_native_target_name" ] |
} |
} |
@@ -1738,17 +1729,22 @@ template("android_apk") { |
keystore_path = _keystore_path |
keystore_password = _keystore_password |
- native_libs_dir = _native_libs_dir |
- |
# Placeholders necessary for some older devices. |
# http://crbug.com/395038 |
- forward_variables_from(invoker, [ "native_lib_placeholders" ]) |
+ deps = [] |
+ forward_variables_from(invoker, |
+ [ |
+ "deps", |
+ "native_lib_placeholders", |
+ "public_deps", |
+ ]) |
- deps = [ |
- ":${_manifest_rule}", |
- ":${_prepare_native_target_name}", |
- ] |
- incremental_deps = deps |
+ incremental_deps = deps + [ ":$_manifest_rule" ] |
+ deps = [] |
+ deps = incremental_deps + _native_libs_deps + _extra_native_libs_deps + |
+ [ _native_libs_file_arg_dep ] |
+ native_libs_filearg = _native_libs_file_arg |
+ native_libs = _extra_native_libs |
} |
} |
@@ -1757,7 +1753,7 @@ template("android_apk") { |
script = "//build/android/incremental_install/create_install_script.py" |
depfile = "$target_gen_dir/$target_name.d" |
deps = [ |
- ":$build_config_target", |
+ _native_libs_file_arg_dep, |
] |
_generated_script_path = |
@@ -1783,9 +1779,13 @@ template("android_apk") { |
if (_proguard_enabled) { |
args += [ "--show-proguard-warning" ] |
} |
- if (defined(_native_libs_dir)) { |
- _rebased_native_libs_dir = rebase_path(_native_libs_dir, root_build_dir) |
- args += [ "--lib-dir=$_rebased_native_libs_dir/$android_app_abi" ] |
+ if (defined(_native_libs_file_arg)) { |
+ args += [ "--native-libs=$_native_libs_file_arg" ] |
+ } |
+ if (_extra_native_libs != []) { |
+ _rebased_extra_native_libs = |
+ rebase_path(_extra_native_libs, root_build_dir) |
+ args += [ "--native-libs=$_rebased_extra_native_libs" ] |
} |
if (_create_density_splits) { |
args += [ "--split=${_rebased_apk_path_no_ext}-density-*.apk" ] |
@@ -1804,7 +1804,8 @@ template("android_apk") { |
forward_variables_from(invoker, [ "data_deps" ]) |
# device/commands is used by the installer script to push files via .zip. |
- data_deps += [ "//build/android/pylib/device/commands" ] |
+ data_deps += [ "//build/android/pylib/device/commands" ] + |
+ _native_libs_deps + _extra_native_libs_deps |
# Since the _incremental.apk does not include use .so nor .dex from the |
# actual target, but instead loads them at runtime, we need to explicitly |
@@ -1814,9 +1815,6 @@ template("android_apk") { |
":${_template_name}__create_incremental", |
":${java_target}", |
] |
- if (_native_libs != []) { |
- public_deps += [ ":$_prepare_native_target_name" ] |
- } |
} |
} |