106 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
import os
 | 
						|
import json
 | 
						|
from pathlib import Path
 | 
						|
 | 
						|
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",
 | 
						|
         "generator": "Ninja Multi-Config",
 | 
						|
         "binaryDir": r"${sourceDir}/build/${presetName}",
 | 
						|
         "cacheVariables": {
 | 
						|
             "CMAKE_DEFAULT_BUILD_TYPE": "RelWithDebInfo",
 | 
						|
             "BOARD": r"${presetName}"
 | 
						|
         }}]
 | 
						|
 | 
						|
    presets['configurePresets'].extend(
 | 
						|
        sorted(
 | 
						|
            [
 | 
						|
                {
 | 
						|
                    'name': board,
 | 
						|
                    'inherits': 'default'
 | 
						|
                }
 | 
						|
                for board in board_list
 | 
						|
            ], key=lambda x: x['name']
 | 
						|
        )
 | 
						|
    )
 | 
						|
 | 
						|
    # Build presets
 | 
						|
    # no inheritance since 'name' doesn't support macro expansion
 | 
						|
    presets['buildPresets'] = sorted(
 | 
						|
        [
 | 
						|
            {
 | 
						|
                'name': board,
 | 
						|
                'description': "Build preset for the " + board + " board",
 | 
						|
                'configurePreset': board
 | 
						|
            }
 | 
						|
            for board in board_list
 | 
						|
        ], key=lambda x: x['name']
 | 
						|
    )
 | 
						|
 | 
						|
    # Workflow presets
 | 
						|
    presets['workflowPresets'] = sorted(
 | 
						|
        [
 | 
						|
            {
 | 
						|
                "name": board,
 | 
						|
                "steps": [
 | 
						|
                    {
 | 
						|
                        "type": "configure",
 | 
						|
                        "name": board
 | 
						|
                    },
 | 
						|
                    {
 | 
						|
                        "type": "build",
 | 
						|
                        "name": board
 | 
						|
                    }
 | 
						|
                ]
 | 
						|
            }
 | 
						|
            for board in board_list
 | 
						|
        ], key=lambda x: x['name']
 | 
						|
    )
 | 
						|
 | 
						|
    path_boardpresets = "hw/bsp/BoardPresets.json"
 | 
						|
    with open(path_boardpresets, "w") as f:
 | 
						|
        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:
 | 
						|
            # 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, '/')]
 | 
						|
                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)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |