| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  | import copy | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | import glob | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import os.path | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | import shutil | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  | def action_extensions(base_actions, project_path=os.getcwd()): | 
					
						
							|  |  |  |     """ Describes extensions for unit tests. This function expects that actions "all" and "reconfigure" """ | 
					
						
							| 
									
										
										
										
											2018-12-04 13:46:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |     PROJECT_NAME = 'unit-test-app' | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     # List of unit-test-app configurations. | 
					
						
							|  |  |  |     # Each file in configs/ directory defines a configuration. The format is the | 
					
						
							|  |  |  |     # same as sdkconfig file. Configuration is applied on top of sdkconfig.defaults | 
					
						
							|  |  |  |     # file from the project directory | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |     CONFIG_NAMES = os.listdir(os.path.join(project_path, 'configs')) | 
					
						
							| 
									
										
										
										
											2018-12-04 13:46:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     # Build (intermediate) and output (artifact) directories | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |     BUILDS_DIR = os.path.join(project_path, 'builds') | 
					
						
							|  |  |  |     BINARIES_DIR = os.path.join(project_path, 'output') | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-21 10:45:13 +02:00
										 |  |  |     def parse_file_to_dict(path, regex): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Parse the config file at 'path' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Returns a dict of name:value. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         compiled_regex = re.compile(regex) | 
					
						
							|  |  |  |         result = {} | 
					
						
							|  |  |  |         with open(path) as f: | 
					
						
							|  |  |  |             for line in f: | 
					
						
							|  |  |  |                 m = compiled_regex.match(line) | 
					
						
							|  |  |  |                 if m: | 
					
						
							|  |  |  |                     result[m.group(1)] = m.group(2) | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def parse_config(path): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Expected format with default regex is "key=value" | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         return parse_file_to_dict(path, r'^([^=]+)=(.+)$') | 
					
						
							| 
									
										
										
										
											2019-06-21 10:45:13 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     def ut_apply_config(ut_apply_config_name, ctx, args): | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         config_name = re.match(r'ut-apply-config-(.*)', ut_apply_config_name).group(1) | 
					
						
							| 
									
										
										
										
											2019-06-21 10:45:13 +02:00
										 |  |  |         # Make sure that define_cache_entry is list | 
					
						
							|  |  |  |         args.define_cache_entry = list(args.define_cache_entry) | 
					
						
							|  |  |  |         new_cache_values = {} | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         sdkconfig_set = list(filter(lambda s: 'SDKCONFIG=' in s, args.define_cache_entry)) | 
					
						
							|  |  |  |         sdkconfig_path = os.path.join(args.project_dir, 'sdkconfig') | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if sdkconfig_set: | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             sdkconfig_path = sdkconfig_set[-1].split('=')[1] | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  |             sdkconfig_path = os.path.abspath(sdkconfig_path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             os.remove(sdkconfig_path) | 
					
						
							|  |  |  |         except OSError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if config_name in CONFIG_NAMES: | 
					
						
							|  |  |  |             # Parse the sdkconfig for components to be included/excluded and tests to be run | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             config_path = os.path.join(project_path, 'configs', config_name) | 
					
						
							| 
									
										
										
										
											2019-06-21 10:45:13 +02:00
										 |  |  |             config = parse_config(config_path) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             target = config.get('CONFIG_IDF_TARGET', 'esp32').strip("'").strip('"') | 
					
						
							| 
									
										
										
										
											2019-08-18 13:22:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             print('Reconfigure: config %s, target %s' % (config_name, target)) | 
					
						
							| 
									
										
										
										
											2019-08-18 13:22:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             # Clean up and set idf-target | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             base_actions['actions']['fullclean']['callback']('fullclean', ctx, args) | 
					
						
							| 
									
										
										
										
											2019-08-18 13:22:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             new_cache_values['EXCLUDE_COMPONENTS'] = config.get('EXCLUDE_COMPONENTS', "''") | 
					
						
							|  |  |  |             new_cache_values['TEST_EXCLUDE_COMPONENTS'] = config.get('TEST_EXCLUDE_COMPONENTS', "''") | 
					
						
							|  |  |  |             new_cache_values['TEST_COMPONENTS'] = config.get('TEST_COMPONENTS', "''") | 
					
						
							|  |  |  |             new_cache_values['TESTS_ALL'] = int(new_cache_values['TEST_COMPONENTS'] == "''") | 
					
						
							|  |  |  |             new_cache_values['IDF_TARGET'] = target | 
					
						
							|  |  |  |             new_cache_values['SDKCONFIG_DEFAULTS'] = ';'.join([os.path.join(project_path, 'sdkconfig.defaults'), config_path]) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             args.define_cache_entry.extend(['%s=%s' % (k, v) for k, v in new_cache_values.items()]) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             reconfigure = base_actions['actions']['reconfigure']['callback'] | 
					
						
							| 
									
										
										
										
											2019-10-22 13:01:13 +08:00
										 |  |  |             reconfigure(None, ctx, args) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # This target builds the configuration. It does not currently track dependencies, | 
					
						
							|  |  |  |     # but is good enough for CI builds if used together with clean-all-configs. | 
					
						
							|  |  |  |     # For local builds, use 'apply-config-NAME' target and then use normal 'all' | 
					
						
							|  |  |  |     # and 'flash' targets. | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     def ut_build(ut_build_name, ctx, args): | 
					
						
							| 
									
										
										
										
											2018-12-04 13:46:48 +01:00
										 |  |  |         # Create a copy of the passed arguments to prevent arg modifications to accrue if | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  |         # all configs are being built | 
					
						
							|  |  |  |         build_args = copy.copy(args) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         config_name = re.match(r'ut-build-(.*)', ut_build_name).group(1) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if config_name in CONFIG_NAMES: | 
					
						
							|  |  |  |             build_args.build_dir = os.path.join(BUILDS_DIR, config_name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             src = os.path.join(BUILDS_DIR, config_name) | 
					
						
							|  |  |  |             dest = os.path.join(BINARIES_DIR, config_name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 os.makedirs(dest) | 
					
						
							|  |  |  |             except OSError: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Build, tweaking paths to sdkconfig and sdkconfig.defaults | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             ut_apply_config('ut-apply-config-' + config_name, ctx, build_args) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             build_target = base_actions['actions']['all']['callback'] | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             build_target('all', ctx, build_args) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             # Copy artifacts to the output directory | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |             shutil.copyfile( | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |                 os.path.join(build_args.project_dir, 'sdkconfig'), | 
					
						
							|  |  |  |                 os.path.join(dest, 'sdkconfig'), | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             binaries = [PROJECT_NAME + x for x in ['.elf', '.bin', '.map']] | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             for binary in binaries: | 
					
						
							|  |  |  |                 shutil.copyfile(os.path.join(src, binary), os.path.join(dest, binary)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |                 os.mkdir(os.path.join(dest, 'bootloader')) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  |             except OSError: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |             shutil.copyfile( | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |                 os.path.join(src, 'bootloader', 'bootloader.bin'), | 
					
						
							|  |  |  |                 os.path.join(dest, 'bootloader', 'bootloader.bin'), | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             for partition_table in glob.glob(os.path.join(src, 'partition_table', 'partition-table*.bin')): | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  |                 try: | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |                     os.mkdir(os.path.join(dest, 'partition_table')) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  |                 except OSError: | 
					
						
							|  |  |  |                     pass | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |                 shutil.copyfile( | 
					
						
							|  |  |  |                     partition_table, | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |                     os.path.join(dest, 'partition_table', os.path.basename(partition_table)), | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |                 ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             shutil.copyfile( | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |                 os.path.join(src, 'flasher_args.json'), | 
					
						
							|  |  |  |                 os.path.join(dest, 'flasher_args.json'), | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             binaries = glob.glob(os.path.join(src, '*.bin')) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  |             binaries = [os.path.basename(s) for s in binaries] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for binary in binaries: | 
					
						
							|  |  |  |                 shutil.copyfile(os.path.join(src, binary), os.path.join(dest, binary)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     def ut_clean(ut_clean_name, ctx, args): | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         config_name = re.match(r'ut-clean-(.*)', ut_clean_name).group(1) | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  |         if config_name in CONFIG_NAMES: | 
					
						
							|  |  |  |             shutil.rmtree(os.path.join(BUILDS_DIR, config_name), ignore_errors=True) | 
					
						
							|  |  |  |             shutil.rmtree(os.path.join(BINARIES_DIR, config_name), ignore_errors=True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     def test_component_callback(ctx, global_args, tasks): | 
					
						
							|  |  |  |         """ Convert the values passed to the -T and -E parameter to corresponding cache entry definitions TESTS_ALL and TEST_COMPONENTS """ | 
					
						
							|  |  |  |         test_components = global_args.test_components | 
					
						
							|  |  |  |         test_exclude_components = global_args.test_exclude_components | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-21 10:45:13 +02:00
										 |  |  |         cache_entries = {} | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |         if test_components: | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             if 'all' in test_components: | 
					
						
							|  |  |  |                 cache_entries['TESTS_ALL'] = 1 | 
					
						
							|  |  |  |                 cache_entries['TEST_COMPONENTS'] = "''" | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |                 cache_entries['TESTS_ALL'] = 0 | 
					
						
							|  |  |  |                 cache_entries['TEST_COMPONENTS'] = ' '.join(test_components) | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if test_exclude_components: | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             cache_entries['TEST_EXCLUDE_COMPONENTS'] = ' '.join(test_exclude_components) | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if cache_entries: | 
					
						
							|  |  |  |             global_args.define_cache_entry = list(global_args.define_cache_entry) | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             global_args.define_cache_entry.extend(['%s=%s' % (k, v) for k, v in cache_entries.items()]) | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Add global options | 
					
						
							|  |  |  |     extensions = { | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         'global_options': [{ | 
					
						
							|  |  |  |             'names': ['-T', '--test-components'], | 
					
						
							|  |  |  |             'help': 'Specify the components to test.', | 
					
						
							|  |  |  |             'scope': 'shared', | 
					
						
							|  |  |  |             'multiple': True, | 
					
						
							| 
									
										
										
										
											2019-06-12 19:10:16 +02:00
										 |  |  |         }, { | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             'names': ['-E', '--test-exclude-components'], | 
					
						
							|  |  |  |             'help': 'Specify the components to exclude from testing.', | 
					
						
							|  |  |  |             'scope': 'shared', | 
					
						
							|  |  |  |             'multiple': True, | 
					
						
							| 
									
										
										
										
											2019-06-12 19:10:16 +02:00
										 |  |  |         }], | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         'global_action_callbacks': [test_component_callback], | 
					
						
							|  |  |  |         'actions': {}, | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # This generates per-config targets (clean, build, apply-config). | 
					
						
							|  |  |  |     build_all_config_deps = [] | 
					
						
							|  |  |  |     clean_all_config_deps = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for config in CONFIG_NAMES: | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         config_build_action_name = 'ut-build-' + config | 
					
						
							|  |  |  |         config_clean_action_name = 'ut-clean-' + config | 
					
						
							|  |  |  |         config_apply_config_action_name = 'ut-apply-config-' + config | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         extensions['actions'][config_build_action_name] = { | 
					
						
							|  |  |  |             'callback': | 
					
						
							| 
									
										
										
										
											2019-06-12 19:10:16 +02:00
										 |  |  |             ut_build, | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             'help': | 
					
						
							|  |  |  |             'Build unit-test-app with configuration provided in configs/NAME. ' + | 
					
						
							|  |  |  |             'Build directory will be builds/%s/, ' % config_build_action_name + | 
					
						
							|  |  |  |             'output binaries will be under output/%s/' % config_build_action_name, | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         extensions['actions'][config_clean_action_name] = { | 
					
						
							|  |  |  |             'callback': ut_clean, | 
					
						
							|  |  |  |             'help': 'Remove build and output directories for configuration %s.' % config_clean_action_name, | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |         extensions['actions'][config_apply_config_action_name] = { | 
					
						
							|  |  |  |             'callback': | 
					
						
							| 
									
										
										
										
											2019-06-12 19:10:16 +02:00
										 |  |  |             ut_apply_config, | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |             'help': | 
					
						
							|  |  |  |             'Generates configuration based on configs/%s in sdkconfig file.' % config_apply_config_action_name + | 
					
						
							|  |  |  |             'After this, normal all/flash targets can be used. Useful for development/debugging.', | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         build_all_config_deps.append(config_build_action_name) | 
					
						
							|  |  |  |         clean_all_config_deps.append(config_clean_action_name) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |     extensions['actions']['ut-build-all-configs'] = { | 
					
						
							|  |  |  |         'callback': ut_build, | 
					
						
							|  |  |  |         'help': 'Build all configurations defined in configs/ directory.', | 
					
						
							|  |  |  |         'dependencies': build_all_config_deps, | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-26 10:49:01 +08:00
										 |  |  |     extensions['actions']['ut-clean-all-configs'] = { | 
					
						
							|  |  |  |         'callback': ut_clean, | 
					
						
							|  |  |  |         'help': 'Remove build and output directories for all configurations defined in configs/ directory.', | 
					
						
							|  |  |  |         'dependencies': clean_all_config_deps, | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-08-27 10:48:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 18:06:52 +02:00
										 |  |  |     return extensions |