Skip to content

Commit dfed942

Browse files
author
Felipe Torrezan
authored
Update CMakePresets (#31)
This PR: - decouples toolchain selection (CX/BX) from CMakePresets. - Move build selection to outside the CMakeLists, following best practices.
1 parent 0317fa4 commit dfed942

18 files changed

Lines changed: 264 additions & 156 deletions

File tree

.github/workflows/iar.yml

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,56 @@ env:
1818
IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
1919

2020
jobs:
21-
build:
22-
name: Build
21+
build-ninja-multi:
22+
name: Build Ninja Multi-Config
2323
runs-on: ubuntu-24.04
2424
container:
2525
image: ghcr.io/iarsystems/riscv
2626
steps:
2727
- name: Invoke the IAR C/C++ Compiler for RISC-V
2828
run: iccriscv --version
2929
- name: Checkout project
30-
uses: actions/checkout@v4
31-
- name: CMake - Configure CXRISCV preset
32-
run: cmake --preset cxriscv
30+
uses: actions/checkout@v6
31+
- name: CMake - Configure Ninja Multi-Config preset
32+
run: cmake --preset ninja-multi
3333
- name: CMake - Build Debug preset
34-
run: cmake --build --preset debug --verbose
34+
run: cmake --build --preset debug-ninja-multi --verbose
3535
- name: CMake - Build Release preset
36-
run: cmake --build --preset release --verbose
36+
run: cmake --build --preset release-ninja-multi --verbose
3737
- name: CMake - Build Release With Debug Info preset
38-
run: cmake --build --preset relwithdebinfo --verbose
38+
run: cmake --build --preset relwithdebinfo-ninja-multi --verbose
3939
- name: CMake - Build Minimum Size Release preset
40-
run: cmake --build --preset minsizerel --verbose
40+
run: cmake --build --preset minsizerel-ninja-multi --verbose
41+
- name: CMake - Build Medium Speed preset
42+
run: cmake --build --preset medium-ninja-multi --verbose
4143
- name: CMake - Build High Speed preset
42-
run: cmake --build --preset highspeed --verbose
44+
run: cmake --build --preset highspeed-ninja-multi --verbose
4345
- name: CMake - Build Maximum Speed preset
44-
run: cmake --build --preset maxspeed --verbose
46+
run: cmake --build --preset maxspeed-ninja-multi --verbose
4547

48+
build-ninja:
49+
name: Build Ninja
50+
runs-on: ubuntu-24.04
51+
container:
52+
image: ghcr.io/iarsystems/riscv
53+
steps:
54+
- name: Invoke the IAR C/C++ Compiler for RISC-V
55+
run: iccriscv --version
56+
- name: Checkout project
57+
uses: actions/checkout@v6
58+
- name: CMake - Configure Ninja preset
59+
run: cmake --preset ninja
60+
- name: CMake - Build Debug preset
61+
run: cmake --build --preset debug-ninja --clean-first --verbose
62+
- name: CMake - Build Release preset
63+
run: cmake --build --preset release-ninja --clean-first --verbose
64+
- name: CMake - Build Release With Debug Info preset
65+
run: cmake --build --preset relwithdebinfo-ninja --clean-first --verbose
66+
- name: CMake - Build Minimum Size Release preset
67+
run: cmake --build --preset minsizerel-ninja --clean-first --verbose
68+
- name: CMake - Build Medium Speed preset
69+
run: cmake --build --preset medium-ninja --clean-first --verbose
70+
- name: CMake - Build High Speed preset
71+
run: cmake --build --preset highspeed-ninja --clean-first --verbose
72+
- name: CMake - Build Maximum Speed preset
73+
run: cmake --build --preset maxspeed-ninja --clean-first --verbose

CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ include(iar-cxriscv)
55

66
# Configure a CMake project
77
project(iar-gd32v-examples)
8+
9+
# Enable CTest
810
enable_testing()
911

12+
# Enable IAR C-STAT Static Analysis
13+
option(ENABLE_ICSTAT "Enable IAR C-STAT Static Analysis" OFF)
14+
if(ENABLE_ICSTAT)
15+
set(CMAKE_C_ICSTAT "${CMAKE_IAR_CSTAT}")
16+
set(CMAKE_CXX_ICSTAT "${CMAKE_IAR_CSTAT}")
17+
endif()
18+
19+
# Enable IAR Compiler extensions (-e)
20+
set(CMAKE_C_EXTENSIONS ON)
21+
set(CMAKE_CXX_EXTENSIONS ON)
22+
23+
# Set the TOOLKIT directory
24+
cmake_path(GET CMAKE_C_COMPILER PARENT_PATH BIN_DIR)
25+
cmake_path(GET BIN_DIR PARENT_PATH TOOLKIT_DIR)
26+
1027
add_subdirectory(examples)

CMakePresets.json

Lines changed: 151 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,96 +2,199 @@
22
"version": 10,
33
"configurePresets": [
44
{
5-
"name": "common",
5+
"name": "common-base",
66
"hidden": true,
7+
"binaryDir": "${sourceDir}/build",
78
"cacheVariables": {
8-
"CMAKE_EXPORT_COMPILE_COMMANDS":true
9+
"CMAKE_SYSTEM_NAME": {
10+
"type": "STRING",
11+
"value": "Generic"
12+
},
13+
"CMAKE_STATIC_LIBRARY_PREFIX": {
14+
"type": "STRING",
15+
"value": ""
16+
},
17+
"CMAKE_C_FLAGS_MEDIUM": {
18+
"type": "STRING",
19+
"value": "-Om -DNDEBUG"
20+
},
21+
"CMAKE_CXX_FLAGS_MEDIUM": {
22+
"type": "STRING",
23+
"value": "-Om -DNDEBUG"
24+
},
25+
"CMAKE_C_FLAGS_HIGHSPEED": {
26+
"type": "STRING",
27+
"value": "-Ohs -DNDEBUG"
28+
},
29+
"CMAKE_CXX_FLAGS_HIGHSPEED": {
30+
"type": "STRING",
31+
"value": "-Ohs -DNDEBUG"
32+
},
33+
"CMAKE_C_FLAGS_MAXSPEED": {
34+
"type": "STRING",
35+
"value": "-Ohs --no_size_constraints -DNDEBUG"
36+
},
37+
"CMAKE_CXX_FLAGS_MAXSPEED": {
38+
"type": "STRING",
39+
"value": "-Ohs --no_size_constraints -DNDEBUG"
40+
},
41+
"IAR_RT_LLIO_ARM": {
42+
"type": "STRING",
43+
"value": "--semihosting"
44+
},
45+
"IAR_RT_LLIO_RISCV": {
46+
"type": "STRING",
47+
"value": "--semihosting"
48+
},
49+
"IAR_RT_LLIO_RH850": {
50+
"type": "STRING",
51+
"value": "--debug_lib"
52+
},
53+
"IAR_RT_LLIO_RL78": {
54+
"type": "STRING",
55+
"value": "--debug_lib"
56+
},
57+
"IAR_RT_LLIO_RX": {
58+
"type": "STRING",
59+
"value": "--debug_lib"
60+
}
961
},
10-
"generator": "Ninja Multi-Config",
11-
"binaryDir": "${sourceDir}/build"
62+
"warnings": {
63+
"unusedCli": false
64+
}
1265
},
1366
{
14-
"name": "cxriscv",
15-
"displayName": "CXRISCV",
16-
"description": "Configure project for CXRISCV",
17-
"inherits": "common",
18-
"condition": {
19-
"type": "equals",
20-
"lhs": "${hostSystemName}",
21-
"rhs": "Linux"
22-
},
23-
"environment": {
24-
"CC": "/opt/iar/cxriscv/riscv/bin/iccriscv",
25-
"CXX": "/opt/iar/cxriscv/riscv/bin/iccriscv",
26-
"ASM": "/opt/iar/cxriscv/riscv/bin/iasmriscv"
27-
},
67+
"name": "ninja-multi",
68+
"inherits": "common-base",
69+
"displayName": "Ninja Multi-Config",
70+
"description": "Configure a CMake project using the Ninja Multi-Config Generator.",
71+
"generator": "Ninja Multi-Config",
2872
"cacheVariables": {
29-
"SELECTED_TOOL": "cxriscv",
30-
"TOOLKIT_DIR": "/opt/iar/cxriscv/riscv"
73+
"CMAKE_CONFIGURATION_TYPES": {
74+
"type": "STRING",
75+
"value": "Debug;Release;RelWithDebInfo;MinSizeRel;Medium;HighSpeed;MaxSpeed"
76+
},
77+
"CMAKE_PRESET_NAME": {
78+
"type": "STRING",
79+
"value": "ninja-multi"
80+
}
3181
}
3282
},
3383
{
34-
"name": "bxriscv",
35-
"displayName": "BXRISCV",
36-
"description": "Configure project for BXRISCV",
37-
"inherits": "common",
38-
"condition": {
39-
"type": "equals",
40-
"lhs": "${hostSystemName}",
41-
"rhs": "Linux"
42-
},
43-
"environment": {
44-
"CC": "/opt/iarsystems/bxriscv/riscv/bin/iccriscv",
45-
"CXX": "/opt/iarsystems/bxriscv/riscv/bin/iccriscv",
46-
"ASM": "/opt/iarsystems/bxriscv/riscv/bin/iasmriscv"
47-
},
84+
"name": "ninja",
85+
"inherits": "common-base",
86+
"displayName": "Ninja",
87+
"description": "Configure a CMake project using the Ninja Generator.",
88+
"generator": "Ninja",
4889
"cacheVariables": {
49-
"SELECTED_TOOL": "bxriscv",
50-
"TOOLKIT_DIR": "/opt/iarsystems/bxriscv/riscv"
90+
"CMAKE_BUILD_TYPE": {
91+
"type": "STRING",
92+
"value": "Debug"
93+
},
94+
"CMAKE_PRESET_NAME": {
95+
"type": "STRING",
96+
"value": "ninja-multi"
97+
}
5198
}
5299
}
53100
],
54101
"buildPresets": [
55102
{
56-
"name": "debug",
103+
"name": "debug-ninja-multi",
57104
"displayName": "Debug",
58105
"description": "Disable optimizations - include debug information.",
59-
"configurePreset": "cxriscv",
106+
"configurePreset": "ninja-multi",
60107
"configuration": "Debug"
61108
},
62109
{
63-
"name": "release",
110+
"name": "release-ninja-multi",
64111
"displayName": "Release",
65112
"description": "Optimize for speed - exclude debug information.",
66-
"configurePreset": "cxriscv",
113+
"configurePreset": "ninja-multi",
67114
"configuration": "Release"
68115
},
69116
{
70-
"name": "relwithdebinfo",
117+
"name": "relwithdebinfo-ninja-multi",
71118
"displayName": "RelWithDebInfo",
72119
"description": "Optimize for speed - include debug information.",
73-
"configurePreset": "cxriscv",
120+
"configurePreset": "ninja-multi",
74121
"configuration": "RelWithDebInfo"
75122
},
76123
{
77-
"name": "minsizerel",
124+
"name": "minsizerel-ninja-multi",
78125
"displayName": "MinSizeRel",
79126
"description": "Optimize for smallest binary size - exclude debug information.",
80-
"configurePreset": "cxriscv",
127+
"configurePreset": "ninja-multi",
81128
"configuration": "MinSizeRel"
82129
},
83130
{
84-
"name": "highspeed",
131+
"name": "medium-ninja-multi",
132+
"displayName": "Medium",
133+
"description": "Optimize for medium execution speed - exclude debug information.",
134+
"configurePreset": "ninja-multi",
135+
"configuration": "Medium"
136+
},
137+
{
138+
"name": "highspeed-ninja-multi",
139+
"displayName": "HighSpeed",
140+
"description": "Optimize for high execution speed - exclude debug information.",
141+
"configurePreset": "ninja-multi",
142+
"configuration": "HighSpeed"
143+
},
144+
{
145+
"name": "maxspeed-ninja-multi",
146+
"displayName": "MaxSpeed",
147+
"description": "Optimize for maximum execution speed - exclude debug information.",
148+
"configurePreset": "ninja-multi",
149+
"configuration": "MaxSpeed"
150+
},
151+
{
152+
"name": "debug-ninja",
153+
"displayName": "Debug",
154+
"description": "Disable optimizations - include debug information.",
155+
"configurePreset": "ninja",
156+
"configuration": "Debug"
157+
},
158+
{
159+
"name": "release-ninja",
160+
"displayName": "Release",
161+
"description": "Optimize for speed - exclude debug information.",
162+
"configurePreset": "ninja",
163+
"configuration": "Release"
164+
},
165+
{
166+
"name": "relwithdebinfo-ninja",
167+
"displayName": "RelWithDebInfo",
168+
"description": "Optimize for speed - include debug information.",
169+
"configurePreset": "ninja",
170+
"configuration": "RelWithDebInfo"
171+
},
172+
{
173+
"name": "minsizerel-ninja",
174+
"displayName": "MinSizeRel",
175+
"description": "Optimize for smallest binary size - exclude debug information.",
176+
"configurePreset": "ninja",
177+
"configuration": "MinSizeRel"
178+
},
179+
{
180+
"name": "medium-ninja",
181+
"displayName": "Medium",
182+
"description": "Optimize for medium execution speed - exclude debug information.",
183+
"configurePreset": "ninja",
184+
"configuration": "Medium"
185+
},
186+
{
187+
"name": "highspeed-ninja",
85188
"displayName": "HighSpeed",
86189
"description": "Optimize for high execution speed - exclude debug information.",
87-
"configurePreset": "cxriscv",
190+
"configurePreset": "ninja",
88191
"configuration": "HighSpeed"
89192
},
90193
{
91-
"name": "maxspeed",
194+
"name": "maxspeed-ninja",
92195
"displayName": "MaxSpeed",
93196
"description": "Optimize for maximum execution speed - exclude debug information.",
94-
"configurePreset": "cxriscv",
197+
"configurePreset": "ninja",
95198
"configuration": "MaxSpeed"
96199
}
97200
]

0 commit comments

Comments
 (0)