15f9996aaSopenharmony_ci#!/usr/bin/env python 25f9996aaSopenharmony_ci# -*- coding: utf-8 -*- 35f9996aaSopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd. 45f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 55f9996aaSopenharmony_ci# you may not use this file except in compliance with the License. 65f9996aaSopenharmony_ci# You may obtain a copy of the License at 75f9996aaSopenharmony_ci# 85f9996aaSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 95f9996aaSopenharmony_ci# 105f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 115f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 125f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135f9996aaSopenharmony_ci# See the License for the specific language governing permissions and 145f9996aaSopenharmony_ci# limitations under the License. 155f9996aaSopenharmony_ci 165f9996aaSopenharmony_ciimport sys 175f9996aaSopenharmony_ciimport argparse 185f9996aaSopenharmony_ciimport os 195f9996aaSopenharmony_ciimport shutil 205f9996aaSopenharmony_ci 215f9996aaSopenharmony_cisys.path.append( 225f9996aaSopenharmony_ci os.path.dirname(os.path.dirname(os.path.dirname( 235f9996aaSopenharmony_ci os.path.abspath(__file__))))) 245f9996aaSopenharmony_cifrom scripts.util.file_utils import read_json_file, write_json_file # noqa: E402 255f9996aaSopenharmony_ci 265f9996aaSopenharmony_ci 275f9996aaSopenharmony_cidef get_src_parts(system_install_info_file: str): 285f9996aaSopenharmony_ci parts_info_list = read_json_file(system_install_info_file) 295f9996aaSopenharmony_ci if parts_info_list is None: 305f9996aaSopenharmony_ci raise Exception( 315f9996aaSopenharmony_ci "read file '{}' failed.".format(system_install_info_file)) 325f9996aaSopenharmony_ci src_parts_info = {} 335f9996aaSopenharmony_ci for part_info in parts_info_list: 345f9996aaSopenharmony_ci if 'is_source' not in part_info: 355f9996aaSopenharmony_ci raise Exception("read part info error, missing key is_source.") 365f9996aaSopenharmony_ci if part_info.get('is_source') is True: 375f9996aaSopenharmony_ci part_name = part_info.get('part_name') 385f9996aaSopenharmony_ci src_parts_info[part_name] = part_info 395f9996aaSopenharmony_ci return src_parts_info 405f9996aaSopenharmony_ci 415f9996aaSopenharmony_ci 425f9996aaSopenharmony_cidef _collect_testcase(resources_dir: str, parts_info: dict, output_base_dir: str): 435f9996aaSopenharmony_ci for part_name, part_info in parts_info.items(): 445f9996aaSopenharmony_ci origin_part_name = part_info.get('origin_part_name') 455f9996aaSopenharmony_ci if part_info.get('variant_name') != 'phone': 465f9996aaSopenharmony_ci _toolchain = part_info.get('toolchain_label') 475f9996aaSopenharmony_ci _toolchain_name = _toolchain.split(':')[1] 485f9996aaSopenharmony_ci _variant_dir = os.path.join(_toolchain_name, resources_dir, 495f9996aaSopenharmony_ci origin_part_name) 505f9996aaSopenharmony_ci else: 515f9996aaSopenharmony_ci _variant_dir = os.path.join(resources_dir, part_name) 525f9996aaSopenharmony_ci if not os.path.exists(_variant_dir): 535f9996aaSopenharmony_ci continue 545f9996aaSopenharmony_ci 555f9996aaSopenharmony_ci _src_dir_name = os.path.basename(resources_dir) 565f9996aaSopenharmony_ci package_output_dir = os.path.join(output_base_dir, _src_dir_name) 575f9996aaSopenharmony_ci dest_dir = os.path.join(package_output_dir, origin_part_name) 585f9996aaSopenharmony_ci if os.path.exists(dest_dir): 595f9996aaSopenharmony_ci shutil.rmtree(dest_dir) 605f9996aaSopenharmony_ci shutil.copytree(_variant_dir, dest_dir) 615f9996aaSopenharmony_ci 625f9996aaSopenharmony_ci 635f9996aaSopenharmony_cidef collect_testcase(resources_dir_list: list, parts_info: dict, output_base_dir: str): 645f9996aaSopenharmony_ci for resources_dir in resources_dir_list: 655f9996aaSopenharmony_ci _collect_testcase(resources_dir, parts_info, output_base_dir) 665f9996aaSopenharmony_ci 675f9996aaSopenharmony_ci 685f9996aaSopenharmony_cidef _collect_test_mlf(resources_dir: str, parts_info: dict, output_base_dir: str): 695f9996aaSopenharmony_ci for part_name, part_info in parts_info.items(): 705f9996aaSopenharmony_ci origin_part_name = part_info.get('origin_part_name') 715f9996aaSopenharmony_ci if part_info.get('variant_name') != 'phone': 725f9996aaSopenharmony_ci _toolchain = part_info.get('toolchain_label') 735f9996aaSopenharmony_ci _toolchain_name = _toolchain.split(':')[1] 745f9996aaSopenharmony_ci _variant_dir = os.path.join(_toolchain_name, resources_dir, 755f9996aaSopenharmony_ci origin_part_name) 765f9996aaSopenharmony_ci else: 775f9996aaSopenharmony_ci _variant_dir = os.path.join(resources_dir, part_name) 785f9996aaSopenharmony_ci if not os.path.exists(_variant_dir): 795f9996aaSopenharmony_ci continue 805f9996aaSopenharmony_ci 815f9996aaSopenharmony_ci _src_dir_name = os.path.basename(resources_dir) 825f9996aaSopenharmony_ci package_output_dir = os.path.join(output_base_dir, _src_dir_name) 835f9996aaSopenharmony_ci dest_dir = os.path.join(package_output_dir, origin_part_name) 845f9996aaSopenharmony_ci if os.path.exists(dest_dir): 855f9996aaSopenharmony_ci shutil.rmtree(dest_dir) 865f9996aaSopenharmony_ci shutil.copytree(_variant_dir, dest_dir) 875f9996aaSopenharmony_ci 885f9996aaSopenharmony_ci 895f9996aaSopenharmony_cidef collect_test_mlf(resources_dir_list: list, parts_info: dict, output_base_dir: str): 905f9996aaSopenharmony_ci for resources_dir in resources_dir_list: 915f9996aaSopenharmony_ci _collect_test_mlf(resources_dir, parts_info, output_base_dir) 925f9996aaSopenharmony_ci 935f9996aaSopenharmony_ci 945f9996aaSopenharmony_cidef _collect_libs_symbols(resources_dir: str, parts_info: dict, package_output_base_dir: str): 955f9996aaSopenharmony_ci for part_name, part_info in parts_info.items(): 965f9996aaSopenharmony_ci origin_part_name = part_info.get('origin_part_name') 975f9996aaSopenharmony_ci if part_info.get('variant_name') != 'phone': 985f9996aaSopenharmony_ci _toolchain = part_info.get('toolchain_label') 995f9996aaSopenharmony_ci _toolchain_name = _toolchain.split(':')[1] 1005f9996aaSopenharmony_ci _variant_dir = os.path.join(_toolchain_name, resources_dir, 1015f9996aaSopenharmony_ci _toolchain_name, 1025f9996aaSopenharmony_ci part_info.get('subsystem_name'), 1035f9996aaSopenharmony_ci origin_part_name) 1045f9996aaSopenharmony_ci else: 1055f9996aaSopenharmony_ci _variant_dir = os.path.join(resources_dir, 1065f9996aaSopenharmony_ci part_info.get('subsystem_name'), 1075f9996aaSopenharmony_ci part_name) 1085f9996aaSopenharmony_ci if not os.path.exists(_variant_dir): 1095f9996aaSopenharmony_ci continue 1105f9996aaSopenharmony_ci 1115f9996aaSopenharmony_ci _src_dir_name = os.path.basename(resources_dir) 1125f9996aaSopenharmony_ci package_output_dir = os.path.join(package_output_base_dir, 1135f9996aaSopenharmony_ci _src_dir_name) 1145f9996aaSopenharmony_ci dest_dir = os.path.join(package_output_dir, origin_part_name) 1155f9996aaSopenharmony_ci if os.path.exists(dest_dir): 1165f9996aaSopenharmony_ci shutil.rmtree(dest_dir) 1175f9996aaSopenharmony_ci shutil.copytree(_variant_dir, dest_dir) 1185f9996aaSopenharmony_ci 1195f9996aaSopenharmony_ci 1205f9996aaSopenharmony_cidef collect_libs_symbols(resources_dir_list: list, parts_info: dict, output_base_dir: str): 1215f9996aaSopenharmony_ci for resources_dir in resources_dir_list: 1225f9996aaSopenharmony_ci _collect_libs_symbols(resources_dir, parts_info, output_base_dir) 1235f9996aaSopenharmony_ci 1245f9996aaSopenharmony_ci 1255f9996aaSopenharmony_cidef _collect_libs_java(resources_dir: str, parts_info: dict, output_base_dir: str): 1265f9996aaSopenharmony_ci parts_libs_java_path = {} 1275f9996aaSopenharmony_ci for part_name, part_info in parts_info.items(): 1285f9996aaSopenharmony_ci origin_part_name = part_info.get('origin_part_name') 1295f9996aaSopenharmony_ci if part_info.get('variant_name') != 'phone': 1305f9996aaSopenharmony_ci _toolchain = part_info.get('toolchain_label') 1315f9996aaSopenharmony_ci _toolchain_name = _toolchain.split(':')[1] 1325f9996aaSopenharmony_ci _variant_dir = os.path.join(_toolchain_name, resources_dir, 1335f9996aaSopenharmony_ci part_info.get('subsystem_name'), 1345f9996aaSopenharmony_ci origin_part_name) 1355f9996aaSopenharmony_ci else: 1365f9996aaSopenharmony_ci _variant_dir = os.path.join(resources_dir, 1375f9996aaSopenharmony_ci part_info.get('subsystem_name'), 1385f9996aaSopenharmony_ci part_name) 1395f9996aaSopenharmony_ci if not os.path.exists(_variant_dir): 1405f9996aaSopenharmony_ci continue 1415f9996aaSopenharmony_ci 1425f9996aaSopenharmony_ci parts_libs_java_path[origin_part_name] = _variant_dir 1435f9996aaSopenharmony_ci _libs_java_path_info_file = os.path.join(output_base_dir, 1445f9996aaSopenharmony_ci 'libs_java_info.json') 1455f9996aaSopenharmony_ci write_json_file(_libs_java_path_info_file, parts_libs_java_path) 1465f9996aaSopenharmony_ci 1475f9996aaSopenharmony_ci 1485f9996aaSopenharmony_cidef collect_libs_java(resources_dir_list: str, parts_info: dict, output_base_dir: str): 1495f9996aaSopenharmony_ci for resources_dir in resources_dir_list: 1505f9996aaSopenharmony_ci _collect_libs_java(resources_dir, parts_info, output_base_dir) 1515f9996aaSopenharmony_ci 1525f9996aaSopenharmony_ci 1535f9996aaSopenharmony_cidef _collect_kits_modules(resources_dir: str, parts_info: dict, output_base_dir: str): 1545f9996aaSopenharmony_ci parts_modules_path = {} 1555f9996aaSopenharmony_ci for part_name, part_info in parts_info.items(): 1565f9996aaSopenharmony_ci part_modules_dir = os.path.join(resources_dir, part_name) 1575f9996aaSopenharmony_ci if not os.path.exists(part_modules_dir): 1585f9996aaSopenharmony_ci continue 1595f9996aaSopenharmony_ci origin_part_name = part_info.get('origin_part_name') 1605f9996aaSopenharmony_ci parts_modules_path[origin_part_name] = part_modules_dir 1615f9996aaSopenharmony_ci _modules_path_info_file = os.path.join(output_base_dir, 1625f9996aaSopenharmony_ci 'kits_modules_info.json') 1635f9996aaSopenharmony_ci write_json_file(_modules_path_info_file, parts_modules_path) 1645f9996aaSopenharmony_ci 1655f9996aaSopenharmony_ci 1665f9996aaSopenharmony_cidef collect_kits_modules(resources_dir_list: list, parts_info: dict, output_base_dir: str): 1675f9996aaSopenharmony_ci for resources_dir in resources_dir_list: 1685f9996aaSopenharmony_ci _collect_kits_modules(resources_dir, parts_info, output_base_dir) 1695f9996aaSopenharmony_ci 1705f9996aaSopenharmony_ci 1715f9996aaSopenharmony_cidef collect_innerkits_modules(resources_dir_list: list, parts_info: dict, output_base_dir: str): 1725f9996aaSopenharmony_ci for resources_dir in resources_dir_list: 1735f9996aaSopenharmony_ci _collect_kits_modules(resources_dir, parts_info, output_base_dir) 1745f9996aaSopenharmony_ci 1755f9996aaSopenharmony_ci 1765f9996aaSopenharmony_cidef collect_resources(collect_type: str, resources_dir_list: list, parts_info: dict, 1775f9996aaSopenharmony_ci output_base_dir: str): 1785f9996aaSopenharmony_ci if collect_type == 'libs_symbols': 1795f9996aaSopenharmony_ci collect_libs_symbols(resources_dir_list, parts_info, output_base_dir) 1805f9996aaSopenharmony_ci elif collect_type == 'module_list_files': 1815f9996aaSopenharmony_ci collect_test_mlf(resources_dir_list, parts_info, output_base_dir) 1825f9996aaSopenharmony_ci elif collect_type == 'testcase': 1835f9996aaSopenharmony_ci collect_testcase(resources_dir_list, parts_info, output_base_dir) 1845f9996aaSopenharmony_ci elif collect_type == 'kits_modules': 1855f9996aaSopenharmony_ci collect_kits_modules(resources_dir_list, parts_info, output_base_dir) 1865f9996aaSopenharmony_ci elif collect_type == 'innerkits_modules': 1875f9996aaSopenharmony_ci collect_innerkits_modules(resources_dir_list, parts_info, 1885f9996aaSopenharmony_ci output_base_dir) 1895f9996aaSopenharmony_ci elif collect_type == 'libs_java': 1905f9996aaSopenharmony_ci collect_libs_java(resources_dir_list, parts_info, output_base_dir) 1915f9996aaSopenharmony_ci else: 1925f9996aaSopenharmony_ci raise Exception("Unsupported resource type.") 1935f9996aaSopenharmony_ci 1945f9996aaSopenharmony_ci 1955f9996aaSopenharmony_cidef main(): 1965f9996aaSopenharmony_ci parser = argparse.ArgumentParser() 1975f9996aaSopenharmony_ci parser.add_argument('--collect-type', required=True) 1985f9996aaSopenharmony_ci parser.add_argument('--system-install-info-file', required=True) 1995f9996aaSopenharmony_ci parser.add_argument('--resources-dir-list', nargs='+', default=[]) 2005f9996aaSopenharmony_ci parser.add_argument('--package-output-base-dir', required=True) 2015f9996aaSopenharmony_ci parser.add_argument('--output-file', required=True) 2025f9996aaSopenharmony_ci args = parser.parse_args() 2035f9996aaSopenharmony_ci 2045f9996aaSopenharmony_ci parts_info = get_src_parts(args.system_install_info_file) 2055f9996aaSopenharmony_ci 2065f9996aaSopenharmony_ci collect_resources(args.collect_type, args.resources_dir_list, parts_info, 2075f9996aaSopenharmony_ci args.package_output_base_dir) 2085f9996aaSopenharmony_ci write_json_file(args.output_file, '{}') 2095f9996aaSopenharmony_ci return 0 2105f9996aaSopenharmony_ci 2115f9996aaSopenharmony_ci 2125f9996aaSopenharmony_ciif __name__ == '__main__': 2135f9996aaSopenharmony_ci sys.exit(main()) 214