• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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