tinyusb/tools/gen_presets.py
HiFiPhile 14f1feac84 Fix path.
Signed-off-by: HiFiPhile <admin@hifiphile.com>
2025-02-11 20:56:41 +01:00

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()