| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  | #!/usr/bin/env python3 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import json | 
					
						
							| 
									
										
										
										
											2025-02-11 20:56:41 +01:00
										 |  |  | from pathlib import Path | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  |     board_list = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Find all board.cmake files | 
					
						
							|  |  |  |     for root, dirs, files in os.walk("hw/bsp"): | 
					
						
							|  |  |  |         for file in files: | 
					
						
							|  |  |  |             if file == "board.cmake": | 
					
						
							|  |  |  |                 board_list.append(os.path.basename(root)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     print('Generating presets for the following boards:') | 
					
						
							|  |  |  |     print(board_list) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Generate the presets | 
					
						
							|  |  |  |     presets = {} | 
					
						
							|  |  |  |     presets['version'] = 6 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Configure presets | 
					
						
							|  |  |  |     presets['configurePresets'] = [ | 
					
						
							|  |  |  |         {"name": "default", | 
					
						
							|  |  |  |          "hidden": True, | 
					
						
							|  |  |  |          "description": r"Configure preset for the ${presetName} board", | 
					
						
							| 
									
										
										
										
											2025-02-09 18:40:30 +01:00
										 |  |  |          "generator": "Ninja Multi-Config", | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  |          "binaryDir": r"${sourceDir}/build/${presetName}", | 
					
						
							|  |  |  |          "cacheVariables": { | 
					
						
							| 
									
										
										
										
											2025-02-09 18:40:30 +01:00
										 |  |  |              "CMAKE_DEFAULT_BUILD_TYPE": "RelWithDebInfo", | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  |              "BOARD": r"${presetName}" | 
					
						
							| 
									
										
										
										
											2025-02-09 18:40:30 +01:00
										 |  |  |          }}] | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     presets['configurePresets'].extend( | 
					
						
							| 
									
										
										
										
											2025-02-09 18:40:30 +01:00
										 |  |  |         sorted( | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     'name': board, | 
					
						
							|  |  |  |                     'inherits': 'default' | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 for board in board_list | 
					
						
							|  |  |  |             ], key=lambda x: x['name'] | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Build presets | 
					
						
							|  |  |  |     # no inheritance since 'name' doesn't support macro expansion | 
					
						
							| 
									
										
										
										
											2025-02-09 18:40:30 +01:00
										 |  |  |     presets['buildPresets'] = sorted( | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 'name': board, | 
					
						
							|  |  |  |                 'description': "Build preset for the " + board + " board", | 
					
						
							|  |  |  |                 'configurePreset': board | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             for board in board_list | 
					
						
							|  |  |  |         ], key=lambda x: x['name'] | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Workflow presets | 
					
						
							| 
									
										
										
										
											2025-02-09 18:40:30 +01:00
										 |  |  |     presets['workflowPresets'] = sorted( | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 "name": board, | 
					
						
							|  |  |  |                 "steps": [ | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         "type": "configure", | 
					
						
							|  |  |  |                         "name": board | 
					
						
							|  |  |  |                     }, | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         "type": "build", | 
					
						
							|  |  |  |                         "name": board | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 ] | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             for board in board_list | 
					
						
							|  |  |  |         ], key=lambda x: x['name'] | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-11 20:56:41 +01:00
										 |  |  |     path_boardpresets = "hw/bsp/BoardPresets.json" | 
					
						
							|  |  |  |     with open(path_boardpresets, "w") as f: | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  |         f.write('{}\n'.format(json.dumps(presets, indent=2))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Generate presets for examples | 
					
						
							|  |  |  |     presets = { | 
					
						
							|  |  |  |         "version": 6, | 
					
						
							|  |  |  |         "include": [ | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     example_list = [] | 
					
						
							|  |  |  |     for root, dirs, files in os.walk("examples"): | 
					
						
							|  |  |  |         for file in files: | 
					
						
							| 
									
										
										
										
											2025-02-11 20:56:41 +01:00
										 |  |  |             # Filter out ESP-IDF CMakeLists.txt in src folder | 
					
						
							|  |  |  |             if file == "CMakeLists.txt" and os.path.basename(root) != 'src': | 
					
						
							|  |  |  |                 presets['include'] = [os.path.relpath(path_boardpresets, root).replace(os.sep, '/')] | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  |                 with open(os.path.join(root, 'CMakePresets.json'), 'w') as f: | 
					
						
							|  |  |  |                     f.write('{}\n'.format(json.dumps(presets, indent=2))) | 
					
						
							|  |  |  |                 example_list.append(os.path.basename(root)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     print('Generating presets for the following examples:') | 
					
						
							|  |  |  |     print(example_list) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-09 18:40:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-09 00:04:16 +01:00
										 |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     main() |