1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3# Copyright (c) 2022 Huawei Device Co., Ltd. 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16# This file is a configuration for scaning the BUILD.gn to collection compile 17# products. 18 19 20import os 21import sys 22import argparse 23import json 24import logging 25from typing import * 26 27import preprocess 28from pkgs.simple_yaml_tool import SimpleYamlTool 29from pkgs.basic_tool import do_nothing, BasicTool 30from get_subsystem_component import SC 31from misc import * 32from template_processor import * 33""" 34只给rom_analysis.py使用 35""" 36 37 38def parse_args(): 39 parser = argparse.ArgumentParser( 40 description="analysis rom size of L0 and L1 product") 41 parser.add_argument("-p", "--product_name", type=str, 42 help="product name. eg: -p ipcamera_hispark_taurus") 43 parser.add_argument("-o", "--oh_path", type=str, 44 default=".", help="root path of openharmony") 45 parser.add_argument("-g", "--recollect_gn", 46 action="store_false", help="recollect gn info or not(-g)") 47 parser.add_argument("-s", "--recollect_sc", action="store_false", 48 help="recollect subsystem_component info or not(-s)") 49 parser.add_argument("-b", "--baseline", action="store_true", 50 help="add baseline of component to the result(-b) or not.") 51 parser.add_argument("-u", "--unit_adaptive", 52 action="store_true", help="unit adaptive") 53 args = parser.parse_args() 54 return args 55 56 57logging.basicConfig(level=logging.NOTSET) 58_args = parse_args() 59 60# # global variables 61configs = SimpleYamlTool.read_yaml("config.yaml") 62result_dict: Dict[str, Any] = dict() 63product_name = _args.product_name 64if product_name not in configs.keys(): 65 print(f"error: product_name '{product_name}' illegal") 66 exit(-1) 67project_path = BasicTool.abspath(_args.oh_path) 68recollect_gn = _args.recollect_gn 69baseline = _args.baseline 70unit_adapt = _args.unit_adaptive 71_recollect_sc = _args.recollect_sc 72_sc_json: Dict[Text, Text] = configs.get("subsystem_component") 73_sc_save = _sc_json.get("save") 74_target_type = configs["target_type"] 75_sc_output_path = _sc_json.get("filename") 76if _recollect_sc: 77 logging.info( 78 "satrt scanning subsystem_name and component via get_subsystem_comonent.py") 79 sub_com_dict: Dict = SC.run(project_path, _sc_output_path, _sc_save) 80else: 81 with open(_sc_output_path, 'r', encoding='utf-8') as f: 82 sub_com_dict = json.load(f) 83 84collector_config: Tuple[BaseProcessor] = ( 85 DefaultProcessor(project_path=project_path, # 项目根路径 86 result_dict=result_dict, # 保存结果的字典 87 # targte的类型名称,即xxx("yyy")中的xxx 88 target_type=_target_type[0], 89 # 用以进行匹配的模式串,包括匹配段落时作为前缀 90 match_pattern=fr"^( *){_target_type[0]}\(.*?\)", 91 sub_com_dict=sub_com_dict, # 从bundle.json中收集的subsystem_name和component_name信息 92 target_name_parser=TargetNameParser.single_parser, # 进行target_name解析的parser 93 other_info_handlers={ 94 "extension": extension_handler, 95 }, # 解析其他信息的parser,{"字段名":该字段的parser} 96 unit_post_handler=SOPostHandler() # 对即将进行存储的unit字典的handler,会返回一个str作为存储时的key 97 ), 98 DefaultProcessor(project_path=project_path, 99 result_dict=result_dict, 100 target_type=_target_type[1], 101 match_pattern=fr"^( *){_target_type[1]}\(.*?\)", 102 sub_com_dict=sub_com_dict, 103 target_name_parser=TargetNameParser.single_parser, 104 other_info_handlers={ 105 "extension": extension_handler, 106 }, 107 unit_post_handler=SOPostHandler(), 108 ), 109 DefaultProcessor(project_path=project_path, 110 result_dict=result_dict, 111 target_type=_target_type[2], 112 match_pattern=fr"^( *){_target_type[2]}\(.*?\)", 113 sub_com_dict=sub_com_dict, 114 target_name_parser=TargetNameParser.single_parser, 115 other_info_handlers={ 116 "extension": extension_handler, 117 }, 118 unit_post_handler=APostHandler(), 119 ), 120 DefaultProcessor(project_path=project_path, 121 result_dict=result_dict, 122 target_type=_target_type[3], 123 match_pattern=fr"^( *){_target_type[3]}\(.*?\)", 124 sub_com_dict=sub_com_dict, 125 target_name_parser=TargetNameParser.single_parser, 126 other_info_handlers={ 127 "extension": extension_handler, 128 }, 129 unit_post_handler=APostHandler(), 130 ), 131 DefaultProcessor(project_path=project_path, 132 result_dict=result_dict, 133 target_type=_target_type[4], 134 match_pattern=fr"^( *){_target_type[4]}\(.*?\)", 135 sub_com_dict=sub_com_dict, 136 target_name_parser=TargetNameParser.single_parser, 137 other_info_handlers={ 138 "extension": extension_handler, 139 }, 140 unit_post_handler=DefaultPostHandler(), 141 ), 142 DefaultProcessor(project_path=project_path, 143 result_dict=result_dict, 144 target_type=_target_type[5], 145 match_pattern=fr"^( *){_target_type[5]}\(.*?\)", 146 sub_com_dict=sub_com_dict, 147 target_name_parser=TargetNameParser.single_parser, 148 other_info_handlers={ 149 "extension": extension_handler, 150 }, 151 unit_post_handler=DefaultPostHandler(), 152 ), 153 DefaultProcessor(project_path=project_path, 154 result_dict=result_dict, 155 target_type=_target_type[6], 156 match_pattern=fr"^( *){_target_type[6]}\(.*?\)", 157 sub_com_dict=sub_com_dict, 158 target_name_parser=TargetNameParser.single_parser, 159 other_info_handlers={ 160 "real_target_type": target_type_handler, 161 "extension": extension_handler, 162 }, 163 unit_post_handler=LiteLibPostHandler(), 164 ud_post_handler=LiteLibS2MPostHandler, 165 ), 166 DefaultProcessor(project_path=project_path, # hap有个hap_name 167 result_dict=result_dict, 168 target_type=_target_type[7], 169 match_pattern=fr"^( *){_target_type[7]}\(.*?\)", 170 sub_com_dict=sub_com_dict, 171 target_name_parser=TargetNameParser.single_parser, 172 other_info_handlers={ 173 "hap_name": hap_name_handler, 174 "extension": extension_handler, 175 }, 176 unit_post_handler=HAPPostHandler(), 177 ), 178 StrResourceProcessor(project_path=project_path, 179 result_dict=result_dict, 180 target_type=_target_type[8], 181 match_pattern=fr"^( *){_target_type[8]}\(.*?\)", 182 sub_com_dict=sub_com_dict, 183 target_name_parser=TargetNameParser.single_parser, 184 other_info_handlers={ 185 "extension": extension_handler, 186 }, 187 unit_post_handler=DefaultPostHandler(), 188 resource_field="source" 189 ), 190 StrResourceProcessor(project_path=project_path, 191 result_dict=result_dict, 192 target_type=_target_type[9], 193 match_pattern=fr"^( *){_target_type[9]}\(.*?\)", 194 sub_com_dict=sub_com_dict, 195 target_name_parser=TargetNameParser.single_parser, 196 other_info_handlers={ 197 "extension": extension_handler, 198 }, 199 unit_post_handler=DefaultPostHandler(), 200 resource_field="source" 201 ), 202 ListResourceProcessor(project_path=project_path, 203 result_dict=result_dict, 204 target_type=_target_type[10], 205 match_pattern=fr"^( *){_target_type[10]}\(.*?\)", 206 sub_com_dict=sub_com_dict, 207 target_name_parser=TargetNameParser.single_parser, 208 other_info_handlers={ 209 "extension": extension_handler, 210 }, 211 unit_post_handler=DefaultPostHandler(), 212 resource_field="sources" 213 ), 214 StrResourceProcessor(project_path=project_path, 215 result_dict=result_dict, 216 target_type=_target_type[11], 217 match_pattern=fr"^( *){_target_type[11]}\(.*?\)", 218 sub_com_dict=sub_com_dict, 219 target_name_parser=TargetNameParser.single_parser, 220 other_info_handlers={ 221 # "extension": extension_handler, 222 }, 223 unit_post_handler=DefaultPostHandler(), 224 resource_field="source" 225 ), 226 DefaultProcessor(project_path=project_path, 227 result_dict=result_dict, 228 target_type=_target_type[12], 229 match_pattern=fr"^( *){_target_type[12]}\(.*?\)", 230 sub_com_dict=sub_com_dict, 231 target_name_parser=TargetNameParser.single_parser, 232 other_info_handlers={ 233 "real_target_type": target_type_handler, 234 # "extension": extension_handler, 235 }, 236 unit_post_handler=LiteComponentPostHandler(), 237 ), 238 DefaultProcessor(project_path=project_path, 239 result_dict=result_dict, 240 target_type=_target_type[13], 241 match_pattern=fr"^( *){_target_type[13]}\(.*?\, .*?\)", 242 sub_com_dict=sub_com_dict, 243 target_name_parser=TargetNameParser.second_parser, 244 other_info_handlers={ 245 }, 246 unit_post_handler=DefaultPostHandler(), 247 ud_post_handler=TargetS2MPostHandler 248 ), 249 DefaultProcessor(project_path=project_path, 250 result_dict=result_dict, 251 target_type=_target_type[14], 252 match_pattern=fr"^( *){_target_type[14]}\(.*?\)", 253 sub_com_dict=sub_com_dict, 254 target_name_parser=TargetNameParser.single_parser, 255 other_info_handlers={ 256 "output_extension":extension_handler 257 }, 258 unit_post_handler=UnittestPostHandler(), 259 ), 260 DefaultProcessor(project_path=project_path, 261 result_dict=result_dict, 262 target_type=_target_type[15], 263 match_pattern=fr"^( *){_target_type[15]}\(.*?\)", 264 sub_com_dict=sub_com_dict, 265 target_name_parser=TargetNameParser.single_parser, 266 other_info_handlers={ 267 "hap_name": hap_name_handler, 268 "mode": mod_handler, 269 }, 270 unit_post_handler=HapPackPostHandler(), 271 ), 272 ListResourceProcessor(project_path=project_path, 273 result_dict=result_dict, 274 target_type=_target_type[16], 275 match_pattern=fr"^( *){_target_type[16]}\(.*?\)", 276 sub_com_dict=sub_com_dict, 277 target_name_parser=TargetNameParser.single_parser, 278 other_info_handlers={ 279 }, 280 unit_post_handler=DefaultPostHandler(), 281 resource_field="sources" 282 ), 283) 284 285__all__ = ["configs", "result_dict", "collector_config", "sub_com_dict"] 286