esp-idf/tools/idf_size.py

50 wiersze
2.4 KiB
Python
Executable File

#!/usr/bin/env python
#
# SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
#
# SPDX-License-Identifier: Apache-2.0
#
import argparse
import os
import subprocess
import sys
if __name__ == '__main__':
# Here the argparse is used only to "peek" into arguments if
# legacy version is requested or if old json format is specified.
# In these two cases the esp_idf_size legacy version is spawned.
parser = argparse.ArgumentParser(add_help=False)
# Make the --format arg optional, so this argparse instance does not
# fail with an error and the proper underlying help is displayed.
# Note that exit_on_error is supported from python3.9, so this is
# a workaround how to make sure that the args parsing doesn't fail here if idf_size.py
# is invoked e.g. without specifying the format, like "idf_size.py --format".
parser.add_argument('--format', nargs='?')
parser.add_argument('-l', '--legacy', action='store_true', default=os.environ.get('ESP_IDF_SIZE_LEGACY', '0') == '1')
# The sys.argv is parsed with "exit_on_error", but the argparse.ArgumentError
# exception should never occur, because unknown args should be put into
# the rest variable, since the parse_known_args() method is used.
args, rest = parser.parse_known_args()
if not args.legacy and args.format != 'json':
# By default start the refactored version, unless legacy version is explicitly requested with
# -l/--legacy option or if old json format is specified.
try:
import esp_idf_size.ng # noqa: F401
except ImportError:
print('warning: refactored esp-idf-size not installed, using legacy mode', file=sys.stderr)
args.legacy = True
else:
os.environ['ESP_IDF_SIZE_NG'] = '1'
if not rest or '-h' in rest or '--help' in rest:
print(('Note: legacy esp_idf_size version can be invoked by specifying the -l/--legacy '
'option or by setting the ESP_IDF_SIZE_LEGACY environment variable. Additionally, the '
'legacy version is automatically employed when the JSON format is specified for '
'compatibility with previous versions.'))
if args.format is not None:
rest = ['--format', args.format] + rest
sys.exit(subprocess.run([sys.executable, '-m', 'esp_idf_size'] + rest).returncode)