blob: 4aa6763c6344b479d59607117aa5234a744848f0 [file] [log] [blame]
# ------------------------------------------------------------------------------
# Copyright (c) 2021-2022, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# ------------------------------------------------------------------------------
import argparse
import os
import sys
sys.path.append("src")
from ui import UI
from sq import SQ
none_databse = "Cannot find database file! Please use this command to create \
databse:\n\n\tpython3 code_size_analyze.py -i <map file path> --gnuarm/--armcc\n"
def main(args):
"""
It is required to input only one of '--gnuarm' and '--armcc'.
"""
if (args.gnuarm_compiler and args.armclang_compiler) or \
(not args.gnuarm_compiler and not args.armclang_compiler):
print("Error: Need \'--gnuarm\' or \'--armcc\'")
exit(0)
"""
Class 'sq' is to create a sqlite3 database from map file of compiler.
"""
if args.map_file_input:
sq = SQ()
sq.gnuarm = True if args.gnuarm_compiler else False
sq.armcc = True if args.armclang_compiler else False
sq.file_path = args.map_file_input
sq.update()
if os.path.exists('data.db'):
"""
Class 'ui' is to show the ui in terminal or export plaintext.
"""
ui = UI()
ui.gnuarm = True if args.gnuarm_compiler else False
ui.armcc = True if args.armclang_compiler else False
output = ""
if args.ui_show:
ui.run()
else:
if args.all:
ui.draw_summary_page()
if args.list_function:
ui.draw_function_page("")
if args.function_name:
ui.draw_function_page(args.function_name)
if args.dump_function_name:
ui.function_name = args.dump_function_name
ui.draw_function_detail_page()
if args.list_data:
ui.draw_data_page("")
if args.data_name:
ui.draw_data_page(args.data_name)
if args.dump_data_name:
ui.data_name = args.dump_data_name
ui.draw_data_detail_page()
if args.list_obj:
ui.draw_obj_page()
if args.obj_name:
ui.obj_file = args.obj_name
ui.draw_obj_detail_page()
if args.list_library:
ui.draw_library_page()
if args.library_name:
ui.library_name = args.library_name
ui.draw_library_detail_page()
if args.list_section:
ui.draw_section_page()
if args.section_name:
ui.section_name = args.section_name
ui.draw_section_lib()
output = ui.items
if output:
for s in output:
print(s)
ui.con.close()
else:
print(none_databse)
def parse_args():
"""
List the arguments for program.
"""
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--input',
dest='map_file_input',
help='map file path <path>/tfm_s.map')
parser.add_argument('-u', '--ui',
dest='ui_show',
action='store_true',
help='show UI')
parser.add_argument('--gnuarm',
dest='gnuarm_compiler',
action='store_true',
help='gnuarm map file input')
parser.add_argument('--armcc',
dest='armclang_compiler',
action='store_true',
help='armclang map file input')
parser.add_argument('-a', '--all',
dest='all',
action='store_true',
help='show total')
parser.add_argument('-s', '--list_section',
dest='list_section',
action='store_true',
help='list section')
parser.add_argument('-l', '--list_library',
dest='list_library',
action='store_true',
help='list library')
parser.add_argument('-o', '--list_obj',
dest='list_obj',
action='store_true',
help='list object file')
parser.add_argument('-f', '--list_function',
dest='list_function',
action='store_true',
help='list function')
parser.add_argument('-d', '--list_data',
dest='list_data',
action='store_true',
help='list data')
parser.add_argument('--dump_section',
dest='section_name',
help='dump section')
parser.add_argument('--dump_library',
dest='library_name',
help='dump library')
parser.add_argument('--dump_obj',
dest='obj_name',
help='dump object file')
parser.add_argument('--dump_function',
dest='dump_function_name',
help='dump function')
parser.add_argument('--dump_data',
dest='dump_data_name',
help='dump data')
parser.add_argument('--search_func',
dest='function_name',
help='search function')
parser.add_argument('--search_data',
dest='data_name',
help='search data')
args = parser.parse_args()
return args
if __name__ == '__main__':
main(parse_args())
exit(0)