Merge changes I6025abba,I7788a6bb,I4fe381a2,Ib1ee183e,Ifb8843aa, ...

* changes:
  gn2bp: create one action per arch
  gn2bp: support multiple jni registration modules
  gn2bp: get rid of local_include_dir hacks
  gn2bp: remove jni_headers from jni_generator genrule
  gn2bp: add common header dependencies to defaults
  gn2bp: unconditionally remove -DANDROID for all host targets
This commit is contained in:
Mohannad Farrag
2022-11-21 14:08:15 +00:00
committed by Gerrit Code Review
3 changed files with 2213 additions and 478 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -131,9 +131,6 @@ additional_args = {
# that doesn't depend on rtti. undefined symbol: typeinfo 'class' errors appears.
('rtti', True), # go/undefined-symbol-typeinfo
],
'cronet_aml_base_base': [
('header_libs', {"media_ndk_headers"}),
],
}
# Android equivalents for third-party libraries that the upstream project
@@ -206,12 +203,13 @@ class Target(object):
self.shared_libs = set()
self.static_libs = set()
self.whole_static_libs = set()
self.header_libs = set()
self.cflags = set()
self.dist = dict()
self.strip = dict()
self.stl = None
self.cppflags = set()
self.local_include_dirs = []
self.local_include_dirs = set()
self.export_system_include_dirs = set()
def to_string(self, output):
@@ -220,6 +218,7 @@ class Target(object):
self._output_field(nested_out, 'shared_libs')
self._output_field(nested_out, 'static_libs')
self._output_field(nested_out, 'whole_static_libs')
self._output_field(nested_out, 'header_libs')
self._output_field(nested_out, 'cflags')
self._output_field(nested_out, 'stl')
self._output_field(nested_out, 'dist')
@@ -266,7 +265,7 @@ class Module(object):
self.defaults = set()
self.cflags = set()
self.include_dirs = set()
self.local_include_dirs = []
self.local_include_dirs = set()
self.header_libs = set()
self.required = set()
self.tool_files = set()
@@ -328,7 +327,7 @@ class Module(object):
self._output_field(output, 'defaults')
self._output_field(output, 'cflags')
self._output_field(output, 'include_dirs')
self._output_field(output, 'local_include_dirs', sort=False)
self._output_field(output, 'local_include_dirs')
self._output_field(output, 'header_libs')
self._output_field(output, 'required')
self._output_field(output, 'dist')
@@ -708,9 +707,6 @@ def create_action_module(blueprint, target):
target.args[0] = '$(out)'
elif target.script == '//base/android/jni_generator/jni_generator.py':
# chromium builds against a prebuilt ndk that contains the jni_headers, so
# a dependency is never explicitly created.
module.genrule_header_libs.add('jni_headers')
needs_javap = False
for i, val in enumerate(target.args):
if val == '--output_dir':
@@ -959,12 +955,6 @@ def _get_cflags(cflags, defines):
cflags = {flag for flag in cflags if flag in cflag_allowlist}
# Consider proper allowlist or denylist if needed
cflags |= set("-D%s" % define.replace("\"", "\\\"") for define in defines)
# -DANDROID is added by default but target.defines contain -DANDROID if it's required.
# So adding -UANDROID to cancel default -DANDROID if it's not specified.
# This is needed for some targets(e.g. symbolize)
# TODO: Set -UANDROID considering common define
if "ANDROID" not in defines:
cflags.add("-UANDROID")
return cflags
def set_module_flags(module, cflags, defines):
@@ -979,20 +969,18 @@ def set_module_flags(module, cflags, defines):
module.cppflags.add('-fexceptions')
def set_module_include_dirs(module, cflags, include_dirs):
local_include_dirs_set = set()
for flag in cflags:
if '-isystem' in flag:
local_include_dirs_set.add(flag[len('-isystem../../'):])
module.local_include_dirs.add(flag[len('-isystem../../'):])
# Adding local_include_dirs is necessary due to source_sets / filegroups
# which do not properly propagate include directories.
# Filter any directory inside //out as a) this directory does not exist for
# aosp / soong builds and b) the include directory should already be
# configured via library dependency.
local_include_dirs_set.update([gn_utils.label_to_path(d)
module.local_include_dirs.update([gn_utils.label_to_path(d)
for d in include_dirs
if not re.match('^//out/.*', d)])
module.local_include_dirs = sorted(list(local_include_dirs_set))
def create_modules_from_target(blueprint, gn, gn_target_name):
@@ -1175,13 +1163,7 @@ def create_java_module(blueprint, gn):
module.srcs.update([gn_utils.label_to_path(source) for source in gn.java_sources])
blueprint.add_module(module)
def update_jni_registration_module(blueprint, gn):
bp_module_name = label_to_module_name('//components/cronet/android:cronet_jni_registration')
if bp_module_name not in blueprint.modules:
# To support building targets that might not create the cronet_jni_registration.
return
module = blueprint.modules[bp_module_name]
def update_jni_registration_module(module, gn):
# TODO: deny list is in the arg of jni_registration_generator.py. Should not be hardcoded
deny_list = [
'//base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java',
@@ -1222,6 +1204,20 @@ def create_blueprint_for_targets(gn, targets):
'-Wno-unreachable-code-loop-increment', # needed for icui18n
'-O2',
]
# Chromium builds do not add a dependency for headers found inside the
# sysroot, so they are added globally via defaults.
defaults.target['android'].header_libs = [
'media_ndk_headers',
'jni_headers',
]
defaults.target['host'].cflags = [
# -DANDROID is added by default but target.defines contain -DANDROID if
# it's required. So adding -UANDROID to cancel default -DANDROID if it's
# not specified.
# Note: -DANDROID is not consistently applied across the chromium code
# base, so it is removed unconditionally for host targets.
'-UANDROID',
]
defaults.stl = 'none'
blueprint.add_module(defaults)
@@ -1229,7 +1225,9 @@ def create_blueprint_for_targets(gn, targets):
create_modules_from_target(blueprint, gn, target)
create_java_module(blueprint, gn)
update_jni_registration_module(blueprint, gn)
for module in blueprint.modules.values():
if 'cronet_jni_registration' in module.name:
update_jni_registration_module(module, gn)
# Merge in additional hardcoded arguments.
for module in blueprint.modules.values():

View File

@@ -273,11 +273,19 @@ class GnParser(object):
# Use name without toolchain for targets to support targets built for
# multiple archs.
target_name = label_without_toolchain(gn_target_name)
target = self.all_targets.get(target_name)
desc = gn_desc[gn_target_name]
type_ = desc['type']
arch = self._get_arch(desc['toolchain'])
# Action modules can differ depending on the target architecture, yet
# genrule's do not allow to overload cmd per target OS / arch. Create a
# separate action for every architecture.
if type_ == 'action':
target_name += '__' + arch
target = self.all_targets.get(target_name)
if target is None:
target = GnParser.Target(target_name, desc['type'])
target = GnParser.Target(target_name, type_)
self.all_targets[target_name] = target
if arch not in target.arch: