summaryrefslogtreecommitdiff
path: root/tools/gen_presets.py
blob: 94b8d16b04949624162b7c10560d59e28fd81508 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/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()