Commit c08745ca authored by Tibor Goldschwendt's avatar Tibor Goldschwendt Committed by Commit Bot

[build] Move logic selecting feature module libraries into Chrome layer

The decision logic depends on browser and webview bitness. These are
Chrome concepts. Therefore, move the decision logic from //build to
//chrome.

Change-Id: Idd334e521ed30dd09805c795be32f790a52a51cc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1730834
Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
Commit-Queue: Samuel Huang <huangs@chromium.org>
Auto-Submit: Tibor Goldschwendt <tiborg@chromium.org>
Reviewed-by: default avatarEric Stevenson <estevenson@chromium.org>
Reviewed-by: default avatarSamuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683204}
parent 3793966a
......@@ -3445,14 +3445,6 @@ if (enable_java_templates) {
# base module (optional).
# base_module_target: Base module target of the bundle this module will be
# added to (optional). Can only be specified for non-base modules.
# native_switches: Forwarded switches to decide how to assign native
# libraries and placeholders (optional). Its members are:
# * is_64_bit_browser
# * include_32_bit_webview
# loadable_modules_if_32_bit: Native libraries to use if the binary ABI is
# 32-bit (optional).
# loadable_modules_if_64_bit: Native libraries to use if the binary ABI is
# 64-bit (optional).
template("android_app_bundle_module") {
_is_base_module = defined(invoker.is_base_module) && invoker.is_base_module
......@@ -3504,10 +3496,12 @@ if (enable_java_templates) {
"jni_registration_header",
"jni_sources_blacklist",
"load_library_from_apk",
"loadable_modules",
"locale_config_java_packages",
"manifest_package",
"max_sdk_version",
"locale_config_java_packages",
"min_sdk_version",
"native_lib_placeholders",
"native_lib_version_arg",
"native_lib_version_rule",
"negative_main_dex_globs",
......@@ -3523,7 +3517,9 @@ if (enable_java_templates) {
"resource_blacklist_regex",
"resource_ids_provider_dep",
"resources_config_path",
"secondary_abi_loadable_modules",
"secondary_abi_shared_libraries",
"secondary_native_lib_placeholders",
"shared_libraries",
"shared_resources",
"shared_resources_whitelist_locales",
......@@ -3542,63 +3538,6 @@ if (enable_java_templates) {
"version_name",
"write_asset_list",
])
# Specify native libraries and placeholders.
if (defined(invoker.native_switches)) {
_native_switches = invoker.native_switches
assert(invoker.loadable_modules_if_32_bit != [])
assert(!_native_switches.is_64_bit_browser ||
invoker.loadable_modules_if_64_bit != [])
# Decision logic: Assign decision variables:
# loadable_modules_to_use: Either |loadable_modules_if_64_bit| or
# |loadable_modules_if_32_bit|.
# native_is_primary: Whether |loadable_modules_to_use| should be
# assigned as primary ABI or secondary ABI.
# native_need_placeholder: Whether a placeholder is needed for the
# complementary ABI to the library.
if (_native_switches.is_64_bit_browser) {
_loadable_modules_to_use = invoker.loadable_modules_if_64_bit
_native_is_primary =
!build_apk_secondary_abi || android_64bit_target_cpu
_native_need_placeholder =
build_apk_secondary_abi && _native_switches.include_32_bit_webview
} else {
if (defined(invoker.loadable_modules_if_64_bit)) {
not_needed(invoker, [ "loadable_modules_if_64_bit" ])
}
_loadable_modules_to_use = invoker.loadable_modules_if_32_bit
_native_is_primary =
!build_apk_secondary_abi || !android_64bit_target_cpu
_native_need_placeholder =
build_apk_secondary_abi && android_64bit_target_cpu
}
# Realization logic: Assign libraries and placeholders.
if (_native_is_primary) {
loadable_modules = _loadable_modules_to_use
if (_native_need_placeholder) {
secondary_native_lib_placeholders = [ "libdummy.so" ]
}
} else {
secondary_abi_loadable_modules = _loadable_modules_to_use
if (_native_need_placeholder) {
native_lib_placeholders = [ "libdummy.so" ]
}
}
} else {
assert(!defined(invoker.loadable_modules_if_32_bit))
assert(!defined(invoker.loadable_modules_if_64_bit))
forward_variables_from(invoker,
[
"loadable_modules",
"native_lib_placeholders",
"secondary_abi_loadable_modules",
"secondary_native_lib_placeholders",
])
}
is_bundle_module = true
generate_buildconfig_java = _is_base_module
no_build_hooks = !_is_base_module
......
......@@ -19,7 +19,15 @@ import("//chrome/android/modules/chrome_feature_modules.gni")
# include_32_bit_webview: (Optional) Whether to include 32 bit code for
# WebView.
template("chrome_feature_module") {
assert(defined(invoker.module_desc))
assert(defined(invoker.module_name_suffix))
_module_desc = invoker.module_desc
_is_monochrome_or_trichrome = defined(invoker.is_monochrome_or_trichrome) &&
invoker.is_monochrome_or_trichrome
_is_64_bit_browser =
defined(invoker.is_64_bit_browser) && invoker.is_64_bit_browser
_include_32_bit_webview =
defined(invoker.include_32_bit_webview) && invoker.include_32_bit_webview
android_app_bundle_module(target_name) {
forward_variables_from(invoker,
......@@ -63,14 +71,11 @@ template("chrome_feature_module") {
}
if (defined(_module_desc.native_deps) && _module_desc.native_deps != []) {
_is_monochrome_or_trichrome =
defined(invoker.is_monochrome_or_trichrome) &&
invoker.is_monochrome_or_trichrome
_arch = ""
_toolchain = ""
_root_out_dir = root_out_dir
if (android_64bit_target_cpu && _is_monochrome_or_trichrome) {
if (defined(invoker.is_64_bit_browser) && invoker.is_64_bit_browser) {
if (_is_64_bit_browser) {
_arch = "_64"
} else {
_toolchain = "($android_secondary_abi_toolchain)"
......@@ -92,8 +97,8 @@ template("chrome_feature_module") {
# for the other architecture if required.
_loadable_modules_32_bit += [ _native_library ]
_loadable_modules_64_bit += [ _native_library ]
} else if (defined(invoker.is_monochrome_or_trichrome)) {
not_needed(invoker, [ "is_monochrome_or_trichrome" ])
} else {
not_needed([ "_is_monochrome_or_trichrome" ])
}
if (defined(_module_desc.loadable_module_dep)) {
......@@ -115,21 +120,53 @@ template("chrome_feature_module") {
}
}
# Specify native libraries and placeholders.
if (_loadable_modules_32_bit != [] || _loadable_modules_64_bit != []) {
# TODO(tiborg): Move loadable module selection logic here.
native_switches = {
is_64_bit_browser = invoker.is_64_bit_browser
include_32_bit_webview = invoker.include_32_bit_webview
}
loadable_modules_if_32_bit = _loadable_modules_32_bit
loadable_modules_if_64_bit = _loadable_modules_64_bit
} else {
if (defined(invoker.is_64_bit_browser)) {
not_needed(invoker, [ "is_64_bit_browser" ])
# Decision logic: Assign decision variables:
# _loadable_modules_to_use: Either |_loadable_modules_64_bit| or
# |_loadable_modules_32_bit|.
# _native_is_primary: Whether |_loadable_modules_to_use| should be
# assigned as primary ABI or secondary ABI.
# _native_need_placeholder: Whether a placeholder is needed for the
# complementary ABI to the library.
if (_is_64_bit_browser) {
assert(_loadable_modules_64_bit != [])
not_needed([ "_loadable_modules_32_bit" ])
_loadable_modules_to_use = _loadable_modules_64_bit
_native_is_primary =
!build_apk_secondary_abi || android_64bit_target_cpu
_native_need_placeholder =
build_apk_secondary_abi && _include_32_bit_webview
} else {
assert(_loadable_modules_32_bit != [])
not_needed([
"_loadable_modules_64_bit",
"_include_32_bit_webview",
])
_loadable_modules_to_use = _loadable_modules_32_bit
_native_is_primary =
!build_apk_secondary_abi || !android_64bit_target_cpu
_native_need_placeholder =
build_apk_secondary_abi && android_64bit_target_cpu
}
if (defined(invoker.include_32_bit_webview)) {
not_needed(invoker, [ "include_32_bit_webview" ])
# Realization logic: Assign libraries and placeholders.
if (_native_is_primary) {
loadable_modules = _loadable_modules_to_use
if (_native_need_placeholder) {
secondary_native_lib_placeholders = [ "libdummy.so" ]
}
} else {
secondary_abi_loadable_modules = _loadable_modules_to_use
if (_native_need_placeholder) {
native_lib_placeholders = [ "libdummy.so" ]
}
}
} else {
not_needed([
"_is_64_bit_browser",
"_include_32_bit_webview",
])
}
}
}
......@@ -41,9 +41,9 @@ resource_packages_id_mapping = [
# feature module library.
# proguard_async: (Optional) Whether to proguard the module asynchronously.
# loadable_modules_32_bit: (Optional) List of additional 32-bit shared
# library files going into module.
# library files going into module if the module is executed in 32 bit.
# loadable_modules_64_bit: (Optional) List of additional 64-bit shared
# library files going into module.
# library files going into module if the module is executed in 64 bit.
# Each new module needs to add a desc to one of the lists below.
# Modules shipped in Chrome Modern (Android L+).
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment