diff --git a/cMake/FreeCAD_Helpers/CompilerChecksAndSetups.cmake b/cMake/FreeCAD_Helpers/CompilerChecksAndSetups.cmake index 75dec9bf1f..4de75d8dea 100644 --- a/cMake/FreeCAD_Helpers/CompilerChecksAndSetups.cmake +++ b/cMake/FreeCAD_Helpers/CompilerChecksAndSetups.cmake @@ -28,26 +28,24 @@ macro(CompilerChecksAndSetups) OUTPUT_VARIABLE CMAKE_CXX_COMPILER_VERSION) endif(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_CXX_COMPILER_VERSION) - # Enabled C++17 for Freecad 0.20 and later - set(BUILD_ENABLE_CXX_STD "C++17" CACHE STRING "Enable C++ standard") + # Enabled C++20 for Freecad 1.1 and later + set(BUILD_ENABLE_CXX_STD "C++20" CACHE STRING "Enable C++ standard") set_property(CACHE BUILD_ENABLE_CXX_STD PROPERTY STRINGS - "C++17" "C++20" + "C++23" ) - if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3) - message(FATAL_ERROR "FreeCAD 0.20 and later requires C++17. G++ must be 7.3 or later, the used version is ${CMAKE_CXX_COMPILER_VERSION}") - elseif(CMAKE_COMPILER_IS_CLANGXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.0) - message(FATAL_ERROR "FreeCAD 0.20 and later requires C++17. Clang must be 6.0 or later, the used version is ${CMAKE_CXX_COMPILER_VERSION}") - endif() + if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.2) + message(FATAL_ERROR "FreeCAD 1.1 and later requires C++20. G++ must be 11.2 or later, the used version is ${CMAKE_CXX_COMPILER_VERSION}") + elseif(CMAKE_COMPILER_IS_CLANGXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14.0) + message(FATAL_ERROR "FreeCAD 1.1 and later requires C++20. Clang must be 14.0 or later, the used version is ${CMAKE_CXX_COMPILER_VERSION}") + endif() # Escape the two plus chars as otherwise cmake complains about invalid regex if(${BUILD_ENABLE_CXX_STD} MATCHES "C\\+\\+23") set(CMAKE_CXX_STANDARD 23) - elseif(${BUILD_ENABLE_CXX_STD} MATCHES "C\\+\\+20") + else() set(CMAKE_CXX_STANDARD 20) - else()#Enabled C++17 - set(CMAKE_CXX_STANDARD 17) endif() # Log the compiler and version