• 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")
47    parser.add_argument("-s", "--recollect_sc", action="store_false",
48                        help="recollect subsystem_component info or not")
49    args = parser.parse_args()
50    return args
51
52
53logging.basicConfig(level=logging.INFO)
54_args = parse_args()
55
56# # global variables
57configs = SimpleYamlTool.read_yaml("config.yaml")
58result_dict: Dict[str, Any] = dict()
59
60project_path = BasicTool.abspath(_args.oh_path)
61product_name = _args.product_name
62recollect_gn = _args.recollect_gn
63_recollect_sc = _args.recollect_sc
64_sc_json: Dict[Text, Text] = configs.get("subsystem_component")
65_sc_save = _sc_json.get("save")
66_target_type = configs["target_type"]
67_sc_output_path = _sc_json.get("filename")
68if _recollect_sc:
69    logging.info(
70        "satrt scanning subsystem_name and component via get_subsystem_comonent.py")
71    sub_com_dict: Dict = SC.run(project_path, _sc_output_path, _sc_save)
72else:
73    with open(_sc_output_path, 'r', encoding='utf-8') as f:
74        sub_com_dict = json.load(f)
75
76collector_config: Tuple[BaseProcessor] = (
77    DefaultProcessor(project_path=project_path,    # 项目根路径
78                     result_dict=result_dict,   # 保存结果的字典
79                     # targte的类型名称,即xxx("yyy")中的xxx
80                     target_type=_target_type[0],
81                     # 用以进行匹配的模式串,包括匹配段落时作为前缀
82                     match_pattern=fr"^( *){_target_type[0]}\(.*?\)",
83                     sub_com_dict=sub_com_dict,    # 从bundle.json中收集的subsystem_name和component_name信息
84                     target_name_parser=TargetNameParser.single_parser,  # 进行target_name解析的parser
85                     other_info_handlers={
86                         "extension": extension_handler,
87                     },    # 解析其他信息的parser,{"字段名":该字段的parser}
88                     unit_post_handler=SOPostHandler()  # 对即将进行存储的unit字典的handler,会返回一个str作为存储时的key
89                     ),
90    DefaultProcessor(project_path=project_path,
91                     result_dict=result_dict,
92                     target_type=_target_type[1],
93                     match_pattern=fr"^( *){_target_type[1]}\(.*?\)",
94                     sub_com_dict=sub_com_dict,
95                     target_name_parser=TargetNameParser.single_parser,
96                     other_info_handlers={
97                         "extension": extension_handler,
98                     },
99                     unit_post_handler=SOPostHandler(),
100                     ),
101    DefaultProcessor(project_path=project_path,
102                     result_dict=result_dict,
103                     target_type=_target_type[2],
104                     match_pattern=fr"^( *){_target_type[2]}\(.*?\)",
105                     sub_com_dict=sub_com_dict,
106                     target_name_parser=TargetNameParser.single_parser,
107                     other_info_handlers={
108                         "extension": extension_handler,
109                     },
110                     unit_post_handler=APostHandler(),
111                     ),
112    DefaultProcessor(project_path=project_path,
113                     result_dict=result_dict,
114                     target_type=_target_type[3],
115                     match_pattern=fr"^( *){_target_type[3]}\(.*?\)",
116                     sub_com_dict=sub_com_dict,
117                     target_name_parser=TargetNameParser.single_parser,
118                     other_info_handlers={
119                         "extension": extension_handler,
120                     },
121                     unit_post_handler=APostHandler(),
122                     ),
123    DefaultProcessor(project_path=project_path,
124                     result_dict=result_dict,
125                     target_type=_target_type[4],
126                     match_pattern=fr"^( *){_target_type[4]}\(.*?\)",
127                     sub_com_dict=sub_com_dict,
128                     target_name_parser=TargetNameParser.single_parser,
129                     other_info_handlers={
130                         "extension": extension_handler,
131                     },
132                     unit_post_handler=DefaultPostHandler(),
133                     ),
134    DefaultProcessor(project_path=project_path,
135                     result_dict=result_dict,
136                     target_type=_target_type[5],
137                     match_pattern=fr"^( *){_target_type[5]}\(.*?\)",
138                     sub_com_dict=sub_com_dict,
139                     target_name_parser=TargetNameParser.single_parser,
140                     other_info_handlers={
141                         "extension": extension_handler,
142                     },
143                     unit_post_handler=DefaultPostHandler(),
144                     ),
145    DefaultProcessor(project_path=project_path,
146                     result_dict=result_dict,
147                     target_type=_target_type[6],
148                     match_pattern=fr"^( *){_target_type[6]}\(.*?\)",
149                     sub_com_dict=sub_com_dict,
150                     target_name_parser=TargetNameParser.single_parser,
151                     other_info_handlers={
152                         "real_target_type": target_type_handler,
153                         "extension": extension_handler,
154                     },
155                     unit_post_handler=LiteLibPostHandler(),
156                     ud_post_handler=LiteLibS2MPostHandler,
157                     ),
158    DefaultProcessor(project_path=project_path,    # hap有个hap_name
159                     result_dict=result_dict,
160                     target_type=_target_type[7],
161                     match_pattern=fr"^( *){_target_type[7]}\(.*?\)",
162                     sub_com_dict=sub_com_dict,
163                     target_name_parser=TargetNameParser.single_parser,
164                     other_info_handlers={
165                         "hap_name": hap_name_handler,
166                         "extension": extension_handler,
167                     },
168                     unit_post_handler=HAPPostHandler(),
169                     ),
170    StrResourceProcessor(project_path=project_path,
171                         result_dict=result_dict,
172                         target_type=_target_type[8],
173                         match_pattern=fr"^( *){_target_type[8]}\(.*?\)",
174                         sub_com_dict=sub_com_dict,
175                         target_name_parser=TargetNameParser.single_parser,
176                         other_info_handlers={
177                             "extension": extension_handler,
178                         },
179                         unit_post_handler=DefaultPostHandler(),
180                         resource_field="source"
181                         ),
182    StrResourceProcessor(project_path=project_path,
183                         result_dict=result_dict,
184                         target_type=_target_type[9],
185                         match_pattern=fr"^( *){_target_type[9]}\(.*?\)",
186                         sub_com_dict=sub_com_dict,
187                         target_name_parser=TargetNameParser.single_parser,
188                         other_info_handlers={
189                             "extension": extension_handler,
190                         },
191                         unit_post_handler=DefaultPostHandler(),
192                         resource_field="source"
193                         ),
194    ListResourceProcessor(project_path=project_path,
195                          result_dict=result_dict,
196                          target_type=_target_type[10],
197                          match_pattern=fr"^( *){_target_type[10]}\(.*?\)",
198                          sub_com_dict=sub_com_dict,
199                          target_name_parser=TargetNameParser.single_parser,
200                          other_info_handlers={
201                              "extension": extension_handler,
202                          },
203                          unit_post_handler=DefaultPostHandler(),
204                          resource_field="sources"
205                          ),
206    StrResourceProcessor(project_path=project_path,
207                         result_dict=result_dict,
208                         target_type=_target_type[11],
209                         match_pattern=fr"^( *){_target_type[11]}\(.*?\)",
210                         sub_com_dict=sub_com_dict,
211                         target_name_parser=TargetNameParser.single_parser,
212                         other_info_handlers={
213                             #  "extension": extension_handler,
214                         },
215                         unit_post_handler=DefaultPostHandler(),
216                         resource_field="source"
217                         ),
218    DefaultProcessor(project_path=project_path,
219                     result_dict=result_dict,
220                     target_type=_target_type[12],
221                     match_pattern=fr"^( *){_target_type[12]}\(.*?\)",
222                     sub_com_dict=sub_com_dict,
223                     target_name_parser=TargetNameParser.single_parser,
224                     other_info_handlers={
225                         "real_target_type": target_type_handler,
226                         #  "extension": extension_handler,
227                     },
228                     unit_post_handler=LiteComponentPostHandler(),
229                     ),
230    DefaultProcessor(project_path=project_path,
231                     result_dict=result_dict,
232                     target_type=_target_type[13],
233                     match_pattern=fr"^( *){_target_type[13]}\(.*?\, .*?\)",
234                     sub_com_dict=sub_com_dict,
235                     target_name_parser=TargetNameParser.second_parser,
236                     other_info_handlers={
237                     },
238                     unit_post_handler=DefaultPostHandler(),
239                     ud_post_handler=TargetS2MPostHandler
240                     )
241)
242
243__all__ = ["configs", "result_dict", "collector_config", "sub_com_dict"]
244
245if __name__ == '__main__':
246    for c in collector_config:
247        c.run()
248    with open("demo.json", 'w', encoding='utf-8') as f:
249        json.dump(result_dict, f)
250