15f9996aaSopenharmony_ci#!/usr/bin/env python3 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 os 185f9996aaSopenharmony_ciimport argparse 195f9996aaSopenharmony_ci 205f9996aaSopenharmony_ciimport file_utils 215f9996aaSopenharmony_ciimport dependence_analysis 225f9996aaSopenharmony_ci 235f9996aaSopenharmony_ci 245f9996aaSopenharmony_cidef gen_module_deps(deps_data: dict): 255f9996aaSopenharmony_ci part_allowlist = ['unittest', 'moduletest', 'systemtest'] 265f9996aaSopenharmony_ci label_to_alias = {} 275f9996aaSopenharmony_ci for _module_alias, _info in deps_data.items(): 285f9996aaSopenharmony_ci _module_label = _info.get('module_label').split('(')[0] 295f9996aaSopenharmony_ci label_to_alias[_module_label] = _module_alias 305f9996aaSopenharmony_ci 315f9996aaSopenharmony_ci modeule_deps_data = {} 325f9996aaSopenharmony_ci for _module_alias, _info in deps_data.items(): 335f9996aaSopenharmony_ci deps_module_list = [] 345f9996aaSopenharmony_ci _part_name = _info.get('part_name') 355f9996aaSopenharmony_ci if _part_name in part_allowlist: 365f9996aaSopenharmony_ci continue 375f9996aaSopenharmony_ci _deps_label_list = _info.get('deps') 385f9996aaSopenharmony_ci for _deps_label in _deps_label_list: 395f9996aaSopenharmony_ci _alias = label_to_alias.get(_deps_label) 405f9996aaSopenharmony_ci if _alias is None: 415f9996aaSopenharmony_ci continue 425f9996aaSopenharmony_ci deps_module_list.append(_alias) 435f9996aaSopenharmony_ci _external_deps_list = _info.get('external_deps') 445f9996aaSopenharmony_ci for _ext_deps in _external_deps_list: 455f9996aaSopenharmony_ci deps_module_list.append(_ext_deps) 465f9996aaSopenharmony_ci 475f9996aaSopenharmony_ci deps_value = modeule_deps_data.get(_module_alias, []) 485f9996aaSopenharmony_ci deps_value.extend(deps_module_list) 495f9996aaSopenharmony_ci modeule_deps_data[_module_alias] = list(set(deps_value)) 505f9996aaSopenharmony_ci return modeule_deps_data 515f9996aaSopenharmony_ci 525f9996aaSopenharmony_ci 535f9996aaSopenharmony_cidef run(deps_files_path: str, output_path: str): 545f9996aaSopenharmony_ci all_deps_data = dependence_analysis.get_all_deps_data(deps_files_path) 555f9996aaSopenharmony_ci all_deps_data_file = os.path.join(output_path, 'all_deps_data.json') 565f9996aaSopenharmony_ci file_utils.write_json_file(all_deps_data_file, all_deps_data) 575f9996aaSopenharmony_ci 585f9996aaSopenharmony_ci module_deps_data = gen_module_deps(all_deps_data) 595f9996aaSopenharmony_ci module_deps_data_file = os.path.join(output_path, 'module_deps_info.json') 605f9996aaSopenharmony_ci file_utils.write_json_file(module_deps_data_file, module_deps_data) 615f9996aaSopenharmony_ci 625f9996aaSopenharmony_ci 635f9996aaSopenharmony_cidef main(argv): 645f9996aaSopenharmony_ci parser = argparse.ArgumentParser() 655f9996aaSopenharmony_ci parser.add_argument('--deps-files-path', required=True) 665f9996aaSopenharmony_ci args = parser.parse_args(argv) 675f9996aaSopenharmony_ci 685f9996aaSopenharmony_ci if not os.path.exists(args.deps_files_path): 695f9996aaSopenharmony_ci raise Exception("'{}' doesn't exist.".format(args.deps_files_path)) 705f9996aaSopenharmony_ci output_path = os.path.join(os.path.dirname(args.deps_files_path), 715f9996aaSopenharmony_ci 'module_deps_info') 725f9996aaSopenharmony_ci print("------Generate module dependency info------") 735f9996aaSopenharmony_ci run(args.deps_files_path, output_path) 745f9996aaSopenharmony_ci print('module deps data output to {}'.format(output_path)) 755f9996aaSopenharmony_ci 765f9996aaSopenharmony_ci 775f9996aaSopenharmony_ciif __name__ == '__main__': 785f9996aaSopenharmony_ci sys.exit(main(sys.argv[1:])) 79