15f9996aaSopenharmony_ci#!/usr/bin/env python3 25f9996aaSopenharmony_ci# -*- coding: utf-8 -*- 35f9996aaSopenharmony_ci# Copyright (c) 2023 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 argparse 175f9996aaSopenharmony_ciimport os 185f9996aaSopenharmony_ciimport sys 195f9996aaSopenharmony_ci 205f9996aaSopenharmony_cisys.path.append( 215f9996aaSopenharmony_ci os.path.dirname(os.path.dirname(os.path.dirname( 225f9996aaSopenharmony_ci os.path.abspath(__file__))))) 235f9996aaSopenharmony_cifrom scripts.util.file_utils import read_json_file # noqa: E402 245f9996aaSopenharmony_ci 255f9996aaSopenharmony_ci 265f9996aaSopenharmony_cidef check_parts_deps(args, external_part_name: str, parts_deps_info: dict): 275f9996aaSopenharmony_ci compile_standard_allow_file = args.compile_standard_allow_file 285f9996aaSopenharmony_ci compile_standard_allow_info = read_json_file(compile_standard_allow_file) 295f9996aaSopenharmony_ci added_self_part_allow_list = compile_standard_allow_info.get("external_deps_added_self_part_module", []) 305f9996aaSopenharmony_ci bundle_not_add_allow_list = compile_standard_allow_info.get("external_deps_bundle_not_add", []) 315f9996aaSopenharmony_ci if external_part_name == args.part_name: 325f9996aaSopenharmony_ci message = "{} in target {} is dependency within part {}, Need to used deps".format( 335f9996aaSopenharmony_ci external_part_name, args.target_path, args.part_name) 345f9996aaSopenharmony_ci if args.target_path in added_self_part_allow_list: 355f9996aaSopenharmony_ci print(f"[0/0] WARNING: {message}") 365f9996aaSopenharmony_ci return 375f9996aaSopenharmony_ci else: 385f9996aaSopenharmony_ci raise Exception(message) 395f9996aaSopenharmony_ci 405f9996aaSopenharmony_ci _tips_info = "{} depend part {}, need set part deps info to".format( 415f9996aaSopenharmony_ci args.target_path, external_part_name) 425f9996aaSopenharmony_ci 435f9996aaSopenharmony_ci part_deps_info = parts_deps_info.get(args.part_name) 445f9996aaSopenharmony_ci if not part_deps_info: 455f9996aaSopenharmony_ci _warning_info = "{} {}.".format(_tips_info, args.part_name) 465f9996aaSopenharmony_ci elif not part_deps_info.get('components') or \ 475f9996aaSopenharmony_ci not external_part_name in part_deps_info.get('components'): 485f9996aaSopenharmony_ci _warning_info = "{} {}.".format(_tips_info, part_deps_info.get('build_config_file')) 495f9996aaSopenharmony_ci else: 505f9996aaSopenharmony_ci _warning_info = "" 515f9996aaSopenharmony_ci 525f9996aaSopenharmony_ci if _warning_info != "": 535f9996aaSopenharmony_ci if args.target_path in bundle_not_add_allow_list: 545f9996aaSopenharmony_ci print(f"[0/0] WARNING: {_warning_info}") 555f9996aaSopenharmony_ci else: 565f9996aaSopenharmony_ci raise Exception(_warning_info) 575f9996aaSopenharmony_ci 585f9996aaSopenharmony_ci return 595f9996aaSopenharmony_ci 605f9996aaSopenharmony_ci 615f9996aaSopenharmony_cidef check(args) -> list: 625f9996aaSopenharmony_ci depfiles = [] 635f9996aaSopenharmony_ci if len(args.external_deps) == 0: 645f9996aaSopenharmony_ci return depfiles 655f9996aaSopenharmony_ci 665f9996aaSopenharmony_ci external_deps = args.external_deps 675f9996aaSopenharmony_ci 685f9996aaSopenharmony_ci parts_deps_file = 'build_configs/parts_info/parts_deps.json' 695f9996aaSopenharmony_ci parts_deps_info = read_json_file(parts_deps_file) 705f9996aaSopenharmony_ci if parts_deps_info is None: 715f9996aaSopenharmony_ci raise Exception("read pre_build parts_deps failed.") 725f9996aaSopenharmony_ci depfiles.append(parts_deps_file) 735f9996aaSopenharmony_ci 745f9996aaSopenharmony_ci for external_lib in external_deps: 755f9996aaSopenharmony_ci deps_desc = external_lib.split(':') 765f9996aaSopenharmony_ci external_part_name = deps_desc[0] 775f9996aaSopenharmony_ci check_parts_deps(args, external_part_name, parts_deps_info) 785f9996aaSopenharmony_ci 795f9996aaSopenharmony_ci return depfiles 805f9996aaSopenharmony_ci 815f9996aaSopenharmony_ci 825f9996aaSopenharmony_cidef main(): 835f9996aaSopenharmony_ci parser = argparse.ArgumentParser() 845f9996aaSopenharmony_ci parser.add_argument('--external-deps', nargs='*', required=True) 855f9996aaSopenharmony_ci parser.add_argument('--part-name', required=True, default='') 865f9996aaSopenharmony_ci parser.add_argument('--target-path', required=True, default='') 875f9996aaSopenharmony_ci parser.add_argument('--output', required=True, default='') 885f9996aaSopenharmony_ci args = parser.parse_args() 895f9996aaSopenharmony_ci 905f9996aaSopenharmony_ci check(args) 915f9996aaSopenharmony_ci 925f9996aaSopenharmony_ci return 0 935f9996aaSopenharmony_ci 945f9996aaSopenharmony_ci 955f9996aaSopenharmony_ciif __name__ == '__main__': 965f9996aaSopenharmony_ci sys.exit(main()) 97