From bf1ded0859c3be7fb2089c30c0aaebe337dd3d83 Mon Sep 17 00:00:00 2001
From: Soeren Peters <peters@irmb.tu-bs.de>
Date: Fri, 4 Sep 2020 16:01:28 +0200
Subject: [PATCH] Add 3rd library cmake functions.

---
 CMake/3rd.cmake                          |  5 +++++
 CMake/3rd/OpenMP.cmake                   | 19 ++++++++-----------
 CMake/3rd/boost.cmake                    |  5 +++--
 CMake/3rd/cuda.cmake                     | 10 +++++-----
 CMake/3rd/gmock.cmake                    | 21 +++++++++++----------
 CMake/3rd/mpi.cmake                      | 13 ++++++-------
 CMake/VirtualFluidsMacros.cmake          |  2 +-
 CMakeLists.txt                           |  1 +
 src/basics/CMakeLists.txt                |  3 ++-
 src/basics/Core/Input/Input.h            |  2 ++
 src/gpu/GksGpu/CMakeLists.txt            |  6 +++---
 src/gpu/GridGenerator/CMakeLists.txt     |  5 ++---
 src/gpu/VirtualFluids_GPU/CMakeLists.txt |  3 +--
 13 files changed, 50 insertions(+), 45 deletions(-)
 create mode 100644 CMake/3rd.cmake

diff --git a/CMake/3rd.cmake b/CMake/3rd.cmake
new file mode 100644
index 000000000..6cc488f94
--- /dev/null
+++ b/CMake/3rd.cmake
@@ -0,0 +1,5 @@
+include(${VF_CMAKE_DIR}/3rd/boost.cmake)
+include(${VF_CMAKE_DIR}/3rd/cuda.cmake)
+include(${VF_CMAKE_DIR}/3rd/gmock.cmake)
+include(${VF_CMAKE_DIR}/3rd/mpi.cmake)
+include(${VF_CMAKE_DIR}/3rd/OpenMP.cmake)
\ No newline at end of file
diff --git a/CMake/3rd/OpenMP.cmake b/CMake/3rd/OpenMP.cmake
index fce16693d..bd7781b95 100644
--- a/CMake/3rd/OpenMP.cmake
+++ b/CMake/3rd/OpenMP.cmake
@@ -1,13 +1,10 @@
+function (linkOpenMP)
 
-find_package(OpenMP)
-if (OPENMP_FOUND)
-	#set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
-	#set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-    #set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler ${OpenMP_CXX_FLAGS}")
-endif()
+	find_package(OpenMP REQUIRED)
 
-#message (Cuda Flags: ${OpenMP_CXX_FLAGS})
-vf_get_library_name(library_name)
-if(OpenMP_CXX_FOUND)
-	target_link_libraries(${library_name} PUBLIC OpenMP::OpenMP_CXX)
-endif()
+	if(OpenMP_CXX_FOUND)
+		vf_get_library_name(library_name)
+		target_link_libraries(${library_name} PUBLIC OpenMP::OpenMP_CXX)
+	endif()
+
+endfunction()
\ No newline at end of file
diff --git a/CMake/3rd/boost.cmake b/CMake/3rd/boost.cmake
index fae5cdf65..544ae2d97 100644
--- a/CMake/3rd/boost.cmake
+++ b/CMake/3rd/boost.cmake
@@ -1,4 +1,4 @@
-macro(linkBoost components)
+function(linkBoost components)
   if(BUILD_SHARED_LIBS)
      if (WIN32)
          set(Boost_USE_STATIC_LIBS ON)
@@ -17,8 +17,9 @@ macro(linkBoost components)
 	add_definitions( -DBOOST_ALL_NO_LIB )
 #	add_definitions( -DBOOST_ALL_DYN_LINK )
   endif()
+
   vf_get_library_name(library_name)
   find_package( Boost REQUIRED COMPONENTS ${components})
   target_include_directories(${library_name} PRIVATE ${Boost_INCLUDE_DIR})
   target_link_libraries(${library_name} PRIVATE ${Boost_LIBRARIES})
-endmacro(linkBoost)
+endfunction()
diff --git a/CMake/3rd/cuda.cmake b/CMake/3rd/cuda.cmake
index 32b2e82d4..f39e4c417 100644
--- a/CMake/3rd/cuda.cmake
+++ b/CMake/3rd/cuda.cmake
@@ -1,4 +1,5 @@
 
+function(linkCUDA)
 
     find_path(CUDA_CUT_INCLUDE_DIR
       helper_cuda.h
@@ -11,8 +12,7 @@
     vf_get_library_name(library_name)
     target_include_directories(${library_name} PRIVATE ${CUDA_INCLUDE_DIRS} ${CUDA_CUT_INCLUDE_DIR})
 
-	#set_property(TARGET ${targetName} PROPERTY CUDA_SEPARABLE_COMPILATION ON)
-	#set_property(TARGET ${targetName} PROPERTY CUDA_64_BIT_DEVICE_CODE ON)
-	
-    #set(CUDA_NVCC_FLAGS "-G" CACHE TYPE INTERNAL FORCE)
-    #set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_13,code=sm_13 )
+    # set the following properties only for specific targets
+    # set_property(TARGET ${targetName} PROPERTY CUDA_SEPARABLE_COMPILATION ON)
+    # set_property(TARGET ${targetName} PROPERTY CUDA_64_BIT_DEVICE_CODE ON)
+endfunction()
\ No newline at end of file
diff --git a/CMake/3rd/gmock.cmake b/CMake/3rd/gmock.cmake
index b87f28492..205a3b9a1 100644
--- a/CMake/3rd/gmock.cmake
+++ b/CMake/3rd/gmock.cmake
@@ -3,14 +3,15 @@
 #  Note: gmock has to be build by the project itself (Located in 3rd).
 #################################################################################
 
-vf_get_library_test_name(library_name)
-target_link_libraries(${library_name} PRIVATE gtest gmock gmock_main)
+function (linkGMOCK)
+    vf_get_library_test_name(library_name)
+    target_link_libraries(${library_name} PRIVATE gtest gmock gmock_main)
 
-
-if(BUILD_SHARED_LIBS)
-    # add compile option according to
-    # https://github.com/google/googletest/blob/master/googletest/README.md#as-a-shared-library-dll
-    set_target_properties(${library_name}
-            PROPERTIES
-            COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
-endif()
+    if(BUILD_SHARED_LIBS)
+        # add compile option according to
+        # https://github.com/google/googletest/blob/master/googletest/README.md#as-a-shared-library-dll
+        set_target_properties(${library_name}
+                PROPERTIES
+                COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
+    endif()
+endfunction()
\ No newline at end of file
diff --git a/CMake/3rd/mpi.cmake b/CMake/3rd/mpi.cmake
index a3c8826b6..93b3ee386 100644
--- a/CMake/3rd/mpi.cmake
+++ b/CMake/3rd/mpi.cmake
@@ -1,10 +1,9 @@
+function (linkMPI)
 
+    find_package(MPI REQUIRED)
 
-vf_get_library_name(library_name)
+    vf_get_library_name(library_name)
+    target_include_directories(${library_name} PUBLIC ${MPI_CXX_INCLUDE_PATH})
+    target_link_libraries(${library_name} PRIVATE MPI::MPI_CXX)
 
-find_package(MPI REQUIRED)
-target_include_directories(${library_name} PUBLIC ${MPI_CXX_INCLUDE_PATH})
-
-#target_link_libraries(${library_name} PUBLIC ${MPI_CXX_LIBRARIES})
-
-target_link_libraries(${library_name} PRIVATE MPI::MPI_CXX)
+endfunction()
\ No newline at end of file
diff --git a/CMake/VirtualFluidsMacros.cmake b/CMake/VirtualFluidsMacros.cmake
index 721d56b89..83274c2fb 100644
--- a/CMake/VirtualFluidsMacros.cmake
+++ b/CMake/VirtualFluidsMacros.cmake
@@ -222,7 +222,7 @@ function(vf_add_tests)
     target_include_directories(${library_test_name} PRIVATE ${VF_SRC_DIR})
 
     # link googlemock
-    include(${VF_CMAKE_DIR}/3rd/gmock.cmake)
+    linkGMOCK()
 
 endfunction()
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4219695ee..9faf348c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,6 +53,7 @@ include(CMakePrintHelpers)
 include(${VF_CMAKE_DIR}/CMakeCABMacros.cmake)
 include(${VF_CMAKE_DIR}/FileUtilities.cmake)
 include(${VF_CMAKE_DIR}/VirtualFluidsMacros.cmake)
+include(${VF_CMAKE_DIR}/3rd.cmake)
 
 include(${VF_CMAKE_DIR}/CMakeMacros_old/general/FindCompiler.cmake)
 configure_file(src/basics/VirtualFluidsDefinitions.in.h ${CMAKE_BINARY_DIR}/VirtualFluidsDefinitions.h)
diff --git a/src/basics/CMakeLists.txt b/src/basics/CMakeLists.txt
index eb1ef8d2a..30fc6e9d1 100644
--- a/src/basics/CMakeLists.txt
+++ b/src/basics/CMakeLists.txt
@@ -17,6 +17,7 @@ IF(MSVC)
     target_compile_definitions(${library_name} PUBLIC NOMINMAX) # Disable Min/Max-Macros
 ENDIF(MSVC)
 
-include (${VF_CMAKE_DIR}/3rd/mpi.cmake)
+
+linkMPI()
 
 vf_add_tests()
\ No newline at end of file
diff --git a/src/basics/Core/Input/Input.h b/src/basics/Core/Input/Input.h
index 7adbc305f..9c95e2a16 100644
--- a/src/basics/Core/Input/Input.h
+++ b/src/basics/Core/Input/Input.h
@@ -15,6 +15,8 @@ namespace input
 	public:
         static BASICS_EXPORT std::unique_ptr<Input> makeInput(std::istream &stream, const std::string &inputType);
 
+        virtual ~Input() = default;
+
         virtual bool hasValue(const std::string &key) const = 0;
         virtual std::string getValue(const std::string &key) = 0;
 	};
diff --git a/src/gpu/GksGpu/CMakeLists.txt b/src/gpu/GksGpu/CMakeLists.txt
index 682bcccab..353a5c842 100644
--- a/src/gpu/GksGpu/CMakeLists.txt
+++ b/src/gpu/GksGpu/CMakeLists.txt
@@ -1,6 +1,6 @@
 
 vf_add_library(BUILDTYPE shared DEPENDS basics GksMeshAdapter)
 
-include (${VF_CMAKE_DIR}/3rd/cuda.cmake)
-include (${VF_CMAKE_DIR}/3rd/mpi.cmake)
-include (${VF_CMAKE_DIR}/3rd/OpenMP.cmake)
+linkCUDA()
+linkMPI()
+linkOpenMP()
diff --git a/src/gpu/GridGenerator/CMakeLists.txt b/src/gpu/GridGenerator/CMakeLists.txt
index c974d02d6..86b49cc47 100644
--- a/src/gpu/GridGenerator/CMakeLists.txt
+++ b/src/gpu/GridGenerator/CMakeLists.txt
@@ -2,8 +2,7 @@
 
 vf_add_library(BUILDTYPE shared DEPENDS basics)
 
-include (${VF_CMAKE_DIR}/3rd/cuda.cmake)
-include (${VF_CMAKE_DIR}/3rd/OpenMP.cmake)
-
+linkCUDA()
+linkOpenMP()
 
 set_property(TARGET ${library_name} PROPERTY CUDA_SEPARABLE_COMPILATION ON)
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/CMakeLists.txt b/src/gpu/VirtualFluids_GPU/CMakeLists.txt
index ebe26edce..be3a46dfc 100644
--- a/src/gpu/VirtualFluids_GPU/CMakeLists.txt
+++ b/src/gpu/VirtualFluids_GPU/CMakeLists.txt
@@ -9,8 +9,7 @@ ENDIF(MSVC)
 
 vf_add_library(BUILDTYPE shared DEPENDS ${libsToLink})
 
-include (${VF_CMAKE_DIR}/3rd/cuda.cmake)
-
+linkCUDA()
 
 #SET(TPN_WIN32 "/EHsc")
 #https://stackoverflow.com/questions/6832666/lnk2019-when-including-asio-headers-solution-generated-with-cmake
-- 
GitLab