From 49fb42d8858694cdad423475d060b8dc3a2ccb04 Mon Sep 17 00:00:00 2001
From: Soeren Peters <peters.soeren@gmx.net>
Date: Thu, 4 Feb 2021 15:28:44 +0100
Subject: [PATCH] Restructure the cmake cuda process. Remove the policy and
 always set CMAKE_CUDA_ARCHITECTURE to 30, if not set. This will fail when
 someone is trying to build with cuda 10.2 or higher, as cuda 10.2 minimum
 support is 52.

NOTICE: preferred way is to set CMAKE_CUDA_ARCHITECTURE as cmake argument OR in the config file to the real gpu architecture. For example phoenix tesla P100 have the compute capability 60.
---
 .gitlab-ci.yml                                |  6 ++++
 CMake/cmake_config_files/PHOENIX.config.cmake |  2 ++
 CMakeLists.txt                                | 35 +++++++++++--------
 3 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8e5d309d1..a792979a6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -45,6 +45,7 @@ stages:
     - cmake ..
       -DBUILD_VF_CPU=ON
       -DBUILD_VF_GPU=ON
+      -DCMAKE_CUDA_ARCHITECTURES=60
     - cmake . -LAH
     - make -j4
 
@@ -87,6 +88,7 @@ gcc_9_rebuild:
     - cmake ..
       -DBUILD_VF_CPU=ON
       -DBUILD_VF_GPU=ON
+      -DCMAKE_CUDA_ARCHITECTURES=60
       -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
       -DCMAKE_CUDA_COMPILER_LAUNCHER=ccache
       -DCMAKE_C_COMPILER_LAUNCHER=ccache
@@ -275,6 +277,7 @@ gpu_numerical_tests:
     - cmake ..
       -DBUILD_VF_CPU=OFF
       -DBUILD_VF_GPU=ON
+      -DCMAKE_CUDA_ARCHITECTURES=60
       -DBUILD_VF_DOUBLE_ACCURACY=ON
       -DBUILD_NUMERIC_TESTS=ON
       -DPATH_NUMERICAL_TESTS=/tmp/test_data/numerical_tests_gpu
@@ -327,6 +330,7 @@ clang_build_analyzer_clang_10:
     - cmake ..
       -DBUILD_VF_CPU=ON
       -DBUILD_VF_GPU=ON
+      -DCMAKE_CUDA_ARCHITECTURES=60
       -DUSE_OPENMP=OFF
       -DCMAKE_CXX_FLAGS=-ftime-trace
     - ClangBuildAnalyzer --start .
@@ -362,6 +366,7 @@ include_what_you_use_clang_10:
     - cmake ..
       -DBUILD_VF_CPU=ON
       -DBUILD_VF_GPU=ON
+      -DCMAKE_CUDA_ARCHITECTURES=60
       -DUSE_OPENMP=OFF
       -DBUILD_VF_INCLUDE_WHAT_YOU_USE=ON
     - make
@@ -436,6 +441,7 @@ gcov_gcc_9:
     - cmake ..
       -DBUILD_VF_CPU=ON
       -DBUILD_VF_GPU=ON
+      -DCMAKE_CUDA_ARCHITECTURES=60
       -DBUILD_VF_COVERAGE=ON
       -DBUILD_VF_UNIT_TESTS=ON
     - make -j4
diff --git a/CMake/cmake_config_files/PHOENIX.config.cmake b/CMake/cmake_config_files/PHOENIX.config.cmake
index 1d69df88b..14fe65bc9 100644
--- a/CMake/cmake_config_files/PHOENIX.config.cmake
+++ b/CMake/cmake_config_files/PHOENIX.config.cmake
@@ -43,4 +43,6 @@ SET(BOOST_LIBRARYDIR  "/cluster/lib/boost/1.63.0/gcc/lib"  CACHE PATH "BOOST_LIB
 #SET(VTK_DIR "/home/irmb/tools/VTK/build/VTK-8.2.0" CACHE PATH "VTK directory override" FORCE)
 #SET(VTK_DIR "/home/stelenz/software/vtk/VTK-8.1.0/build" CACHE PATH "VTK directory override" FORCE)
 
+## nvidia
 set(NVCUDASAMPLES_ROOT "/cluster/cuda/11.0/samples")
+set(CMAKE_CUDA_ARCHITECTURES 60) # NVIDIA Tesla P100
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1830f4817..40056a9e1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,16 +10,13 @@
 #  CMAKE 3.13: target_link_options
 #  CMAKE 3.15: CMAKE_MSVC_RUNTIME_LIBRARY
 #################################################################################
-cmake_minimum_required(VERSION 3.15..3.18 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.15..3.19 FATAL_ERROR)
 
 project(VirtualFluids CXX)
 
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
-set(CMAKE_CUDA_STANDARD 14)
-set(CMAKE_CUDA_STANDARD_REQUIRED TRUE)
-
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER ".cmake")
 set(libraryFolder "libs")
@@ -66,17 +63,6 @@ option(BUILD_VF_PYTHON_BINDINGS "" OFF)
 
 option(BUILD_VF_DOUBLE_ACCURACY "Use double accuracy" OFF)
 
-#################################################################################
-#  CMAKE POLICIES
-#################################################################################
-# CMAKE_CUDA_ARCHITECTURES
-# https://cmake.org/cmake/help/git-stage/policy/CMP0104.htmls
-if(POLICY CMP0104)
-    cmake_policy(SET CMP0104 NEW)
-    set(CMAKE_CUDA_ARCHITECTURES 30)
-    # with cuda 11 the minimum architecture is 52
-endif()
-
 #################################################################################
 #  MACROS
 #################################################################################
@@ -99,6 +85,25 @@ if (BUILD_VF_CPU)
     include (cpu.cmake)
 endif()
 if(BUILD_VF_GPU)
+
+    include(CheckLanguage)
+    check_language(CUDA)
+
+    if(NOT CMAKE_CUDA_COMPILER)
+        message(FATAL_ERROR "CUDA Compiler was requested but is not found on the system.")
+    endif()
+
+    set(CMAKE_CUDA_STANDARD 11)
+    set(CMAKE_CUDA_STANDARD_REQUIRED TRUE)
+
+    if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
+        message(WARNING "CMAKE_CUDA_ARCHITECTURES was not defined and is set to 30 (CUDA support until 10.1 only).")
+        set(CMAKE_CUDA_ARCHITECTURES 30)
+    endif()
+
+    message("CUDA Compiler: ${CMAKE_CUDA_COMPILER}")
+    message("CUDA Architecture: ${CMAKE_CUDA_ARCHITECTURES}")
+
     include (gpu.cmake)
 endif()
 
-- 
GitLab