summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-04-22 12:25:08 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-04-22 12:25:26 (GMT)
commitcba96f59d5dd2b9ce38a3b0c636a97deda28e035 (patch)
tree28ee99443986e6641f76a12ca106c9db5a5909bf
parentc3864d7f62710b8c16c6e8f1d2864472d374a5dd (diff)
parentfb0990ef04ab3c3f56bb6399403fc563b9dc89f8 (diff)
downloadCMake-cba96f59d5dd2b9ce38a3b0c636a97deda28e035.zip
CMake-cba96f59d5dd2b9ce38a3b0c636a97deda28e035.tar.gz
CMake-cba96f59d5dd2b9ce38a3b0c636a97deda28e035.tar.bz2
Merge topic 'cuda-std'
fb0990ef04 Tests/CompileFeatures: Cover cuda_std_## meta-features 011f3d1dd3 Tests/CompileFeatures: Fix c_std_23 case with Clang < 14 1f40604421 Tests/CompileFeatures: Cover CUDA default standard level 138436609f CUDA: Fix detection of default C++ standard level with MSVC host compiler Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9444
-rw-r--r--.gitlab/ci/configure_cuda12.2_clang.cmake1
-rw-r--r--.gitlab/ci/configure_cuda12.2_nvidia.cmake1
-rw-r--r--Modules/CMakeCUDACompilerId.cu.in10
-rw-r--r--Tests/CMakeLists.txt4
-rw-r--r--Tests/CompileFeatures/CMakeLists.txt24
-rw-r--r--Tests/CompileFeatures/c_std_23.c3
-rw-r--r--Tests/CompileFeatures/cuda_std_03.cu0
-rw-r--r--Tests/CompileFeatures/cuda_std_11.cu4
-rw-r--r--Tests/CompileFeatures/cuda_std_14.cu4
-rw-r--r--Tests/CompileFeatures/cuda_std_17.cu4
-rw-r--r--Tests/CompileFeatures/cuda_std_20.cu4
-rw-r--r--Tests/CompileFeatures/cuda_std_23.cu4
-rw-r--r--Tests/CompileFeatures/cuda_std_26.cu4
-rw-r--r--Tests/CompileFeatures/default_dialect.cu1
14 files changed, 64 insertions, 4 deletions
diff --git a/.gitlab/ci/configure_cuda12.2_clang.cmake b/.gitlab/ci/configure_cuda12.2_clang.cmake
index e13ca88..8f10f86 100644
--- a/.gitlab/ci/configure_cuda12.2_clang.cmake
+++ b/.gitlab/ci/configure_cuda12.2_clang.cmake
@@ -1,3 +1,4 @@
set(CMake_TEST_CUDA "Clang" CACHE STRING "")
+set(CMake_TEST_CUDA_STANDARDS "03;11;14;17;20;23" CACHE STRING "")
include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_cuda12.2_nvidia.cmake b/.gitlab/ci/configure_cuda12.2_nvidia.cmake
index 2cb2950..51a2511 100644
--- a/.gitlab/ci/configure_cuda12.2_nvidia.cmake
+++ b/.gitlab/ci/configure_cuda12.2_nvidia.cmake
@@ -1,4 +1,5 @@
set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "")
set(CMake_TEST_CUDA_CUPTI "ON" CACHE STRING "")
+set(CMake_TEST_CUDA_STANDARDS "03;11;14;17;20" CACHE STRING "")
include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/Modules/CMakeCUDACompilerId.cu.in b/Modules/CMakeCUDACompilerId.cu.in
index be8f1b3..cecb948 100644
--- a/Modules/CMakeCUDACompilerId.cu.in
+++ b/Modules/CMakeCUDACompilerId.cu.in
@@ -22,7 +22,15 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
#define CXX_STD_20 202002L
#define CXX_STD_23 202302L
-#define CXX_STD __cplusplus
+#if defined(_MSC_VER) && defined(_MSVC_LANG)
+# if _MSVC_LANG > __cplusplus
+# define CXX_STD _MSVC_LANG
+# else
+# define CXX_STD __cplusplus
+# endif
+#else
+# define CXX_STD __cplusplus
+#endif
const char* info_language_standard_default = "INFO" ":" "standard_default["
#if CXX_STD > CXX_STD_23
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index fa388e0..5d9d193 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -395,11 +395,15 @@ if(BUILD_TESTING)
string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_C "${CMake_TEST_C_STANDARDS}")
string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_CXX "${CMake_TEST_CXX_STANDARDS}")
+ string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_CUDA "${CMake_TEST_CUDA_STANDARDS}")
set(CompileFeatures_BUILD_OPTIONS
-DCMake_TEST_C_STANDARDS=${TEST_STDS_C}
-DCMake_TEST_CXX_STANDARDS=${TEST_STDS_CXX}
+ -DCMake_TEST_CUDA=${CMake_TEST_CUDA}
+ -DCMake_TEST_CUDA_STANDARDS=${TEST_STDS_CUDA}
)
ADD_TEST_MACRO(CompileFeatures CompileFeatures)
+ set_property(TEST CompileFeatures APPEND PROPERTY LABELS "CUDA")
ADD_TEST_MACRO(CMakeCommands.target_compile_features)
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index d6acd7b..469a085 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -9,7 +9,13 @@ set(ext_CXX cpp)
set(std_C 90 99 11 17 23)
set(std_CXX 98 11 14 17 20 23 26)
-foreach(lang C CXX)
+if(CMake_TEST_CUDA)
+ enable_language(CUDA)
+ set(ext_CUDA cu)
+ set(std_CUDA 03 11 14 17 20 23 26)
+endif()
+
+foreach(lang C CXX CUDA)
foreach(std IN LISTS std_${lang})
string(TOLOWER "${lang}_std_${std}" feature)
if("${std}" IN_LIST CMake_TEST_${lang}_STANDARDS
@@ -298,6 +304,22 @@ if (CMAKE_CXX_COMPILE_FEATURES)
endif()
endif ()
+if (CMake_TEST_CUDA
+ AND CMAKE_CUDA_COMPILE_FEATURES
+ AND CMAKE_CUDA_STANDARD_DEFAULT
+ AND NOT CMAKE_CUDA_FLAGS MATCHES "-std=")
+ add_executable(default_dialect_cuda default_dialect.cu)
+ target_compile_definitions(default_dialect_cuda PRIVATE
+ DEFAULT_CXX26=$<EQUAL:${CMAKE_CUDA_STANDARD_DEFAULT},26>
+ DEFAULT_CXX23=$<EQUAL:${CMAKE_CUDA_STANDARD_DEFAULT},23>
+ DEFAULT_CXX20=$<EQUAL:${CMAKE_CUDA_STANDARD_DEFAULT},20>
+ DEFAULT_CXX17=$<EQUAL:${CMAKE_CUDA_STANDARD_DEFAULT},17>
+ DEFAULT_CXX14=$<EQUAL:${CMAKE_CUDA_STANDARD_DEFAULT},14>
+ DEFAULT_CXX11=$<EQUAL:${CMAKE_CUDA_STANDARD_DEFAULT},11>
+ DEFAULT_CXX98=$<EQUAL:${CMAKE_CUDA_STANDARD_DEFAULT},03>
+ )
+endif ()
+
# always add a target "CompileFeatures"
if ((NOT CXX_expected_features) OR
(NOT cxx_auto_type IN_LIST CXX_expected_features))
diff --git a/Tests/CompileFeatures/c_std_23.c b/Tests/CompileFeatures/c_std_23.c
index 6073b552..a60a16e 100644
--- a/Tests/CompileFeatures/c_std_23.c
+++ b/Tests/CompileFeatures/c_std_23.c
@@ -1,6 +1,5 @@
#include "c_std.h"
#if defined(C_STD) && C_STD <= C_STD_17 && \
- !(C_STD == C_STD_17 && defined(__apple_build_version__) && \
- defined(__clang_major__) && __clang_major__ < 14)
+ !(C_STD == C_STD_17 && defined(__clang_major__) && __clang_major__ < 14)
# error "c_std_23 not honored"
#endif
diff --git a/Tests/CompileFeatures/cuda_std_03.cu b/Tests/CompileFeatures/cuda_std_03.cu
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/CompileFeatures/cuda_std_03.cu
diff --git a/Tests/CompileFeatures/cuda_std_11.cu b/Tests/CompileFeatures/cuda_std_11.cu
new file mode 100644
index 0000000..76813fd
--- /dev/null
+++ b/Tests/CompileFeatures/cuda_std_11.cu
@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD < CXX_STD_11
+# error "cuda_std_11 not honored"
+#endif
diff --git a/Tests/CompileFeatures/cuda_std_14.cu b/Tests/CompileFeatures/cuda_std_14.cu
new file mode 100644
index 0000000..53e23c8
--- /dev/null
+++ b/Tests/CompileFeatures/cuda_std_14.cu
@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_11
+# error "cuda_std_14 not honored"
+#endif
diff --git a/Tests/CompileFeatures/cuda_std_17.cu b/Tests/CompileFeatures/cuda_std_17.cu
new file mode 100644
index 0000000..502defb
--- /dev/null
+++ b/Tests/CompileFeatures/cuda_std_17.cu
@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_14
+# error "cuda_std_17 not honored"
+#endif
diff --git a/Tests/CompileFeatures/cuda_std_20.cu b/Tests/CompileFeatures/cuda_std_20.cu
new file mode 100644
index 0000000..afdd3ba
--- /dev/null
+++ b/Tests/CompileFeatures/cuda_std_20.cu
@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_17
+# error "cuda_std_20 not honored"
+#endif
diff --git a/Tests/CompileFeatures/cuda_std_23.cu b/Tests/CompileFeatures/cuda_std_23.cu
new file mode 100644
index 0000000..6bdaeb9
--- /dev/null
+++ b/Tests/CompileFeatures/cuda_std_23.cu
@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_20
+# error "cuda_std_23 not honored"
+#endif
diff --git a/Tests/CompileFeatures/cuda_std_26.cu b/Tests/CompileFeatures/cuda_std_26.cu
new file mode 100644
index 0000000..efeca8d
--- /dev/null
+++ b/Tests/CompileFeatures/cuda_std_26.cu
@@ -0,0 +1,4 @@
+#include "cxx_std.h"
+#if defined(CXX_STD) && CXX_STD <= CXX_STD_23
+# error "cuda_std_26 not honored"
+#endif
diff --git a/Tests/CompileFeatures/default_dialect.cu b/Tests/CompileFeatures/default_dialect.cu
new file mode 100644
index 0000000..a549a5c
--- /dev/null
+++ b/Tests/CompileFeatures/default_dialect.cu
@@ -0,0 +1 @@
+#include "default_dialect.cpp"