esp-idf/tools/idf_size.py

35 lines
1.1 KiB
Python
Raw Normal View History

#!/usr/bin/env python
#
# SPDX-FileCopyrightText: 2017-2023 Espressif Systems (Shanghai) CO LTD
#
# SPDX-License-Identifier: Apache-2.0
#
feat(tools): esp_idf_size.ng integration This integrates esp_idf_size.ng, refactored esp-idf-size version, into esp-idf and enables it by default. The esp_idf_size.ng may be enabled by using the --ng option, but also via ESP_IDF_SIZE_NG env. variable, which is used in this integration. New -l/--legacy option is added, which enforces usage of the old version. This option can be also set via "ESP_IDF_SIZE_LEGACY" env. variable. This should allow to easily switch back to old version if there is any problem. The new version is used by default for all formats, except for the "json". Examples: $ idf.py size # uses refactored version $ idf.py size --legacy # uses legacy version $ idf.py size --l # uses legacy version $ idf.py size --format json # uses legacy version $ idf.py size --format json2 # uses refactored version $ export ESP_IDF_SIZE_LEGACY="1" # use legacy version only from now on ESP_IDF_SIZE_FORCE_TERMINAL, which forces terminal control codes(colors), is also set when running from idf.py, so the colors are propagated even if stdout for esp_idf_size.ng is not attached to tty. The same changes are applied also to the idf_size.py wrapper. There is an import check if esp_idf_size.ng is available. If not, we switch into the legacy mode. This should cover situation when the esp-idf has support for refactored version, but it's not installed. This should also allow users to bind to a legacy version(<1.0.0) and the idf.py size and idf_size.py should still work. This also allow us to restring the version in constraints file if we need to switch back to legacy version globally. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2023-11-28 06:53:27 -05:00
import argparse
import os
import subprocess
import sys
2018-12-04 07:46:48 -05:00
if __name__ == '__main__':
feat(tools): esp_idf_size.ng integration This integrates esp_idf_size.ng, refactored esp-idf-size version, into esp-idf and enables it by default. The esp_idf_size.ng may be enabled by using the --ng option, but also via ESP_IDF_SIZE_NG env. variable, which is used in this integration. New -l/--legacy option is added, which enforces usage of the old version. This option can be also set via "ESP_IDF_SIZE_LEGACY" env. variable. This should allow to easily switch back to old version if there is any problem. The new version is used by default for all formats, except for the "json". Examples: $ idf.py size # uses refactored version $ idf.py size --legacy # uses legacy version $ idf.py size --l # uses legacy version $ idf.py size --format json # uses legacy version $ idf.py size --format json2 # uses refactored version $ export ESP_IDF_SIZE_LEGACY="1" # use legacy version only from now on ESP_IDF_SIZE_FORCE_TERMINAL, which forces terminal control codes(colors), is also set when running from idf.py, so the colors are propagated even if stdout for esp_idf_size.ng is not attached to tty. The same changes are applied also to the idf_size.py wrapper. There is an import check if esp_idf_size.ng is available. If not, we switch into the legacy mode. This should cover situation when the esp-idf has support for refactored version, but it's not installed. This should also allow users to bind to a legacy version(<1.0.0) and the idf.py size and idf_size.py should still work. This also allow us to restring the version in constraints file if we need to switch back to legacy version globally. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2023-11-28 06:53:27 -05:00
parser = argparse.ArgumentParser()
parser.add_argument('--format')
parser.add_argument('-l', '--legacy', action='store_true', default=os.environ.get('ESP_IDF_SIZE_LEGACY', '0') == '1')
args, rest = parser.parse_known_args()
if not args.legacy and args.format != 'json':
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 args.legacy and args.format in ['json2', 'raw', 'tree']:
sys.exit(f'Legacy esp-idf-size does not support {args.format} format')
if args.format is not None:
rest = ['--format', args.format] + rest
sys.exit(subprocess.run([sys.executable, '-m', 'esp_idf_size'] + rest).returncode)