mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 09:01:40 +01:00 
			
		
		
		
	
		
			
	
	
		
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								# SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
							 | 
						||
| 
								 | 
							
								# SPDX-License-Identifier: Apache-2.0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# General Workflow:
							 | 
						||
| 
								 | 
							
								# 1. read all components dirs, a semicolon-separated string (cmake list)
							 | 
						||
| 
								 | 
							
								# 2. map the component dir with a unique prefix /COMPONENT_<NAME>_DIR
							 | 
						||
| 
								 | 
							
								# 2. write the prefix mapping file to $BUILD_DIR/prefix_map_gdbinit
							 | 
						||
| 
								 | 
							
								# 3. print the unique prefix out, a space-separated string, will be used by the build system to add compile options.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import argparse
							 | 
						||
| 
								 | 
							
								import os
							 | 
						||
| 
								 | 
							
								from typing import List
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def component_name(component_dir: str) -> str:
							 | 
						||
| 
								 | 
							
								    return '/COMPONENT_{}_DIR'.format(os.path.basename(component_dir).upper())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								GDB_SUBSTITUTE_PATH_FMT = 'set substitute-path {} {}\n'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def write_gdbinit(build_dir: str, folders: List[str]) -> None:
							 | 
						||
| 
								 | 
							
								    gdb_init_filepath = os.path.join(build_dir, 'prefix_map_gdbinit')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    with open(gdb_init_filepath, 'w') as fw:
							 | 
						||
| 
								 | 
							
								        for folder in folders:
							 | 
						||
| 
								 | 
							
								            fw.write(f'{GDB_SUBSTITUTE_PATH_FMT.format(component_name(folder), folder)}')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def main(build_dir: str, folders: List[str]) -> None:
							 | 
						||
| 
								 | 
							
								    write_gdbinit(build_dir, folders)
							 | 
						||
| 
								 | 
							
								    print(' '.join([component_name(folder) for folder in folders]), end='')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						||
| 
								 | 
							
								    parser = argparse.ArgumentParser(description='print the debug-prefix-map and write to '
							 | 
						||
| 
								 | 
							
								                                                 '$BUILD_DIR/prefix_map_gdbinit file')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    parser.add_argument('build_dir',
							 | 
						||
| 
								 | 
							
								                        help='build dir')
							 | 
						||
| 
								 | 
							
								    parser.add_argument('folders',
							 | 
						||
| 
								 | 
							
								                        help='component folders, semicolon separated string')
							 | 
						||
| 
								 | 
							
								    args = parser.parse_args()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    main(args.build_dir, args.folders.split(';'))
							 |