Skip to content

Commit 2ecdb07

Browse files
committed
Upgrade CI to use cmake v4.2 or newer
Fix: ci.yml for Darwin with llvm-21 Fix: cmake --install within ci-sanitizer before test
1 parent e896333 commit 2ecdb07

File tree

8 files changed

+82
-49
lines changed

8 files changed

+82
-49
lines changed

.github/workflows/ci.yml

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ name: Continuous Integration
22

33
on:
44
push:
5-
branches:
6-
- master
7-
- develop
8-
5+
branches: [ main, develop ]
96
pull_request:
10-
branches:
11-
- develop
7+
branches: [ develop ]
8+
workflow_dispatch:
9+
schedule:
10+
- cron: "30 15 * * 0" # Every Sunday at 15:30 UTC
11+
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.ref }}
14+
cancel-in-progress: true
1215

1316
jobs:
1417
lint:
@@ -47,9 +50,9 @@ jobs:
4750
steps:
4851
- uses: actions/checkout@v4
4952

50-
- name: Install LCov
51-
run: sudo apt-get update -q
52-
&& sudo apt-get install lcov -q -y
53+
# - name: Install LCov
54+
# run: sudo apt-get update -q
55+
# && sudo apt-get install lcov -q -y
5356

5457
- name: Install Python
5558
uses: actions/setup-python@v5
@@ -62,7 +65,7 @@ jobs:
6265
vcvarsall: ${{ contains(matrix.os, 'windows') }}
6366
clangformat: true
6467
clangtidy: true
65-
cmake: 4.0.4
68+
cmake: 4.2.0
6669
ninja: 1.13.0
6770
gcovr: true
6871

@@ -73,8 +76,9 @@ jobs:
7376
run: cmake --build build/coverage -j 2
7477

7578
- name: Test
76-
working-directory: build/coverage
77-
run: ctest --output-on-failure --no-tests=error -j 2
79+
run: |
80+
cmake --install build/coverage --prefix $PWD/stagedir
81+
ctest --test-dir build/coverage --output-on-failure --no-tests=error -j 2
7882
7983
- name: Process coverage info
8084
# run: cmake --build build/coverage -t coverage
@@ -106,7 +110,7 @@ jobs:
106110
vcvarsall: ${{ contains(matrix.os, 'windows') }}
107111
clangformat: true
108112
clangtidy: true
109-
cmake: 4.0.4
113+
cmake: 4.2.0
110114
ninja: 1.13.0
111115
gcovr: true
112116

@@ -117,15 +121,16 @@ jobs:
117121
run: cmake --build build/sanitize -j 2
118122

119123
- name: Test
120-
working-directory: build/sanitize
121124
env:
122125
ASAN_OPTIONS: "strict_string_checks=1:\
123126
detect_stack_use_after_return=1:\
124127
check_initialization_order=1:\
125128
strict_init_order=1:\
126129
detect_leaks=1"
127130
UBSAN_OPTIONS: print_stacktrace=1
128-
run: ctest --output-on-failure --no-tests=error -j 2
131+
run: |
132+
cmake --install build/sanitize --prefix $PWD/stagedir
133+
ctest --test-dir build/sanitize --output-on-failure --no-tests=error -j 2
129134
130135
test:
131136
needs: [lint]
@@ -158,12 +163,12 @@ jobs:
158163
uses: actions/setup-python@v5
159164
with: { python-version: "3.13" }
160165

161-
- name: Install llvm-20
166+
- name: Install llvm
162167
if: matrix.os == 'macos-15'
163168
run: |
164169
brew install gcovr cmake ninja llvm
165-
export PATH=$(brew --prefix llvm@20)/bin:$PATH && echo "PATH=$PATH" >> $GITHUB_ENV
166-
export LDFLAGS=-L$(brew --prefix llvm@20)/lib/c++ -lc++abi -lc++ && echo "LDFLAGS=$LDFLAGS" >> $GITHUB_ENV
170+
export PATH=$(brew --prefix llvm)/bin:$PATH && echo "PATH=$PATH" >> $GITHUB_ENV
171+
export LDFLAGS=-L$(brew --prefix llvm)/lib/c++ -lc++abi -lc++ && echo "LDFLAGS=$LDFLAGS" >> $GITHUB_ENV
167172
echo "CXX=clang++" >> $GITHUB_ENV
168173
169174
- name: Setup Cpp
@@ -174,7 +179,7 @@ jobs:
174179
vcvarsall: ${{ contains(matrix.os, 'windows') }}
175180
clangformat: true
176181
clangtidy: true
177-
cmake: 4.0.3
182+
cmake: 4.2.0
178183
ninja: 1.13.0
179184
gcovr: true
180185

.github/workflows/clang.yml

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ on:
77
branches: [ develop ]
88
workflow_dispatch:
99
schedule:
10-
- cron: '30 15 * * 6'
10+
- cron: "30 15 * * 0" # Every Sunday at 15:30 UTC
11+
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.ref }}
14+
cancel-in-progress: true
1115

1216
jobs:
1317
clang:
@@ -18,8 +22,8 @@ jobs:
1822

1923
runs-on: ubuntu-latest
2024

21-
# container:
22-
# image: ghcr.io/mattkretz/cplusplus-ci/clang${{ matrix.version }}
25+
container:
26+
image: ghcr.io/mattkretz/cplusplus-ci/clang${{ matrix.version }}
2327

2428
steps:
2529
- uses: actions/checkout@v4
@@ -30,14 +34,16 @@ jobs:
3034
- name: Setup Cpp
3135
uses: aminya/setup-cpp@v1
3236
with:
33-
compiler: llvm-${{ matrix.version }}
34-
cmake: 4.0.4
37+
# compiler: llvm-${{ matrix.version }}
38+
cmake: 4.2.0
3539
ninja: 1.13.0
3640
gcovr: true
3741

3842
- name: Run test suite
39-
# env:
40-
# CXX: clang++-${{ matrix.version }}
43+
env:
44+
# CXX: clang++-${{ matrix.version }}
45+
CXX: clang++
46+
PATH: $HOME/.local/bin:$PATH
4147
run: |
42-
export PATH=$HOME/.local/bin:$PATH
48+
# export PATH=$HOME/.local/bin:$PATH
4349
make check

.github/workflows/gcc.yml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ on:
77
branches: [ develop ]
88
workflow_dispatch:
99
schedule:
10-
- cron: '30 15 * * 6'
10+
- cron: "30 15 * * 0" # Every Sunday at 15:30 UTC
11+
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.ref }}
14+
cancel-in-progress: true
1115

1216
jobs:
1317
gcc:
@@ -30,12 +34,15 @@ jobs:
3034
- name: Setup Cpp
3135
uses: aminya/setup-cpp@v1
3236
with:
33-
cmake: 4.0.4
37+
cmake: 4.2.0
3438
ninja: 1.13.0
3539
gcovr: true
3640

3741
- name: Run test suite
3842
env:
43+
# CXX: g++-${{ matrix.version }}
3944
CXX: g++
4045
PATH: $HOME/.local/bin:$PATH
41-
run: make check
46+
run: |
47+
# export PATH=$HOME/.local/bin:$PATH
48+
make check

CMakePresets.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@
168168
"hidden": true,
169169
"cacheVariables": {
170170
"ENABLE_COVERAGE": true,
171-
"CMAKE_SKIP_INSTALL_RULES": true,
171+
"CMAKE_SKIP_INSTALL_RULES": false,
172172
"CMAKE_BUILD_TYPE": "Coverage",
173173
"CMAKE_CXX_FLAGS_COVERAGE":
174174
"-Og -g --coverage -fkeep-inline-functions -fkeep-static-functions",
@@ -186,7 +186,7 @@
186186
"hidden": true,
187187
"cacheVariables": {
188188
"ENABLE_COVERAGE": true,
189-
"CMAKE_SKIP_INSTALL_RULES": true,
189+
"CMAKE_SKIP_INSTALL_RULES": false,
190190
"CMAKE_BUILD_TYPE": "Coverage",
191191
"CMAKE_CXX_FLAGS_COVERAGE": "-Og -g --coverage",
192192
"CMAKE_EXE_LINKER_FLAGS_COVERAGE": "--coverage",
@@ -203,7 +203,7 @@
203203
"hidden": true,
204204
"cacheVariables": {
205205
"ENABLE_COVERAGE": true,
206-
"CMAKE_SKIP_INSTALL_RULES": true,
206+
"CMAKE_SKIP_INSTALL_RULES": false,
207207
"CMAKE_BUILD_TYPE": "Coverage",
208208
"CMAKE_CXX_FLAGS_COVERAGE": "-Og -g --coverage",
209209
"CMAKE_EXE_LINKER_FLAGS_COVERAGE": "--coverage",
@@ -231,7 +231,7 @@
231231
],
232232
"description": "This build is only available on Linux",
233233
"cacheVariables": {
234-
"CMAKE_SKIP_INSTALL_RULES": true,
234+
"CMAKE_SKIP_INSTALL_RULES": false,
235235
"CMAKE_BUILD_TYPE": "Sanitize",
236236
"CMAKE_CONFIGURATION_TYPES": "Sanitize",
237237
"CMAKE_CXX_FLAGS_SANITIZE":

cmake/cxx-modules-rules.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ if(CMAKE_GENERATOR STREQUAL "Ninja")
2828
AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0
2929
)
3030
set(ALGO_USE_MODULES ON)
31-
string(APPEND CMAKE_CXX_MODULE_MAP_FLAG " -fmodules-reduced-bmi")
31+
32+
if(NOT LINUX)
33+
string(APPEND CMAKE_CXX_MODULE_MAP_FLAG " -fmodules-reduced-bmi")
34+
endif()
3235

3336
add_compile_options($ENV{CXXFLAGS})
3437
add_link_options($ENV{CXXFLAGS})

cmake/prelude.cmake

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,28 @@ if($ENV{CXX} MATCHES "clang" OR CMAKE_CXX_COMPILER MATCHES "clang")
3636
add_link_options(-L${LLVM_DIR}/lib/c++)
3737
include_directories(SYSTEM ${LLVM_DIR}/include)
3838

39-
if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2)
40-
set(CMAKE_CXX_STDLIB_MODULES_JSON
41-
${LLVM_DIR}/lib/c++/libc++.modules.json
42-
)
43-
# gersemi: off
44-
set(CACHE{CMAKE_CXX_STDLIB_MODULES_JSON}
45-
TYPE FILEPATH
46-
VALUE ${CMAKE_CXX_STDLIB_MODULES_JSON}
47-
HELP "Result of: clang++ -print-file-name=c++/libc++.modules.json"
48-
)
49-
# gersemi: on
50-
endif()
39+
set(CMAKE_CXX_STDLIB_MODULES_JSON
40+
${LLVM_DIR}/lib/c++/libc++.modules.json
41+
)
42+
elseif(LINUX)
43+
execute_process(
44+
OUTPUT_VARIABLE LLVM_MODULES
45+
COMMAND clang++ -print-file-name=c++/libc++.modules.json
46+
COMMAND_ECHO STDOUT
47+
OUTPUT_STRIP_TRAILING_WHITESPACE
48+
)
49+
file(REAL_PATH ${LLVM_MODULES} CMAKE_CXX_STDLIB_MODULES_JSON)
50+
message(
51+
STATUS
52+
"CMAKE_CXX_STDLIB_MODULES_JSON=${CMAKE_CXX_STDLIB_MODULES_JSON}"
53+
)
5154
endif()
55+
56+
# gersemi: off
57+
set(CACHE{CMAKE_CXX_STDLIB_MODULES_JSON}
58+
TYPE FILEPATH
59+
VALUE ${CMAKE_CXX_STDLIB_MODULES_JSON}
60+
HELP "Result of: clang++ -print-file-name=c++/libc++.modules.json"
61+
)
62+
# gersemi: on
5263
endif()

example/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ if(ALGO_USE_MODULES)
2525
add_test(NAME app-tests COMMAND app)
2626
endif()
2727

28-
if(NOT PROJECT_IS_TOP_LEVEL)
28+
if(NOT PROJECT_IS_TOP_LEVEL AND CMAKE_BUILD_TYPE STREQUAL Release)
2929
# test if the targets are usable from the install directory
3030
add_test(
3131
NAME install-to-stagedir
@@ -48,6 +48,7 @@ if(NOT PROJECT_IS_TOP_LEVEL)
4848
--build-options #
4949
"-D CMAKE_BUILD_TYPE=$<CONFIG>"
5050
"-D CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
51+
"-D CMAKE_CXX_STDLIB_MODULES_JSON=${CMAKE_CXX_STDLIB_MODULES_JSON}"
5152
"-D CMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
5253
"-D CMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/stagedir"
5354
)

test/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.28...4.2)
1+
cmake_minimum_required(VERSION 3.30...4.2)
22

33
project(cmake-init-modulesTests LANGUAGES CXX)
44

0 commit comments

Comments
 (0)