From 15b8a504e379fb0fe44f85735ca3e9a2bd6a2f00 Mon Sep 17 00:00:00 2001
From: Pietro Incardona <incardon@mpi-cbg.de>
Date: Thu, 21 Mar 2019 13:26:57 +0100
Subject: [PATCH] Fixing for CUDA 10

---
 CMakeLists.txt                 | 12 ++++++++++++
 src/CMakeLists.txt             |  2 +-
 src/VCluster/VCluster_base.hpp |  8 ++++----
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 55a6a54..47d4854 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,6 +17,18 @@ set (CMAKE_CUDA_STANDARD 11)
 if (ENABLE_GPU)
 	enable_language(CUDA)
 	find_package(CUDA)
+
+        if (CUDA_VERSION_MAJOR EQUAL 9 AND CUDA_VERSION_MINOR EQUAL 2)
+                message("CUDA is compatible")
+                set(WARNING_SUPPRESSION_AND_OPTION_NVCC  -Xcudafe "--display_error_number --diag_suppress=611 --diag_suppress=2885 --diag_suppress=2886  --diag_suppress=2887  --diag_suppress=2888 --diag_suppress=186 --diag_suppress=111" --expt-extended-lambda)
+        elseif ( CUDA_VERSION_MAJOR EQUAL 10 AND CUDA_VERSION_MINOR EQUAL 1 )
+                message("CUDA is compatible")
+                set(WARNING_SUPPRESSION_AND_OPTION_NVCC  -Xcudafe "--display_error_number --diag_suppress=2915 --diag_suppress=2912 --diag_suppress=2913 --diag_suppress=111 --diag_suppress=186 --diag_suppress=611 " --expt-extended-lambda)
+
+        else()
+                message(FATAL_ERROR "CUDA is incompatible, version 9.2 is only supported")
+        endif()
+
 endif()
 
 find_package(Boost 1.66.0 REQUIRED COMPONENTS unit_test_framework iostreams program_options)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8b0dc66..e3e1dbc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -20,7 +20,7 @@ add_library(vcluster STATIC VCluster/VCluster.cpp)
 ###########################
 
 if(CUDA_FOUND)
-	target_compile_options(vcluster_test PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:-Xcudafe "--display_error_number --diag_suppress=611 --diag_suppress=2885 --diag_suppress=2886  --diag_suppress=2887  --diag_suppress=2888 --diag_suppress=186 --diag_suppress=111" --expt-extended-lambda>)
+	target_compile_options(vcluster_test PUBLIC $<$<COMPILE_LANGUAGE:CUDA>: ${WARNING_SUPPRESSION_AND_OPTION_NVCC} >)
 	target_include_directories (vcluster_test PUBLIC ${MPI_C_INCLUDE_DIRS})
         if (TEST_COVERAGE)
                 target_compile_options(mem PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -Xcompiler "-fprofile-arcs -ftest-coverage">)
diff --git a/src/VCluster/VCluster_base.hpp b/src/VCluster/VCluster_base.hpp
index 1ace18b..a6588d9 100644
--- a/src/VCluster/VCluster_base.hpp
+++ b/src/VCluster/VCluster_base.hpp
@@ -320,19 +320,19 @@ public:
 		// if T is a primitive like int, long int, float, double, ... make sense
 		// (pointers, l-references and r-references are not fundamentals)
 		if (std::is_fundamental<T>::value == true)
-			return;
+		{return;}
 
 		// if it is a pointer make no sense
 		if (std::is_pointer<T>::value == true)
-			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(T).name()) << " is a pointer, sending pointers values has no sense\n";
+		{std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(T).name()) << " is a pointer, sending pointers values has no sense\n";}
 
 		// if it is an l-value reference make no send
 		if (std::is_lvalue_reference<T>::value == true)
-			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(T).name()) << " is a pointer, sending pointers values has no sense\n";
+		{std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(T).name()) << " is a pointer, sending pointers values has no sense\n";}
 
 		// if it is an r-value reference make no send
 		if (std::is_rvalue_reference<T>::value == true)
-			std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(T).name()) << " is a pointer, sending pointers values has no sense\n";
+		{std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " the type " << demangle(typeid(T).name()) << " is a pointer, sending pointers values has no sense\n";}
 
 		// ... if not, check that T has a method called noPointers
 		switch (check_no_pointers<T>::value())
-- 
GitLab