Skip to content

Commit bda9eec

Browse files
Add compiler version checks for C++23 modules support
1 parent 9c7928c commit bda9eec

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

CMakeLists.txt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,46 @@ set(CMAKE_VERSION_MINIMUM 3.31)
22
cmake_minimum_required(VERSION ${CMAKE_VERSION_MINIMUM})
33
message(STATUS "Cmake version: ${CMAKE_VERSION} (>= ${CMAKE_VERSION_MINIMUM} ✓)")
44

5+
# Compiler version check
6+
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
7+
if (WIN32)
8+
message(FATAL_ERROR
9+
"Detected the use of MinGW GCC compiler on Windows.\n"
10+
"MinGW GCC has serious compatibility issues with C++23 modules (import std).\n"
11+
"Please switch to Clang (such as llvm-mingw) or MSVC for compilation."
12+
)
13+
endif ()
14+
set(COMPILER_GCC_VERSION_MINIMUM 14.0)
15+
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_GCC_VERSION_MINIMUM})
16+
message(FATAL_ERROR
17+
"GCC version too old for C++ Modules.\n"
18+
"GCC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_GCC_VERSION_MINIMUM} X)"
19+
)
20+
else()
21+
message(STATUS "GCC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_GCC_VERSION_MINIMUM} ✓)")
22+
endif()
23+
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
24+
set(COMPILER_CLANG_VERSION_MINIMUM 17.0)
25+
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_CLANG_VERSION_MINIMUM})
26+
message(FATAL_ERROR
27+
"Clang version too old for C++ Modules.\n"
28+
"Clang version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_CLANG_VERSION_MINIMUM} X)"
29+
)
30+
else()
31+
message(STATUS "Clang version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_CLANG_VERSION_MINIMUM} ✓)")
32+
endif()
33+
elseif (MSVC)
34+
set(COMPILER_MSVC_VERSION_MINIMUM 1934)
35+
if (MSVC_VERSION LESS ${COMPILER_MSVC_VERSION_MINIMUM})
36+
message(FATAL_ERROR
37+
"MSVC version too old for C++ Modules.\n"
38+
"MSVC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_MSVC_VERSION_MINIMUM} X)"
39+
)
40+
else()
41+
message(STATUS "MSVC version: ${MSVC_VERSION} (>= ${COMPILER_MSVC_VERSION_MINIMUM} ✓)")
42+
endif()
43+
endif()
44+
545
# https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst
646
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457")
747
set(CMAKE_CXX_STANDARD 23)

0 commit comments

Comments
 (0)