diff options
Diffstat (limited to 'intern/cycles/kernel/CMakeLists.txt')
-rw-r--r-- | intern/cycles/kernel/CMakeLists.txt | 79 |
1 files changed, 66 insertions, 13 deletions
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index 6651dc2d59d..c39c67afb5a 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -379,11 +379,11 @@ if(WITH_CYCLES_CUDA_BINARIES) set(CUDA_VERSION "${CUDA_VERSION_MAJOR}${CUDA_VERSION_MINOR}") # warn for other versions - if((CUDA_VERSION MATCHES "101") OR (CUDA_VERSION MATCHES "102")) + if((CUDA_VERSION MATCHES "101") OR (CUDA_VERSION MATCHES "102") OR (CUDA_VERSION MATCHES "111")) else() message(WARNING "CUDA version ${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR} detected, " - "build may succeed but only CUDA 10.1 and 10.2 are officially supported") + "build may succeed but only CUDA 10.1, 10.2 and 11.1 are officially supported") endif() # build for each arch @@ -442,6 +442,12 @@ if(WITH_CYCLES_CUDA_BINARIES) set(cuda_flags ${cuda_flags} -D __KERNEL_DEBUG__) endif() + if(WITH_NANOVDB) + set(cuda_flags ${cuda_flags} + -D WITH_NANOVDB + -I "${NANOVDB_INCLUDE_DIR}") + endif() + if(WITH_CYCLES_CUBIN_COMPILER) string(SUBSTRING ${arch} 3 -1 CUDA_ARCH) @@ -449,10 +455,10 @@ if(WITH_CYCLES_CUDA_BINARIES) # cycles_cubin_cc since the env variable is read before main() if(APPLE) set(CUBIN_CC_ENV ${CMAKE_COMMAND} - -E env DYLD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib") + -E env DYLD_LIBRARY_PATH="${cuda_toolkit_root_dir}/lib") elseif(UNIX) set(CUBIN_CC_ENV ${CMAKE_COMMAND} - -E env LD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib64") + -E env LD_LIBRARY_PATH="${cuda_toolkit_root_dir}/lib64") endif() add_custom_command( @@ -463,12 +469,12 @@ if(WITH_CYCLES_CUDA_BINARIES) -i ${CMAKE_CURRENT_SOURCE_DIR}${cuda_kernel_src} ${cuda_flags} -v - -cuda-toolkit-dir "${CUDA_TOOLKIT_ROOT_DIR}" + -cuda-toolkit-dir "${cuda_toolkit_root_dir}" DEPENDS ${kernel_sources} cycles_cubin_cc) else() add_custom_command( OUTPUT ${cuda_file} - COMMAND ${CUDA_NVCC_EXECUTABLE} + COMMAND ${cuda_nvcc_executable} -arch=${arch} ${CUDA_NVCC_FLAGS} --${format} @@ -485,11 +491,35 @@ if(WITH_CYCLES_CUDA_BINARIES) set(prev_arch "none") foreach(arch ${CYCLES_CUDA_BINARIES_ARCH}) - if(${arch} MATCHES "sm_2.") + if(${arch} MATCHES ".*_2.") message(STATUS "CUDA binaries for ${arch} are no longer supported, skipped.") - elseif(${arch} MATCHES "sm_7." AND ${CUDA_VERSION} LESS 100) + elseif(${arch} MATCHES ".*_30") + if(DEFINED CUDA10_NVCC_EXECUTABLE) + set(cuda_nvcc_executable ${CUDA10_NVCC_EXECUTABLE}) + set(cuda_toolkit_root_dir ${CUDA10_TOOLKIT_ROOT_DIR}) + 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}) + else() + message(STATUS "CUDA binaries for ${arch} require CUDA 10 or earlier, skipped.") + endif() + elseif(${arch} MATCHES ".*_7." AND ${CUDA_VERSION} LESS 100) message(STATUS "CUDA binaries for ${arch} require CUDA 10.0+, skipped.") + elseif(${arch} MATCHES ".*_8.") + if(DEFINED CUDA11_NVCC_EXECUTABLE) + set(cuda_nvcc_executable ${CUDA11_NVCC_EXECUTABLE}) + set(cuda_toolkit_root_dir ${CUDA11_TOOLKIT_ROOT_DIR}) + elseif(${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}) + 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}) + endif() + if(DEFINED cuda_nvcc_executable AND DEFINED cuda_toolkit_root_dir) # Compile regular kernel CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} filter "" "${cuda_filter_sources}" FALSE) CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} kernel "" "${cuda_sources}" FALSE) @@ -502,6 +532,9 @@ if(WITH_CYCLES_CUDA_BINARIES) if(WITH_CYCLES_CUDA_BUILD_SERIAL) set(prev_arch ${arch}) endif() + + unset(cuda_nvcc_executable) + unset(cuda_toolkit_root_dir) endif() endforeach() @@ -527,8 +560,14 @@ if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) set(cuda_flags ${cuda_flags} -D __KERNEL_DEBUG__) endif() - if(WITH_CYCLES_CUBIN_COMPILER) + if(WITH_NANOVDB) + set(cuda_flags ${cuda_flags} + -D WITH_NANOVDB + -I "${NANOVDB_INCLUDE_DIR}") + endif() + + if(WITH_CYCLES_CUBIN_COMPILER) # Needed to find libnvrtc-builtins.so. Can't do it from inside # cycles_cubin_cc since the env variable is read before main() if(APPLE) @@ -610,13 +649,13 @@ include_directories(SYSTEM ${INC_SYS}) if(WITH_COMPILER_ASAN) if(CMAKE_COMPILER_IS_GNUCC AND (NOT WITH_CYCLES_KERNEL_ASAN)) # GCC hangs compiling the big kernel files with asan and release, so disable by default. - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fno-sanitize=all") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-sanitize=vptr") + string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO " -fno-sanitize=all") + string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fno-sanitize=vptr") elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") # With OSL, Cycles disables rtti in some modules, wich then breaks at linking # when trying to use vptr sanitizer (included into 'undefined' general option). - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fno-sanitize=vptr") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-sanitize=vptr") + string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO " -fno-sanitize=vptr") + string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fno-sanitize=vptr") endif() endif() @@ -709,3 +748,17 @@ delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_SVM_HEADERS}" ${CYCLES_INSTAL delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_GEOM_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/geom) delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_UTIL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/util) delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_SPLIT_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/split) + + +if(WITH_NANOVDB) + set(SRC_NANOVDB_HEADERS + nanovdb/NanoVDB.h + nanovdb/CNanoVDB.h + ) + set(SRC_NANOVDB_UTIL_HEADERS + nanovdb/util/CSampleFromVoxels.h + nanovdb/util/SampleFromVoxels.h + ) + delayed_install(${NANOVDB_INCLUDE_DIR} "${SRC_NANOVDB_HEADERS}" ${CYCLES_INSTALL_PATH}/source/nanovdb) + delayed_install(${NANOVDB_INCLUDE_DIR} "${SRC_NANOVDB_UTIL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/nanovdb/util) +endif() |