Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 1 | # ------------------------------------------------------------------------------ |
| 2 | # Copyright (c) 2021-2022, Arm Limited. All rights reserved. |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 3 | # |
| 4 | # SPDX-License-Identifier: BSD-3-Clause |
| 5 | # |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 6 | # ------------------------------------------------------------------------------ |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 7 | |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 8 | import argparse |
| 9 | import os |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 10 | import sys |
| 11 | sys.path.append("src") |
| 12 | from ui import UI |
| 13 | from sq import SQ |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 14 | |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 15 | none_databse = "Cannot find database file! Please use this command to create \ |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 16 | databse:\n\n\tpython3 code_size_analyze.py -i <map file path> --gnuarm/--armcc\n" |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 17 | |
| 18 | def main(args): |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 19 | """ |
| 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 Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 30 | if args.map_file_input: |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 31 | 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 Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 36 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 37 | 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 Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 46 | ui.run() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 47 | else: |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 48 | if args.all: |
| 49 | ui.draw_summary_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 50 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 51 | if args.list_function: |
| 52 | ui.draw_function_page("") |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 53 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 54 | if args.function_name: |
| 55 | ui.draw_function_page(args.function_name) |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 56 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 57 | if args.dump_function_name: |
| 58 | ui.function_name = args.dump_function_name |
| 59 | ui.draw_function_detail_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 60 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 61 | if args.list_data: |
| 62 | ui.draw_data_page("") |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 63 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 64 | if args.data_name: |
| 65 | ui.draw_data_page(args.data_name) |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 66 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 67 | if args.dump_data_name: |
| 68 | ui.data_name = args.dump_data_name |
| 69 | ui.draw_data_detail_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 70 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 71 | if args.list_obj: |
| 72 | ui.draw_obj_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 73 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 74 | if args.obj_name: |
| 75 | ui.obj_file = args.obj_name |
| 76 | ui.draw_obj_detail_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 77 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 78 | if args.list_library: |
| 79 | ui.draw_library_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 80 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 81 | if args.library_name: |
| 82 | ui.library_name = args.library_name |
| 83 | ui.draw_library_detail_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 84 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 85 | if args.list_section: |
| 86 | ui.draw_section_page() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 87 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 88 | if args.section_name: |
| 89 | ui.section_name = args.section_name |
| 90 | ui.draw_section_lib() |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 91 | |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 92 | 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 Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 99 | |
| 100 | def parse_args(): |
| 101 | """ |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 102 | List the arguments for program. |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 103 | """ |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 104 | 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 Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 113 | parser.add_argument('--gnuarm', |
| 114 | dest='gnuarm_compiler', |
| 115 | action='store_true', |
| 116 | help='gnuarm map file input') |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 117 | parser.add_argument('--armcc', |
| 118 | dest='armclang_compiler', |
| 119 | action='store_true', |
| 120 | help='armclang map file input') |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 121 | parser.add_argument('-a', '--all', |
| 122 | dest='all', |
| 123 | action='store_true', |
| 124 | help='show total') |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 125 | parser.add_argument('-s', '--list_section', |
| 126 | dest='list_section', |
| 127 | action='store_true', |
| 128 | help='list section') |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 129 | 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 Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 145 | parser.add_argument('--dump_section', |
| 146 | dest='section_name', |
| 147 | help='dump section') |
Jianliang Shen | 9b4ba11 | 2022-01-19 14:57:04 +0800 | [diff] [blame] | 148 | 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 Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 166 | args = parser.parse_args() |
| 167 | return args |
| 168 | |
Jianliang Shen | abf0041 | 2021-11-12 10:58:52 +0800 | [diff] [blame] | 169 | if __name__ == '__main__': |
| 170 | main(parse_args()) |
| 171 | exit(0) |