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) { ...@@ -3445,14 +3445,6 @@ if (enable_java_templates) {
# base module (optional). # base module (optional).
# base_module_target: Base module target of the bundle this module will be # base_module_target: Base module target of the bundle this module will be
# added to (optional). Can only be specified for non-base modules. # 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") { template("android_app_bundle_module") {
_is_base_module = defined(invoker.is_base_module) && invoker.is_base_module _is_base_module = defined(invoker.is_base_module) && invoker.is_base_module
...@@ -3504,10 +3496,12 @@ if (enable_java_templates) { ...@@ -3504,10 +3496,12 @@ if (enable_java_templates) {
"jni_registration_header", "jni_registration_header",
"jni_sources_blacklist", "jni_sources_blacklist",
"load_library_from_apk", "load_library_from_apk",
"loadable_modules",
"locale_config_java_packages",
"manifest_package", "manifest_package",
"max_sdk_version", "max_sdk_version",
"locale_config_java_packages",
"min_sdk_version", "min_sdk_version",
"native_lib_placeholders",
"native_lib_version_arg", "native_lib_version_arg",
"native_lib_version_rule", "native_lib_version_rule",
"negative_main_dex_globs", "negative_main_dex_globs",
...@@ -3523,7 +3517,9 @@ if (enable_java_templates) { ...@@ -3523,7 +3517,9 @@ if (enable_java_templates) {
"resource_blacklist_regex", "resource_blacklist_regex",
"resource_ids_provider_dep", "resource_ids_provider_dep",
"resources_config_path", "resources_config_path",
"secondary_abi_loadable_modules",
"secondary_abi_shared_libraries", "secondary_abi_shared_libraries",
"secondary_native_lib_placeholders",
"shared_libraries", "shared_libraries",
"shared_resources", "shared_resources",
"shared_resources_whitelist_locales", "shared_resources_whitelist_locales",
...@@ -3542,63 +3538,6 @@ if (enable_java_templates) { ...@@ -3542,63 +3538,6 @@ if (enable_java_templates) {
"version_name", "version_name",
"write_asset_list", "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 is_bundle_module = true
generate_buildconfig_java = _is_base_module generate_buildconfig_java = _is_base_module
no_build_hooks = !_is_base_module no_build_hooks = !_is_base_module
......
...@@ -19,7 +19,15 @@ import("//chrome/android/modules/chrome_feature_modules.gni") ...@@ -19,7 +19,15 @@ import("//chrome/android/modules/chrome_feature_modules.gni")
# include_32_bit_webview: (Optional) Whether to include 32 bit code for # include_32_bit_webview: (Optional) Whether to include 32 bit code for
# WebView. # WebView.
template("chrome_feature_module") { template("chrome_feature_module") {
assert(defined(invoker.module_desc))
assert(defined(invoker.module_name_suffix))
_module_desc = invoker.module_desc _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) { android_app_bundle_module(target_name) {
forward_variables_from(invoker, forward_variables_from(invoker,
...@@ -63,14 +71,11 @@ template("chrome_feature_module") { ...@@ -63,14 +71,11 @@ template("chrome_feature_module") {
} }
if (defined(_module_desc.native_deps) && _module_desc.native_deps != []) { 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 = "" _arch = ""
_toolchain = "" _toolchain = ""
_root_out_dir = root_out_dir _root_out_dir = root_out_dir
if (android_64bit_target_cpu && _is_monochrome_or_trichrome) { 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" _arch = "_64"
} else { } else {
_toolchain = "($android_secondary_abi_toolchain)" _toolchain = "($android_secondary_abi_toolchain)"
...@@ -92,8 +97,8 @@ template("chrome_feature_module") { ...@@ -92,8 +97,8 @@ template("chrome_feature_module") {
# for the other architecture if required. # for the other architecture if required.
_loadable_modules_32_bit += [ _native_library ] _loadable_modules_32_bit += [ _native_library ]
_loadable_modules_64_bit += [ _native_library ] _loadable_modules_64_bit += [ _native_library ]
} else if (defined(invoker.is_monochrome_or_trichrome)) { } else {
not_needed(invoker, [ "is_monochrome_or_trichrome" ]) not_needed([ "_is_monochrome_or_trichrome" ])
} }
if (defined(_module_desc.loadable_module_dep)) { if (defined(_module_desc.loadable_module_dep)) {
...@@ -115,21 +120,53 @@ template("chrome_feature_module") { ...@@ -115,21 +120,53 @@ template("chrome_feature_module") {
} }
} }
# Specify native libraries and placeholders.
if (_loadable_modules_32_bit != [] || _loadable_modules_64_bit != []) { if (_loadable_modules_32_bit != [] || _loadable_modules_64_bit != []) {
# TODO(tiborg): Move loadable module selection logic here. # Decision logic: Assign decision variables:
native_switches = { # _loadable_modules_to_use: Either |_loadable_modules_64_bit| or
is_64_bit_browser = invoker.is_64_bit_browser # |_loadable_modules_32_bit|.
include_32_bit_webview = invoker.include_32_bit_webview # _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
}
# 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" ]
} }
loadable_modules_if_32_bit = _loadable_modules_32_bit
loadable_modules_if_64_bit = _loadable_modules_64_bit
} else { } else {
if (defined(invoker.is_64_bit_browser)) { secondary_abi_loadable_modules = _loadable_modules_to_use
not_needed(invoker, [ "is_64_bit_browser" ]) if (_native_need_placeholder) {
native_lib_placeholders = [ "libdummy.so" ]
} }
if (defined(invoker.include_32_bit_webview)) {
not_needed(invoker, [ "include_32_bit_webview" ])
} }
} else {
not_needed([
"_is_64_bit_browser",
"_include_32_bit_webview",
])
} }
} }
} }
...@@ -41,9 +41,9 @@ resource_packages_id_mapping = [ ...@@ -41,9 +41,9 @@ resource_packages_id_mapping = [
# feature module library. # feature module library.
# proguard_async: (Optional) Whether to proguard the module asynchronously. # proguard_async: (Optional) Whether to proguard the module asynchronously.
# loadable_modules_32_bit: (Optional) List of additional 32-bit shared # 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 # 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. # Each new module needs to add a desc to one of the lists below.
# Modules shipped in Chrome Modern (Android L+). # 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