2017-06-14 22:18:48 -04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#
|
2024-05-06 06:30:08 -04:00
|
|
|
# SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
|
2017-06-14 22:18:48 -04:00
|
|
|
#
|
2021-08-18 09:14:47 -04:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
2017-06-14 22:18:48 -04:00
|
|
|
#
|
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
|
2023-03-27 13:40:33 -04:00
|
|
|
import subprocess
|
|
|
|
import sys
|
2018-12-04 07:46:48 -05:00
|
|
|
|
2020-03-06 10:20:37 -05:00
|
|
|
if __name__ == '__main__':
|
2024-05-06 06:30:08 -04:00
|
|
|
# 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.
|
2024-05-08 05:21:10 -04:00
|
|
|
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='?')
|
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.add_argument('-l', '--legacy', action='store_true', default=os.environ.get('ESP_IDF_SIZE_LEGACY', '0') == '1')
|
2024-05-06 06:30:08 -04:00
|
|
|
|
|
|
|
# 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.
|
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
|
|
|
args, rest = parser.parse_known_args()
|
|
|
|
|
|
|
|
if not args.legacy and args.format != 'json':
|
2024-05-06 06:30:08 -04:00
|
|
|
# By default start the refactored version, unless legacy version is explicitly requested with
|
|
|
|
# -l/--legacy option or if old json format is specified.
|
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
|
|
|
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'
|
2024-05-06 06:30:08 -04:00
|
|
|
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 '
|
2024-05-08 05:21:10 -04:00
|
|
|
'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.'))
|
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
|
|
|
|
|
|
|
if args.format is not None:
|
|
|
|
rest = ['--format', args.format] + rest
|
|
|
|
|
|
|
|
sys.exit(subprocess.run([sys.executable, '-m', 'esp_idf_size'] + rest).returncode)
|