diff --git a/CMakeLists.txt b/CMakeLists.txt index 504725f3fd21afdcd38af5079ff7e3e87cbdf940..63b47828e6cea015a86fe73bc2ca24392848eb79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -496,13 +496,6 @@ else() endif() endif() -if (WALBERLA_BUILD_WITH_CUDA AND (CUDA_VERSION VERSION_LESS "11.0" OR CMAKE_VERSION VERSION_LESS 3.18.0)) - # CUDA < 11 does not support C++17. std::experimental::any works with C++14, unlike std::any. - set(CMAKE_CUDA_STANDARD 14) - set(WALBERLA_USE_STD_EXPERIMENTAL_ANY 1) -endif() - - ############################################################################################################################ ## ## Visual Studio Setup @@ -1037,22 +1030,39 @@ if ( WALBERLA_BUILD_WITH_CUDA ) include(CheckLanguage) check_language(CUDA) if( CMAKE_CUDA_COMPILER ) - enable_language(CUDA) - #include directories and cudart lib is needed for cpp files that use cuda headers/libs - include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) - find_library(CUDART_LIBRARY cudart ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES}) - list ( APPEND SERVICE_LIBS ${CUDART_LIBRARY} ) + if(${CMAKE_VERSION} VERSION_GREATER "3.18.0" AND NOT DEFINED CMAKE_CUDA_ARCHITECTURES) + set(CMAKE_CUDA_ARCHITECTURES OFF) + message(WARNING "CMAKE_CUDA_ARCHITECTURES was not set. It is automatically set to: ${CMAKE_CUDA_ARCHITECTURES}") + endif() + + enable_language(CUDA) - find_library( NVTX_LIBRARY nvToolsExt ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} ) - list ( APPEND SERVICE_LIBS ${NVTX_LIBRARY} ) + #include directories and cudart lib is needed for cpp files that use cuda headers/libs + include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) + find_library(CUDART_LIBRARY cudart ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES}) + list ( APPEND SERVICE_LIBS ${CUDART_LIBRARY} ) - #CUDA_FOUND is need for our cmake mechanism - set ( CUDA_FOUND TRUE ) + find_library( NVTX_LIBRARY nvToolsExt ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} ) + list ( APPEND SERVICE_LIBS ${NVTX_LIBRARY} ) + + #CUDA_FOUND is need for our cmake mechanism + set ( CUDA_FOUND TRUE ) else() - set ( WALBERLA_BUILD_WITH_CUDA FALSE ) + set ( WALBERLA_BUILD_WITH_CUDA FALSE ) endif ( ) endif ( ) + +# old nvcc compilers and newer stdlibc++ are incompatible. This needs to be checked! +if (WALBERLA_STL_BOUNDS_CHECKS AND WALBERLA_BUILD_WITH_CODEGEN AND WALBERLA_BUILD_WITH_CUDA AND CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "11.0" AND WALBERLA_CXX_COMPILER_IS_GNU AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0") + message(FATAL_ERROR "WALBERLA_STL_BOUNDS_CHECKS is not compatible with your CUDA compiler") +endif() + +if (WALBERLA_BUILD_WITH_CUDA AND (CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "11.0" OR CMAKE_VERSION VERSION_LESS 3.18.0)) + # CUDA < 11 does not support C++17. std::experimental::any works with C++14, unlike std::any. + set(CMAKE_CUDA_STANDARD 14) + set(WALBERLA_USE_STD_EXPERIMENTAL_ANY 1) +endif() ############################################################################################################################