| 
									
										
										
										
											2017-06-15 12:18:48 +10:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2024-05-06 12:30:08 +02:00
										 |  |  | # SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD | 
					
						
							| 
									
										
										
										
											2017-06-15 12:18:48 +10:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2021-08-18 15:14:47 +02:00
										 |  |  | # SPDX-License-Identifier: Apache-2.0 | 
					
						
							| 
									
										
										
										
											2017-06-15 12:18:48 +10: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 12:53:27 +01:00
										 |  |  | import argparse | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2023-03-27 19:40:33 +02:00
										 |  |  | import subprocess | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2018-12-04 13:46:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-06 16:20:37 +01:00
										 |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2024-05-06 12:30:08 +02: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 11:21:10 +02: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 12:53:27 +01:00
										 |  |  |     parser.add_argument('-l', '--legacy', action='store_true', default=os.environ.get('ESP_IDF_SIZE_LEGACY', '0') == '1') | 
					
						
							| 
									
										
										
										
											2024-05-06 12:30:08 +02: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 12:53:27 +01:00
										 |  |  |     args, rest = parser.parse_known_args() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not args.legacy and args.format != 'json': | 
					
						
							| 
									
										
										
										
											2024-05-06 12:30:08 +02: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 12:53:27 +01: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 12:30:08 +02: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 11:21:10 +02: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 12:53:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if args.format is not None: | 
					
						
							|  |  |  |         rest = ['--format', args.format] + rest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sys.exit(subprocess.run([sys.executable, '-m', 'esp_idf_size'] + rest).returncode) |