From 0433a86ffd1ae3f9025c763520786a0b6e04e0e2 Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Mon, 28 Aug 2023 15:27:33 +0800 Subject: [PATCH] Pass release configuration to create_reference_dumps.py This commit adds -release as a parameter to create_reference_dumps.py. It is currently optional. Developers can use it to try different release configurations. Test: development/vndk/tools/header-checker/utils/create_reference_dumps.py \ -products aosp_x86_64 -release trunk_staging Bug: 297542516 Change-Id: Ifb7001ed42dbb9f8d0dd8e6c9738be6d5ea2feca --- .../utils/create_reference_dumps.py | 29 ++++++----- vndk/tools/header-checker/utils/utils.py | 51 ++++++++++--------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/vndk/tools/header-checker/utils/create_reference_dumps.py b/vndk/tools/header-checker/utils/create_reference_dumps.py index ec7dc7e01..aa4c9b22b 100755 --- a/vndk/tools/header-checker/utils/create_reference_dumps.py +++ b/vndk/tools/header-checker/utils/create_reference_dumps.py @@ -5,8 +5,8 @@ import os import time from utils import ( - AOSP_DIR, SOURCE_ABI_DUMP_EXT_END, SO_EXT, Target, - copy_reference_dump, find_lib_lsdumps, get_build_vars_for_product, + AOSP_DIR, SOURCE_ABI_DUMP_EXT_END, SO_EXT, BuildTarget, Target, + copy_reference_dump, find_lib_lsdumps, get_build_vars, make_libraries, make_tree, read_lsdump_paths) @@ -45,14 +45,13 @@ class GetVersionedRefDumpDirStem: self.binder_bitness, arch) -def make_libs_for_product(libs, product, variant, vndk_version, targets, +def make_libs_for_product(libs, build_target, vndk_version, targets, exclude_tags): - print('making libs for', product + '-' + variant) + print('making libs for', '-'.join(filter(None, build_target))) if libs: - make_libraries(product, variant, vndk_version, targets, libs, - exclude_tags) + make_libraries(build_target, vndk_version, targets, libs, exclude_tags) else: - make_tree(product, variant) + make_tree(build_target) def tag_to_dir_name(tag): @@ -95,14 +94,14 @@ def create_source_abi_reference_dumps(args, get_ref_dump_dir_stem, def create_source_abi_reference_dumps_for_all_products(args): """Create reference ABI dumps for all specified products.""" - num_processed = 0 for product in args.products: - build_vars = get_build_vars_for_product( + build_target = BuildTarget(product, args.release, args.build_variant) + build_vars = get_build_vars( ['PLATFORM_VNDK_VERSION', 'BOARD_VNDK_VERSION', 'BINDER32BIT', 'PLATFORM_VERSION_CODENAME', 'PLATFORM_SDK_VERSION'], - product, args.build_variant) + build_target) platform_vndk_version = build_vars[0] board_vndk_version = build_vars[1] @@ -126,7 +125,8 @@ def create_source_abi_reference_dumps_for_all_products(args): if platform_version_codename == 'REL' else 'current') - targets = [t for t in (Target(True, product), Target(False, product)) + targets = [t for t in + (Target(True, build_target), Target(False, build_target)) if t.arch] if args.ref_dump_dir: @@ -143,11 +143,11 @@ def create_source_abi_reference_dumps_for_all_products(args): if not args.no_make_lib: # Build .lsdump for all the specified libs, or build # `findlsdumps` if no libs are specified. - make_libs_for_product(args.libs, product, args.build_variant, + make_libs_for_product(args.libs, build_target, platform_vndk_version, targets, exclude_tags) - lsdump_paths = read_lsdump_paths(product, args.build_variant, + lsdump_paths = read_lsdump_paths(build_target, platform_vndk_version, targets, exclude_tags, build=False) @@ -175,6 +175,9 @@ def _parse_args(): help='libs to create references for') parser.add_argument('-products', action='append', help='products to create references for') + parser.add_argument('-release', + help='release configuration to create references for. ' + 'e.g., trunk_staging, next.') parser.add_argument('--build-variant', default='userdebug', help='build variant to create references for') parser.add_argument('--compress', action='store_true', diff --git a/vndk/tools/header-checker/utils/utils.py b/vndk/tools/header-checker/utils/utils.py index f3e61a4ac..adf5891f7 100644 --- a/vndk/tools/header-checker/utils/utils.py +++ b/vndk/tools/header-checker/utils/utils.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import collections import os import re import shutil @@ -35,15 +36,18 @@ DEFAULT_CFLAGS = ['-std=gnu99'] DEFAULT_HEADER_FLAGS = ["-dump-function-declarations"] DEFAULT_FORMAT = 'ProtobufTextFormat' +BuildTarget = collections.namedtuple( + 'BuildTarget', ['product', 'release', 'variant']) + class Target(object): - def __init__(self, is_2nd, product): + def __init__(self, is_2nd, build_target): extra = '_2ND' if is_2nd else '' build_vars_to_fetch = ['TARGET_ARCH', 'TARGET{}_ARCH'.format(extra), 'TARGET{}_ARCH_VARIANT'.format(extra), 'TARGET{}_CPU_VARIANT'.format(extra)] - build_vars = get_build_vars_for_product(build_vars_to_fetch, product) + build_vars = get_build_vars(build_vars_to_fetch, build_target) self.primary_arch = build_vars[0] assert self.primary_arch != '' self.arch = build_vars[1] @@ -150,22 +154,24 @@ def run_header_abi_linker(inputs, output_path, version_script, api, arch, _validate_dump_content(output_path) -def make_targets(product, variant, targets): +def make_targets(build_target, targets): make_cmd = ['build/soong/soong_ui.bash', '--make-mode', '-j', - 'TARGET_PRODUCT=' + product, 'TARGET_BUILD_VARIANT=' + variant] + 'TARGET_PRODUCT=' + build_target.product, + 'TARGET_BUILD_VARIANT=' + build_target.variant] + if build_target.release: + make_cmd.append('TARGET_RELEASE=' + build_target.release) make_cmd += targets subprocess.check_call(make_cmd, cwd=AOSP_DIR) -def make_tree(product, variant): +def make_tree(build_target): """Build all lsdump files.""" - return make_targets(product, variant, ['findlsdumps']) + return make_targets(build_target, ['findlsdumps']) -def make_libraries(product, variant, vndk_version, targets, libs, - exclude_tags): +def make_libraries(build_target, vndk_version, targets, libs, exclude_tags): """Build lsdump files for specific libs.""" - lsdump_paths = read_lsdump_paths(product, variant, vndk_version, targets, + lsdump_paths = read_lsdump_paths(build_target, vndk_version, targets, exclude_tags, build=True) make_target_paths = [] for name in libs: @@ -173,13 +179,12 @@ def make_libraries(product, variant, vndk_version, targets, libs, raise KeyError('Cannot find lsdump for %s.' % name) for tag_path_dict in lsdump_paths[name].values(): make_target_paths.extend(tag_path_dict.values()) - make_targets(product, variant, make_target_paths) + make_targets(build_target, make_target_paths) -def get_lsdump_paths_file_path(product, variant): +def get_lsdump_paths_file_path(build_target): """Get the path to lsdump_paths.txt.""" - product_out = get_build_vars_for_product( - ['PRODUCT_OUT'], product, variant)[0] + product_out = get_build_vars(['PRODUCT_OUT'], build_target)[0] return os.path.join(product_out, 'lsdump_paths.txt') @@ -261,15 +266,15 @@ def _read_lsdump_paths(lsdump_paths_file_path, vndk_version, targets, return lsdump_paths -def read_lsdump_paths(product, variant, vndk_version, targets, exclude_tags, +def read_lsdump_paths(build_target, vndk_version, targets, exclude_tags, build): """Build lsdump_paths.txt and read the paths.""" - lsdump_paths_file_path = get_lsdump_paths_file_path(product, variant) + lsdump_paths_file_path = get_lsdump_paths_file_path(build_target) lsdump_paths_file_abspath = os.path.join(AOSP_DIR, lsdump_paths_file_path) if build: if os.path.lexists(lsdump_paths_file_abspath): os.unlink(lsdump_paths_file_abspath) - make_targets(product, variant, [lsdump_paths_file_path]) + make_targets(build_target, [lsdump_paths_file_path]) return _read_lsdump_paths(lsdump_paths_file_abspath, vndk_version, targets, exclude_tags) @@ -324,17 +329,13 @@ def run_and_read_abi_diff(old_dump_path, new_dump_path, arch, lib_name, return result, output_file.read() -def get_build_vars_for_product(names, product=None, variant=None): +def get_build_vars(names, build_target): """ Get build system variable for the launched target.""" - - if product is None and 'ANDROID_PRODUCT_OUT' not in os.environ: - return None - env = os.environ.copy() - if product: - env['TARGET_PRODUCT'] = product - if variant: - env['TARGET_BUILD_VARIANT'] = variant + env['TARGET_PRODUCT'] = build_target.product + env['TARGET_BUILD_VARIANT'] = build_target.variant + if build_target.release: + env['TARGET_RELEASE'] = build_target.release cmd = [ os.path.join('build', 'soong', 'soong_ui.bash'), '--dumpvars-mode', '-vars', ' '.join(names),