Merge topic 'cxx26_fix'

f21dbf8f26 C++26: Fix C++/CUDA/HIP compile feature support
c7cbe57e1f Clang: Fix detection of C++26 when targeting MSVC ABI

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9372
This commit is contained in:
Brad King
2024-04-09 12:47:01 +00:00
committed by Kitware Robot
13 changed files with 39 additions and 9 deletions
@@ -1,6 +1,6 @@
if("$ENV{CMAKE_CI_BUILD_NAME}" MATCHES "(^|_)gnu(_|$)")
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23;26" CACHE STRING "")
else()
# FIXME: Implement C23 and C++23 support for clang-cl.
set(CMake_TEST_C_STANDARDS "90;99;11;17" CACHE STRING "")
+1 -1
View File
@@ -37,7 +37,7 @@ The features known to this version of CMake are:
Compiler mode is at least CUDA/C++ 23.
``cuda_std_26``
.. versionadded:: 3.25
.. versionadded:: 3.30
Compiler mode is at least CUDA/C++ 26.
+1 -1
View File
@@ -47,7 +47,7 @@ but it does not necessarily imply complete conformance to that standard.
Compiler mode is at least C++ 23.
``cxx_std_26``
.. versionadded:: 3.25
.. versionadded:: 3.30
Compiler mode is at least C++ 26.
+1 -3
View File
@@ -27,9 +27,7 @@ Presets
Languages
---------
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of C++26, and defines a ``cxx_std_26`` meta-feature.
C++26 compiler modes may also be specified via the :prop_tgt:`CXX_STANDARD`,
* C++26 compiler modes may now be specified via the :prop_tgt:`CXX_STANDARD`,
:prop_tgt:`CUDA_STANDARD`, :prop_tgt:`HIP_STANDARD`,
or :prop_tgt:`OBJCXX_STANDARD` target properties.
+8
View File
@@ -0,0 +1,8 @@
cxx-26
------
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
now implements support for the ``cxx_std_26`` and ``cuda_std_26``
meta-features to indicate that the compiler mode must be at least C++26.
These meta-features were first documented by CMake 3.25, but were not fully
implemented.
+1
View File
@@ -14,6 +14,7 @@ set(CMAKE_CUDA14_COMPILE_FEATURES "@CMAKE_CUDA14_COMPILE_FEATURES@")
set(CMAKE_CUDA17_COMPILE_FEATURES "@CMAKE_CUDA17_COMPILE_FEATURES@")
set(CMAKE_CUDA20_COMPILE_FEATURES "@CMAKE_CUDA20_COMPILE_FEATURES@")
set(CMAKE_CUDA23_COMPILE_FEATURES "@CMAKE_CUDA23_COMPILE_FEATURES@")
set(CMAKE_CUDA26_COMPILE_FEATURES "@CMAKE_CUDA26_COMPILE_FEATURES@")
set(CMAKE_CUDA_PLATFORM_ID "@CMAKE_CUDA_PLATFORM_ID@")
set(CMAKE_CUDA_SIMULATE_ID "@CMAKE_CUDA_SIMULATE_ID@")
+1
View File
@@ -13,6 +13,7 @@ set(CMAKE_CXX14_COMPILE_FEATURES "@CMAKE_CXX14_COMPILE_FEATURES@")
set(CMAKE_CXX17_COMPILE_FEATURES "@CMAKE_CXX17_COMPILE_FEATURES@")
set(CMAKE_CXX20_COMPILE_FEATURES "@CMAKE_CXX20_COMPILE_FEATURES@")
set(CMAKE_CXX23_COMPILE_FEATURES "@CMAKE_CXX23_COMPILE_FEATURES@")
set(CMAKE_CXX26_COMPILE_FEATURES "@CMAKE_CXX26_COMPILE_FEATURES@")
set(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@")
set(CMAKE_CXX_SIMULATE_ID "@CMAKE_CXX_SIMULATE_ID@")
+5 -1
View File
@@ -57,7 +57,11 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
# define CXX_STD CXX_STD_98
# endif
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
# define CXX_STD _MSVC_LANG
# if _MSVC_LANG > __cplusplus
# define CXX_STD _MSVC_LANG
# else
# define CXX_STD __cplusplus
# endif
#elif defined(__NVCOMPILER)
# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
# define CXX_STD CXX_STD_20
+1
View File
@@ -12,6 +12,7 @@ set(CMAKE_HIP14_COMPILE_FEATURES "@CMAKE_HIP14_COMPILE_FEATURES@")
set(CMAKE_HIP17_COMPILE_FEATURES "@CMAKE_HIP17_COMPILE_FEATURES@")
set(CMAKE_HIP20_COMPILE_FEATURES "@CMAKE_HIP20_COMPILE_FEATURES@")
set(CMAKE_HIP23_COMPILE_FEATURES "@CMAKE_HIP23_COMPILE_FEATURES@")
set(CMAKE_HIP26_COMPILE_FEATURES "@CMAKE_HIP26_COMPILE_FEATURES@")
set(CMAKE_HIP_PLATFORM_ID "@CMAKE_HIP_PLATFORM_ID@")
set(CMAKE_HIP_SIMULATE_ID "@CMAKE_HIP_SIMULATE_ID@")
@@ -105,6 +105,9 @@ endmacro()
# Define to allow compile features to be automatically determined
macro(cmake_record_cxx_compile_features)
set(_result 0)
if(_result EQUAL 0 AND DEFINED CMAKE_CXX26_STANDARD_COMPILE_OPTION)
_has_compiler_features_cxx(26)
endif()
if(_result EQUAL 0 AND DEFINED CMAKE_CXX23_STANDARD_COMPILE_OPTION)
_has_compiler_features_cxx(23)
endif()
@@ -142,6 +145,9 @@ endmacro()
macro(cmake_record_cuda_compile_features)
set(_result 0)
if(_result EQUAL 0 AND DEFINED CMAKE_CUDA26_STANDARD_COMPILE_OPTION)
_has_compiler_features_cuda(26)
endif()
if(_result EQUAL 0 AND DEFINED CMAKE_CUDA23_STANDARD_COMPILE_OPTION)
_has_compiler_features_cuda(23)
endif()
@@ -179,6 +185,9 @@ endmacro()
macro(cmake_record_hip_compile_features)
set(_result 0)
if(_result EQUAL 0 AND DEFINED CMAKE_HIP26_STANDARD_COMPILE_OPTION)
_has_compiler_features_hip(26)
endif()
if(_result EQUAL 0 AND DEFINED CMAKE_HIP23_STANDARD_COMPILE_OPTION)
_has_compiler_features_hip(23)
endif()
+1 -1
View File
@@ -7,7 +7,7 @@ project(CompileFeatures)
set(ext_C c)
set(ext_CXX cpp)
set(std_C 90 99 11 17 23)
set(std_CXX 98 11 14 17 20 23)
set(std_CXX 98 11 14 17 20 23 26)
foreach(lang C CXX)
foreach(std IN LISTS std_${lang})
+5 -1
View File
@@ -22,7 +22,11 @@
# define CXX_STD CXX_STD_98
# endif
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
# define CXX_STD _MSVC_LANG
# if _MSVC_LANG > __cplusplus
# define CXX_STD _MSVC_LANG
# else
# define CXX_STD __cplusplus
# endif
#elif defined(__NVCOMPILER)
# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
# define CXX_STD CXX_STD_20
+4
View File
@@ -0,0 +1,4 @@
#include "cxx_std.h"
#if defined(CXX_STD) && CXX_STD <= CXX_STD_23
# error "cxx_std_26 not honored"
#endif