From 87ce62f8ace455495f1894911f8fabe962d35317 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Tue, 18 Feb 2025 20:32:55 -0600 Subject: [PATCH] CMake: Update compiler and standard mins --- .../CompilerChecksAndSetups.cmake | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) 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