From cb787a458b0d47f50cbc04af208a2086aab902ea Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 19 Jan 2024 15:19:33 +0100 Subject: [PATCH] Build: use C++17 for CUDA kernels when supported This helps with compatibility with recent clang versions as host compiler. Pull Request: https://projects.blender.org/blender/blender/pulls/117311 --- intern/cycles/kernel/CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index b0e7290c2cc..22915d1e0ea 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -492,6 +492,11 @@ if(WITH_CYCLES_CUDA_BINARIES) set(cuda_flags ${cuda_flags} --ptxas-options="-v") endif() + if(${cuda_version} GREATER_EQUAL 110) + # Helps with compatibility when using recent clang host compiler. + set(cuda_flags ${cuda_flags} -std=c++17) + endif() + set(_cuda_nvcc_args -arch=${arch} ${CUDA_NVCC_FLAGS} @@ -526,9 +531,11 @@ if(WITH_CYCLES_CUDA_BINARIES) if(DEFINED CUDA10_NVCC_EXECUTABLE) set(cuda_nvcc_executable ${CUDA10_NVCC_EXECUTABLE}) set(cuda_toolkit_root_dir ${CUDA10_TOOLKIT_ROOT_DIR}) + set(cuda_version 100) elseif("${CUDA_VERSION}" LESS 110) # Support for sm_30 was removed in CUDA 11 set(cuda_nvcc_executable ${CUDA_NVCC_EXECUTABLE}) set(cuda_toolkit_root_dir ${CUDA_TOOLKIT_ROOT_DIR}) + set(cuda_version ${CUDA_VERSION}) else() message(STATUS "CUDA binaries for ${arch} require CUDA 10 or earlier, skipped.") endif() @@ -536,9 +543,11 @@ if(WITH_CYCLES_CUDA_BINARIES) if(DEFINED CUDA11_NVCC_EXECUTABLE) set(cuda_nvcc_executable ${CUDA11_NVCC_EXECUTABLE}) set(cuda_toolkit_root_dir ${CUDA11_TOOLKIT_ROOT_DIR}) + set(cuda_version 110) elseif("${CUDA_VERSION}" LESS 120) # Support for sm_35, sm_37 was removed in CUDA 12 set(cuda_nvcc_executable ${CUDA_NVCC_EXECUTABLE}) set(cuda_toolkit_root_dir ${CUDA_TOOLKIT_ROOT_DIR}) + set(cuda_version ${CUDA_VERSION}) else() message(STATUS "CUDA binaries for ${arch} require CUDA 11 or earlier, skipped.") endif() @@ -548,15 +557,18 @@ if(WITH_CYCLES_CUDA_BINARIES) if("${CUDA_VERSION}" GREATER_EQUAL 111) # Support for sm_86 was introduced in CUDA 11 set(cuda_nvcc_executable ${CUDA_NVCC_EXECUTABLE}) set(cuda_toolkit_root_dir ${CUDA_TOOLKIT_ROOT_DIR}) + set(cuda_version ${CUDA_VERSION}) elseif(DEFINED CUDA11_NVCC_EXECUTABLE) set(cuda_nvcc_executable ${CUDA11_NVCC_EXECUTABLE}) set(cuda_toolkit_root_dir ${CUDA11_TOOLKIT_ROOT_DIR}) + set(cuda_version 110) else() message(STATUS "CUDA binaries for ${arch} require CUDA 11.1+, skipped.") endif() else() set(cuda_nvcc_executable ${CUDA_NVCC_EXECUTABLE}) set(cuda_toolkit_root_dir ${CUDA_TOOLKIT_ROOT_DIR}) + set(cuda_version ${CUDA_VERSION}) endif() if(DEFINED cuda_nvcc_executable AND DEFINED cuda_toolkit_root_dir) # Compile regular kernel