blob: 4aa6763c6344b479d59607117aa5234a744848f0 [file] [log] [blame]
Jianliang Shen9b4ba112022-01-19 14:57:04 +08001# ------------------------------------------------------------------------------
2# Copyright (c) 2021-2022, Arm Limited. All rights reserved.
Jianliang Shenabf00412021-11-12 10:58:52 +08003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
Jianliang Shen9b4ba112022-01-19 14:57:04 +08006# ------------------------------------------------------------------------------
Jianliang Shenabf00412021-11-12 10:58:52 +08007
Jianliang Shenabf00412021-11-12 10:58:52 +08008import argparse
9import os
Jianliang Shen9b4ba112022-01-19 14:57:04 +080010import sys
11sys.path.append("src")
12from ui import UI
13from sq import SQ
Jianliang Shenabf00412021-11-12 10:58:52 +080014
Jianliang Shenabf00412021-11-12 10:58:52 +080015none_databse = "Cannot find database file! Please use this command to create \
Jianliang Shen9b4ba112022-01-19 14:57:04 +080016databse:\n\n\tpython3 code_size_analyze.py -i <map file path> --gnuarm/--armcc\n"
Jianliang Shenabf00412021-11-12 10:58:52 +080017
18def main(args):
Jianliang Shen9b4ba112022-01-19 14:57:04 +080019 """
20 It is required to input only one of '--gnuarm' and '--armcc'.
21 """
22 if (args.gnuarm_compiler and args.armclang_compiler) or \
23 (not args.gnuarm_compiler and not args.armclang_compiler):
24 print("Error: Need \'--gnuarm\' or \'--armcc\'")
25 exit(0)
26
27 """
28 Class 'sq' is to create a sqlite3 database from map file of compiler.
29 """
Jianliang Shenabf00412021-11-12 10:58:52 +080030 if args.map_file_input:
Jianliang Shen9b4ba112022-01-19 14:57:04 +080031 sq = SQ()
32 sq.gnuarm = True if args.gnuarm_compiler else False
33 sq.armcc = True if args.armclang_compiler else False
34 sq.file_path = args.map_file_input
35 sq.update()
Jianliang Shenabf00412021-11-12 10:58:52 +080036
Jianliang Shen9b4ba112022-01-19 14:57:04 +080037 if os.path.exists('data.db'):
38 """
39 Class 'ui' is to show the ui in terminal or export plaintext.
40 """
41 ui = UI()
42 ui.gnuarm = True if args.gnuarm_compiler else False
43 ui.armcc = True if args.armclang_compiler else False
44 output = ""
45 if args.ui_show:
Jianliang Shenabf00412021-11-12 10:58:52 +080046 ui.run()
Jianliang Shenabf00412021-11-12 10:58:52 +080047 else:
Jianliang Shen9b4ba112022-01-19 14:57:04 +080048 if args.all:
49 ui.draw_summary_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080050
Jianliang Shen9b4ba112022-01-19 14:57:04 +080051 if args.list_function:
52 ui.draw_function_page("")
Jianliang Shenabf00412021-11-12 10:58:52 +080053
Jianliang Shen9b4ba112022-01-19 14:57:04 +080054 if args.function_name:
55 ui.draw_function_page(args.function_name)
Jianliang Shenabf00412021-11-12 10:58:52 +080056
Jianliang Shen9b4ba112022-01-19 14:57:04 +080057 if args.dump_function_name:
58 ui.function_name = args.dump_function_name
59 ui.draw_function_detail_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080060
Jianliang Shen9b4ba112022-01-19 14:57:04 +080061 if args.list_data:
62 ui.draw_data_page("")
Jianliang Shenabf00412021-11-12 10:58:52 +080063
Jianliang Shen9b4ba112022-01-19 14:57:04 +080064 if args.data_name:
65 ui.draw_data_page(args.data_name)
Jianliang Shenabf00412021-11-12 10:58:52 +080066
Jianliang Shen9b4ba112022-01-19 14:57:04 +080067 if args.dump_data_name:
68 ui.data_name = args.dump_data_name
69 ui.draw_data_detail_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080070
Jianliang Shen9b4ba112022-01-19 14:57:04 +080071 if args.list_obj:
72 ui.draw_obj_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080073
Jianliang Shen9b4ba112022-01-19 14:57:04 +080074 if args.obj_name:
75 ui.obj_file = args.obj_name
76 ui.draw_obj_detail_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080077
Jianliang Shen9b4ba112022-01-19 14:57:04 +080078 if args.list_library:
79 ui.draw_library_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080080
Jianliang Shen9b4ba112022-01-19 14:57:04 +080081 if args.library_name:
82 ui.library_name = args.library_name
83 ui.draw_library_detail_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080084
Jianliang Shen9b4ba112022-01-19 14:57:04 +080085 if args.list_section:
86 ui.draw_section_page()
Jianliang Shenabf00412021-11-12 10:58:52 +080087
Jianliang Shen9b4ba112022-01-19 14:57:04 +080088 if args.section_name:
89 ui.section_name = args.section_name
90 ui.draw_section_lib()
Jianliang Shenabf00412021-11-12 10:58:52 +080091
Jianliang Shen9b4ba112022-01-19 14:57:04 +080092 output = ui.items
93 if output:
94 for s in output:
95 print(s)
96 ui.con.close()
97 else:
98 print(none_databse)
Jianliang Shenabf00412021-11-12 10:58:52 +080099
100def parse_args():
101 """
Jianliang Shen9b4ba112022-01-19 14:57:04 +0800102 List the arguments for program.
Jianliang Shenabf00412021-11-12 10:58:52 +0800103 """
Jianliang Shenabf00412021-11-12 10:58:52 +0800104 parser = argparse.ArgumentParser()
105
106 parser.add_argument('-i', '--input',
107 dest='map_file_input',
108 help='map file path <path>/tfm_s.map')
109 parser.add_argument('-u', '--ui',
110 dest='ui_show',
111 action='store_true',
112 help='show UI')
Jianliang Shenabf00412021-11-12 10:58:52 +0800113 parser.add_argument('--gnuarm',
114 dest='gnuarm_compiler',
115 action='store_true',
116 help='gnuarm map file input')
Jianliang Shenabf00412021-11-12 10:58:52 +0800117 parser.add_argument('--armcc',
118 dest='armclang_compiler',
119 action='store_true',
120 help='armclang map file input')
Jianliang Shenabf00412021-11-12 10:58:52 +0800121 parser.add_argument('-a', '--all',
122 dest='all',
123 action='store_true',
124 help='show total')
Jianliang Shenabf00412021-11-12 10:58:52 +0800125 parser.add_argument('-s', '--list_section',
126 dest='list_section',
127 action='store_true',
128 help='list section')
Jianliang Shen9b4ba112022-01-19 14:57:04 +0800129 parser.add_argument('-l', '--list_library',
130 dest='list_library',
131 action='store_true',
132 help='list library')
133 parser.add_argument('-o', '--list_obj',
134 dest='list_obj',
135 action='store_true',
136 help='list object file')
137 parser.add_argument('-f', '--list_function',
138 dest='list_function',
139 action='store_true',
140 help='list function')
141 parser.add_argument('-d', '--list_data',
142 dest='list_data',
143 action='store_true',
144 help='list data')
Jianliang Shenabf00412021-11-12 10:58:52 +0800145 parser.add_argument('--dump_section',
146 dest='section_name',
147 help='dump section')
Jianliang Shen9b4ba112022-01-19 14:57:04 +0800148 parser.add_argument('--dump_library',
149 dest='library_name',
150 help='dump library')
151 parser.add_argument('--dump_obj',
152 dest='obj_name',
153 help='dump object file')
154 parser.add_argument('--dump_function',
155 dest='dump_function_name',
156 help='dump function')
157 parser.add_argument('--dump_data',
158 dest='dump_data_name',
159 help='dump data')
160 parser.add_argument('--search_func',
161 dest='function_name',
162 help='search function')
163 parser.add_argument('--search_data',
164 dest='data_name',
165 help='search data')
Jianliang Shenabf00412021-11-12 10:58:52 +0800166 args = parser.parse_args()
167 return args
168
Jianliang Shenabf00412021-11-12 10:58:52 +0800169if __name__ == '__main__':
170 main(parse_args())
171 exit(0)