From 6f59224b169609bdf37ff3a6d247a457cf0b7032 Mon Sep 17 00:00:00 2001 From: Mohannad Farrag Date: Mon, 16 Jan 2023 15:45:24 +0000 Subject: [PATCH 1/3] gn2bp: Fix C++ warning showing up as errors when compiling cronet tests Test: m Change-Id: Id48dabf893fb7dc7698973f8d52a802134d77e82 --- tools/gn2bp/Android.bp.swp | 1 + tools/gn2bp/gen_android_bp | 1 + 2 files changed, 2 insertions(+) diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp index eb0f9dc166..7dbeda18ae 100644 --- a/tools/gn2bp/Android.bp.swp +++ b/tools/gn2bp/Android.bp.swp @@ -4341,6 +4341,7 @@ cc_defaults { cflags: [ "-DGOOGLE_PROTOBUF_NO_RTTI", "-Wno-ambiguous-reversed-operator", + "-Wno-c++11-narrowing", "-Wno-error=return-type", "-Wno-macro-redefined", "-Wno-missing-field-initializers", diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp index d33dc325a2..5cbd6e2310 100755 --- a/tools/gn2bp/gen_android_bp +++ b/tools/gn2bp/gen_android_bp @@ -1673,6 +1673,7 @@ def create_blueprint_for_targets(gn, targets): '-Wno-ambiguous-reversed-operator', # needed for icui18n '-Wno-unreachable-code-loop-increment', # needed for icui18n '-fPIC', + '-Wno-c++11-narrowing', ] # Chromium builds do not add a dependency for headers found inside the # sysroot, so they are added globally via defaults. From 875d83b140c983c73cb05bfe7ea02cf0cda5c751 Mon Sep 17 00:00:00 2001 From: Mohannad Farrag Date: Mon, 16 Jan 2023 16:02:32 +0000 Subject: [PATCH 2/3] gn2bp: Add missing linker flags * Tests usually shim memory allocations for metrics purposes through linker flags. Test: m Change-Id: I2a3bbe648f155469721cf1df25439ca60afee6b5 --- tools/gn2bp/Android.bp.swp | 135 +++++++++++++++++++++++++++++++++++++ tools/gn2bp/gen_android_bp | 3 +- 2 files changed, 137 insertions(+), 1 deletion(-) diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp index 7dbeda18ae..88fe070d81 100644 --- a/tools/gn2bp/Android.bp.swp +++ b/tools/gn2bp/Android.bp.swp @@ -1036,6 +1036,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { @@ -2723,6 +2738,21 @@ cc_library_shared { "-Wl,--gc-sections", "-Wl,--icf=all", "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], stem: "libcronet.108.0.5359.128", target: { @@ -4167,6 +4197,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { @@ -4307,6 +4352,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { @@ -5941,6 +6001,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { @@ -6411,6 +6486,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { @@ -6942,6 +7032,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { @@ -7125,6 +7230,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { @@ -12708,6 +12828,21 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,-wrap,asprintf", + "-Wl,-wrap,calloc", + "-Wl,-wrap,free", + "-Wl,-wrap,getcwd", + "-Wl,-wrap,malloc", + "-Wl,-wrap,malloc_usable_size", + "-Wl,-wrap,memalign", + "-Wl,-wrap,posix_memalign", + "-Wl,-wrap,pvalloc", + "-Wl,-wrap,realloc", + "-Wl,-wrap,realpath", + "-Wl,-wrap,strdup", + "-Wl,-wrap,strndup", + "-Wl,-wrap,valloc", + "-Wl,-wrap,vasprintf", ], target: { android_arm: { diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp index 5cbd6e2310..c8d945deba 100755 --- a/tools/gn2bp/gen_android_bp +++ b/tools/gn2bp/gen_android_bp @@ -1306,7 +1306,8 @@ def _get_cflags(cflags, defines): def set_module_flags(module, module_type, cflags, defines, ldflags): module.cflags.update(_get_cflags(cflags, defines)) if module_type != 'cc_object': - module.ldflags.update({flag for flag in ldflags if flag in ldflag_allowlist}) + module.ldflags.update({flag for flag in ldflags + if flag in ldflag_allowlist or flag.startswith("-Wl,-wrap,")}) # TODO: implement proper cflag parsing. for flag in cflags: if '-std=' in flag: From 0bf6a696a6e98187e3a9e3efebc33bff8f466e6d Mon Sep 17 00:00:00 2001 From: Mohannad Farrag Date: Mon, 16 Jan 2023 16:08:40 +0000 Subject: [PATCH 3/3] gn2bp: Add linker script to modules Test: m Change-Id: I549d78baf94b1abec07782df006269ba00e2776c --- tools/gn2bp/Android.bp.swp | 8 ++++++++ tools/gn2bp/gen_android_bp | 21 ++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp index 88fe070d81..d7e751de53 100644 --- a/tools/gn2bp/Android.bp.swp +++ b/tools/gn2bp/Android.bp.swp @@ -1036,6 +1036,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", @@ -4197,6 +4198,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", @@ -4352,6 +4354,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", @@ -6001,6 +6004,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", @@ -6486,6 +6490,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", @@ -7032,6 +7037,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", @@ -7230,6 +7236,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", @@ -12828,6 +12835,7 @@ cc_library_static { "-Wl,--as-needed", "-Wl,--gc-sections", "-Wl,--icf=all", + "-Wl,--script,external/cronet/base/android/library_loader/anchor_functions.lds", "-Wl,-wrap,asprintf", "-Wl,-wrap,calloc", "-Wl,-wrap,free", diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp index c8d945deba..8e3888ccd9 100755 --- a/tools/gn2bp/gen_android_bp +++ b/tools/gn2bp/gen_android_bp @@ -157,14 +157,6 @@ def get_linker_script_ldflag(script_path): # Additional arguments to apply to Android.bp rules. additional_args = { - # TODO: remove if not needed. - 'cronet_aml_components_cronet_android_cronet': [ - # linker_scripts property is not available in tm-mainline-prod. - # So use ldflags to specify linker script. - ('ldflags',{ - get_linker_script_ldflag('base/android/library_loader/anchor_functions.lds'), - }), - ], 'cronet_aml_net_net': [ ('export_static_lib_headers', { 'cronet_aml_net_third_party_quiche_quiche', @@ -1303,11 +1295,17 @@ def _get_cflags(cflags, defines): cflags |= set("-D%s" % define.replace("\"", "\\\"") for define in defines) return cflags -def set_module_flags(module, module_type, cflags, defines, ldflags): +def _set_linker_script(module, libs): + for lib in libs: + if lib.endswith(".lds"): + module.ldflags.add(get_linker_script_ldflag(gn_utils.label_to_path(lib))) + +def set_module_flags(module, module_type, cflags, defines, ldflags, libs): module.cflags.update(_get_cflags(cflags, defines)) if module_type != 'cc_object': module.ldflags.update({flag for flag in ldflags if flag in ldflag_allowlist or flag.startswith("-Wl,-wrap,")}) + _set_linker_script(module, libs) # TODO: implement proper cflag parsing. for flag in cflags: if '-std=' in flag: @@ -1399,12 +1397,13 @@ def create_modules_from_target(blueprint, gn, gn_target_name): module.rtti = target.rtti if target.type in gn_utils.LINKER_UNIT_TYPES: - set_module_flags(module, module.type, target.cflags, target.defines, target.ldflags) + set_module_flags(module, module.type, target.cflags, target.defines, target.ldflags, target.libs) set_module_include_dirs(module, target.cflags, target.include_dirs) # TODO: set_module_xxx is confusing, apply similar function to module and target in better way. for arch_name, arch in target.arch.items(): + # TODO(aymanm): Make libs arch-specific. set_module_flags(module.target[arch_name], module.type, - arch.cflags, arch.defines, arch.ldflags) + arch.cflags, arch.defines, arch.ldflags, []) # -Xclang -target-feature -Xclang +mte are used to enable MTE (Memory Tagging Extensions). # Flags which does not start with '-' could not be in the cflags so enabling MTE by # -march and -mcpu Feature Modifiers. MTE is only available on arm64. This is needed for