mirror of
https://github.com/Kitware/CMake.git
synced 2026-06-30 19:57:41 +00:00
CMakeDetermineCompilerSupport: support skipping compiler feature checks
This commit is contained in:
@@ -5,6 +5,27 @@
|
||||
function(cmake_determine_compiler_support lang)
|
||||
|
||||
if("x${lang}" STREQUAL "xC" AND COMMAND cmake_record_c_compile_features)
|
||||
set(compile_feature_vars
|
||||
CMAKE_C_COMPILE_FEATURES
|
||||
CMAKE_C90_COMPILE_FEATURES
|
||||
CMAKE_C99_COMPILE_FEATURES
|
||||
CMAKE_C11_COMPILE_FEATURES
|
||||
CMAKE_C17_COMPILE_FEATURES
|
||||
CMAKE_C23_COMPILE_FEATURES
|
||||
)
|
||||
set(all_defined 1)
|
||||
set(any_non_empty 0)
|
||||
foreach (var IN LISTS compile_feature_vars)
|
||||
if (NOT DEFINED "${var}")
|
||||
set(all_defined 0)
|
||||
elseif (${var})
|
||||
set(any_non_empty 1)
|
||||
endif ()
|
||||
endforeach ()
|
||||
if (all_defined AND any_non_empty)
|
||||
return ()
|
||||
endif ()
|
||||
|
||||
message(CHECK_START "Detecting ${lang} compile features")
|
||||
|
||||
set(CMAKE_C90_COMPILE_FEATURES)
|
||||
@@ -55,55 +76,81 @@ function(cmake_determine_compiler_support lang)
|
||||
message(CHECK_PASS "done")
|
||||
|
||||
elseif("x${lang}" STREQUAL "xCXX" AND COMMAND cmake_record_cxx_compile_features)
|
||||
message(CHECK_START "Detecting ${lang} compile features")
|
||||
set(compile_feature_vars
|
||||
CMAKE_CXX_COMPILE_FEATURES
|
||||
CMAKE_CXX98_COMPILE_FEATURES
|
||||
CMAKE_CXX11_COMPILE_FEATURES
|
||||
CMAKE_CXX14_COMPILE_FEATURES
|
||||
CMAKE_CXX17_COMPILE_FEATURES
|
||||
CMAKE_CXX20_COMPILE_FEATURES
|
||||
CMAKE_CXX23_COMPILE_FEATURES
|
||||
CMAKE_CXX26_COMPILE_FEATURES
|
||||
)
|
||||
set(all_defined 1)
|
||||
set(any_non_empty 0)
|
||||
foreach (var IN LISTS compile_feature_vars)
|
||||
if (NOT DEFINED "${var}")
|
||||
set(all_defined 0)
|
||||
elseif (${var})
|
||||
set(any_non_empty 1)
|
||||
endif ()
|
||||
endforeach ()
|
||||
set(need_feature_detection 1)
|
||||
if (all_defined AND any_non_empty)
|
||||
set(need_feature_detection 0)
|
||||
endif ()
|
||||
|
||||
set(CMAKE_CXX98_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX11_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX14_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX17_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX20_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX23_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX26_COMPILE_FEATURES)
|
||||
if (need_feature_detection)
|
||||
message(CHECK_START "Detecting ${lang} compile features")
|
||||
|
||||
include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
|
||||
set(CMAKE_CXX98_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX11_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX14_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX17_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX20_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX23_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX26_COMPILE_FEATURES)
|
||||
|
||||
cmake_record_cxx_compile_features()
|
||||
include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
|
||||
|
||||
if(NOT _result EQUAL 0)
|
||||
message(CHECK_FAIL "failed")
|
||||
return()
|
||||
endif()
|
||||
cmake_record_cxx_compile_features()
|
||||
|
||||
if (CMAKE_CXX23_COMPILE_FEATURES AND CMAKE_CXX26_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX26_COMPILE_FEATURES ${CMAKE_CXX23_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX20_COMPILE_FEATURES AND CMAKE_CXX23_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX17_COMPILE_FEATURES AND CMAKE_CXX20_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX14_COMPILE_FEATURES AND CMAKE_CXX17_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX11_COMPILE_FEATURES AND CMAKE_CXX14_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX98_COMPILE_FEATURES AND CMAKE_CXX11_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES})
|
||||
endif()
|
||||
if(NOT _result EQUAL 0)
|
||||
message(CHECK_FAIL "failed")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX_COMPILE_FEATURES
|
||||
${CMAKE_CXX98_COMPILE_FEATURES}
|
||||
${CMAKE_CXX11_COMPILE_FEATURES}
|
||||
${CMAKE_CXX14_COMPILE_FEATURES}
|
||||
${CMAKE_CXX17_COMPILE_FEATURES}
|
||||
${CMAKE_CXX20_COMPILE_FEATURES}
|
||||
${CMAKE_CXX23_COMPILE_FEATURES}
|
||||
${CMAKE_CXX26_COMPILE_FEATURES}
|
||||
)
|
||||
endif()
|
||||
if (CMAKE_CXX23_COMPILE_FEATURES AND CMAKE_CXX26_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX26_COMPILE_FEATURES ${CMAKE_CXX23_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX20_COMPILE_FEATURES AND CMAKE_CXX23_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX17_COMPILE_FEATURES AND CMAKE_CXX20_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX14_COMPILE_FEATURES AND CMAKE_CXX17_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX11_COMPILE_FEATURES AND CMAKE_CXX14_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_CXX98_COMPILE_FEATURES AND CMAKE_CXX11_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES})
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX_COMPILE_FEATURES
|
||||
${CMAKE_CXX98_COMPILE_FEATURES}
|
||||
${CMAKE_CXX11_COMPILE_FEATURES}
|
||||
${CMAKE_CXX14_COMPILE_FEATURES}
|
||||
${CMAKE_CXX17_COMPILE_FEATURES}
|
||||
${CMAKE_CXX20_COMPILE_FEATURES}
|
||||
${CMAKE_CXX23_COMPILE_FEATURES}
|
||||
${CMAKE_CXX26_COMPILE_FEATURES}
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# Find the module metadata for import std
|
||||
set(CMAKE_CXX_COMPILER_IMPORT_STD "")
|
||||
@@ -121,16 +168,18 @@ function(cmake_determine_compiler_support lang)
|
||||
set(CMAKE_CXX_STDLIB_MODULES_JSON ${CMAKE_CXX_STDLIB_MODULES_JSON} PARENT_SCOPE)
|
||||
set(CMAKE_CXX_COMPILER_IMPORT_STD_ERROR_MESSAGE "${CMAKE_CXX_COMPILER_IMPORT_STD_ERROR_MESSAGE}" PARENT_SCOPE)
|
||||
|
||||
set(CMAKE_CXX_COMPILE_FEATURES ${CMAKE_CXX_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX98_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX23_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX26_COMPILE_FEATURES ${CMAKE_CXX26_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
if (need_feature_detection)
|
||||
set(CMAKE_CXX_COMPILE_FEATURES ${CMAKE_CXX_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX98_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX23_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_CXX26_COMPILE_FEATURES ${CMAKE_CXX26_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
|
||||
message(CHECK_PASS "done")
|
||||
message(CHECK_PASS "done")
|
||||
endif ()
|
||||
|
||||
elseif("x${lang}" STREQUAL "xCUDA" AND COMMAND cmake_record_cuda_compile_features)
|
||||
message(CHECK_START "Detecting ${lang} compile features")
|
||||
|
||||
Reference in New Issue
Block a user