From 8b2144b28c921459180a2bed70396f2b9579f7a7 Mon Sep 17 00:00:00 2001
From: Soeren Peters <peters@irmb.tu-bs.de>
Date: Fri, 26 Jun 2020 09:45:14 +0200
Subject: [PATCH] - add source groups

---
 CMakeLists.txt                           |   2 +-
 cpu/Applications/pChannel/CMakeLists.txt |  17 +-
 cpu/CMake/VirtualFluidsMacros.cmake      | 233 ++++++++++++++---------
 cpu/VirtualFluidsBasic/CMakeLists.txt    |   3 +-
 cpu/VirtualFluidsCore/CMakeLists.txt     |   4 +-
 5 files changed, 155 insertions(+), 104 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 75611ce3e..29c9611b6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,7 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12)
     cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
 endif()
 
-project(VirtualFluids)
+project(VirtualFluids CXX)
 
 
 option(BUILD_VF_CPU "Build VirtualFluids cpu variant" ON)
diff --git a/cpu/Applications/pChannel/CMakeLists.txt b/cpu/Applications/pChannel/CMakeLists.txt
index 8b5f07fda..f909c9146 100644
--- a/cpu/Applications/pChannel/CMakeLists.txt
+++ b/cpu/Applications/pChannel/CMakeLists.txt
@@ -1,5 +1,3 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
 ########################################################
 ## C++ PROJECT                                       ###
 ########################################################
@@ -10,16 +8,17 @@ INCLUDE(${APPS_ROOT}/IncludsList.cmake)
 #################################################################
 ###   LOCAL FILES                                             ###
 #################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
+#FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
+#                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+#                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
  
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
+#SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
+#SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
   
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluidsCore VirtualFluidsBasic)
+#SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluidsCore VirtualFluidsBasic)
 
 #################################################################
 ###   CREATE PROJECT                                          ###
 #################################################################
-CREATE_CAB_PROJECT(pchannel BINARY)
+#CREATE_CAB_PROJECT(pchannel BINARY)
+vf_add_library(BUILDTYPE binary DEPENDS VirtualFluidsCore VirtualFluidsBasic FILES pChannel.cpp)
diff --git a/cpu/CMake/VirtualFluidsMacros.cmake b/cpu/CMake/VirtualFluidsMacros.cmake
index bc4dbd573..4991051f0 100644
--- a/cpu/CMake/VirtualFluidsMacros.cmake
+++ b/cpu/CMake/VirtualFluidsMacros.cmake
@@ -21,115 +21,168 @@ function(vf_add_library)
 
     set( options )
     set( oneValueArgs )
-    set( multiValueArgs DEPENDS FOLDER)
+    set( multiValueArgs BUILDTYPE DEPENDS FILES FOLDER)
     cmake_parse_arguments( ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
-    #message("${ARG_FOLDER}")
+    message("Files: ${ARG_FILES}")
 
     vf_get_library_name (library_name)
-    message("${library_name}")
+
+    if (ARG_FILES)
+        set(sourceFiles ${sourceFiles} ${ARG_FILES})
+    endif()
 
     if (ARG_FOLDER)
         foreach(folder ${ARG_FOLDER})
             foreach(file ${VIRTUAL_FLUIDS_GLOB_FILES})
                 set (filePath ${folder}/${file})
                 #message("${filePath}")
-                file ( GLOB part_files ${filePath} )
+                file (GLOB part_files ${filePath} )
                 set(sourceFiles ${sourceFiles} ${part_files})
             endforeach()
         endforeach()
+    endif()
+
+    if (NOT ARG_FILES AND NOT ARG_FOLDER)
+        file ( GLOB_RECURSE sourceFiles ${VIRTUAL_FLUIDS_GLOB_FILES} )
+    endif()
 
-        else ()
-     file ( GLOB_RECURSE sourceFiles ${VIRTUAL_FLUIDS_GLOB_FILES} )
-endif()
+    #    foreach(X IN LISTS sourceFiles)
+    #      message(STATUS "${X}")
+    #    endforeach()
 
-    foreach(X IN LISTS sourceFiles)
-       #message(STATUS "${X}")
+
+    # SET SOURCE GROUP
+    # IF SOURCE GROUP ENABLED
+    foreach(source ${sourceFiles})
+        get_filename_component(source_dir ${source} DIRECTORY)
+
+        if (source_dir)
+          setSourceGroupForFilesIn(${source_dir} ${library_name})
+        endif()
     endforeach()
 
 
-    set (build_type STATIC)
-
-
-  MESSAGE(STATUS "configuring ${library_name} (type=${build_type})...")
-
-
-  #################################################################
-  ###   OS DEFINES                                              ###
-  #################################################################
-  IF(WIN32)
-      LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__WIN__)
-  ELSEIF(APPLE)
-      LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__APPLE__)
-  ELSEIF(UNIX)
-      LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__unix__)
-  ENDIF()
-
-  #################################################################
-  ###   ADDITIONAL_MAKE_CLEAN_FILES                             ###
-  #################################################################
-  #SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_FILES}")
-
-  #################################################################
-  ###   EXCECUTABLE                                             ###
-  #################################################################
-  IF(${build_type} MATCHES BINARY)
-      ADD_EXECUTABLE(${library_name} ${sourceFiles} )
-  ELSEIF(${build_type} MATCHES SHARED)
-      ADD_LIBRARY(${library_name} SHARED ${sourceFiles} )
-  ELSEIF(${build_type} MATCHES STATIC)
-      ADD_LIBRARY(${library_name} STATIC ${sourceFiles} )
-  ELSE()
-      MESSAGE(FATAL_ERROR "build_type=${build_type} doesn't match BINARY, SHARED or STATIC")
-  ENDIF()
-
-  #################################################################
-  ###   ADDITIONAL LINK LIBRARIES                               ###
-  #################################################################
+
+    MESSAGE(STATUS "configuring ${library_name} (type=${ARG_BUILDTYPE})...")
+
+
+    #################################################################
+    ###   OS DEFINES                                              ###
+    #################################################################
+    IF(WIN32)
+        LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__WIN__)
+    ELSEIF(APPLE)
+        LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__APPLE__)
+    ELSEIF(UNIX)
+        LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__unix__)
+    ENDIF()
+
+    #################################################################
+    ###   ADDITIONAL_MAKE_CLEAN_FILES                             ###
+    #################################################################
+    #SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_FILES}")
+
+    #################################################################
+    ###   EXCECUTABLE                                             ###
+    #################################################################
+    IF(${ARG_BUILDTYPE} MATCHES binary)
+        ADD_EXECUTABLE(${library_name} ${sourceFiles} )
+    ELSEIF(${ARG_BUILDTYPE} MATCHES shared)
+        ADD_LIBRARY(${library_name} shared ${sourceFiles} )
+    ELSEIF(${ARG_BUILDTYPE} MATCHES static)
+        ADD_LIBRARY(${library_name} STATIC ${sourceFiles} )
+    ELSE()
+        MESSAGE(FATAL_ERROR "build_type=${ARG_BUILDTYPE} doesn't match BINARY, SHARED or STATIC")
+    ENDIF()
+
+    #################################################################
+    ###   ADDITIONAL LINK LIBRARIES                               ###
+    #################################################################
     message("Link Depending Libraries: ${ARG_DEPENDS}")
     if (ARG_DEPENDS)
-    TARGET_LINK_LIBRARIES(${library_name} ${ARG_DEPENDS})
+        target_link_libraries(${library_name} PRIVATE ${ARG_DEPENDS})
+    endif()
+
+    IF(CAB_ADDITIONAL_LINK_LIBRARIES)
+        TARGET_LINK_LIBRARIES(${library_name} PRIVATE ${CAB_ADDITIONAL_LINK_LIBRARIES})
+    ENDIF()
+
+    #################################################################
+    ###   COMPILER Flags                                          ###
+    #################################################################
+    ADD_COMPILER_FLAGS_TO_PROJECT(${CAB_COMPILER} ${library_name} "CXX" ${ARG_BUILDTYPE})
+    MESSAGE(STATUS "compiler flags for compiler ${CAB_COMPILER} on machine ${CAB_MACHINE} for project ${project_name} (${ARG_BUILDTYPE}) have been configured")
+
+    IF(CAB_ADDTIONAL_COMPILER_FLAGS)
+        ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS ${CAB_ADDTIONAL_COMPILER_FLAGS})
+    ENDIF()
+    IF(CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG)
+        MESSAGE(FATAL_ERROR "COMPILE_FLAGS_DEBUG_<CONFIG> not supported by cmake yet :-(")
+        ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_DEBUG ${CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG})
+    ENDIF()
+    IF(CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE)
+        MESSAGE(FATAL_ERROR "COMPILE_FLAGS_<CONFIG> not supported by cmake yet :-(")
+        ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_RELEASE ${CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE})
+    ENDIF()
+
+    #################################################################
+    ###   ADDITIONAL LINK PROPERTIES                              ###
+    #################################################################
+    IF(CAB_ADDITIONAL_LINK_FLAGS)
+        ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS ${CAB_ADDITIONAL_LINK_FLAGS})
+    ENDIF()
+    IF(CAB_ADDITIONAL_LINK_FLAGS_DEBUG)
+        ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_DEBUG ${CAB_ADDITIONAL_LINK_FLAGS_DEBUG})
+    ENDIF()
+    IF(CAB_ADDITIONAL_LINK_FLAGS_RELEASE)
+        ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_RELEASE ${CAB_ADDITIONAL_LINK_FLAGS_RELEASE})
+    ENDIF()
+
+    #SET(project_name ${library_name} CACHE STRING "name of binary")
+
+    MESSAGE(STATUS "configuring ${library_name} (type=${ARG_BUILDTYPE})... done")
+
+endfunction(vf_add_library)
+
+
+
+
+macro(setSourceGroupForFilesIn package_dir targetName)
+    #input: target_name PACKAGE_SRCS
+    buildSourceGroup(${targetName} ${package_dir})
+
+    if(isAllTestSuite)
+        source_group(${targetName}\\${SOURCE_GROUP} FILES ${source})
+    else()
+        source_group(${SOURCE_GROUP} FILES ${source})
     endif()
+    #output: -
+endmacro(setSourceGroupForFilesIn)
 
-  IF(CAB_ADDITIONAL_LINK_LIBRARIES)
-      TARGET_LINK_LIBRARIES(${library_name} ${CAB_ADDITIONAL_LINK_LIBRARIES})
-  ENDIF()
-
-  #################################################################
-  ###   COMPILER Flags                                          ###
-  #################################################################
-    message (${CAB_COMPILER})
-  ADD_COMPILER_FLAGS_TO_PROJECT(${CAB_COMPILER}  ${library_name} "CXX" ${build_type})
-  MESSAGE(STATUS "compiler flags for compiler ${CAB_COMPILER} on machine ${CAB_MACHINE} for project ${project_name} (${build_type}) have been configured")
-
-  IF(CAB_ADDTIONAL_COMPILER_FLAGS)
-      ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS ${CAB_ADDTIONAL_COMPILER_FLAGS})
-  ENDIF()
-  IF(CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG)
-      MESSAGE(FATAL_ERROR "COMPILE_FLAGS_DEBUG_<CONFIG> not supported by cmake yet :-(")
-      ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_DEBUG ${CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG})
-  ENDIF()
-  IF(CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE)
-      MESSAGE(FATAL_ERROR "COMPILE_FLAGS_<CONFIG> not supported by cmake yet :-(")
-      ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_RELEASE ${CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE})
-  ENDIF()
-
-  #################################################################
-  ###   ADDITIONAL LINK PROPERTIES                              ###
-  #################################################################
-  IF(CAB_ADDITIONAL_LINK_FLAGS)
-      ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS ${CAB_ADDITIONAL_LINK_FLAGS})
-  ENDIF()
-  IF(CAB_ADDITIONAL_LINK_FLAGS_DEBUG)
-      ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_DEBUG ${CAB_ADDITIONAL_LINK_FLAGS_DEBUG})
-  ENDIF()
-  IF(CAB_ADDITIONAL_LINK_FLAGS_RELEASE)
-      ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_RELEASE ${CAB_ADDITIONAL_LINK_FLAGS_RELEASE})
-  ENDIF()
-
-  SET(project_name ${library_name} CACHE STRING "name of binary")
-
-  MESSAGE(STATUS "configuring ${library_name} (type=${build_type})... done")
-
-
-endfunction(vf_add_library)
\ No newline at end of file
+
+
+
+macro(buildSourceGroup targetName path)
+    #input: targetName (e.g. lib name, exe name)
+
+    unset(SOURCE_GROUP)
+    string(REPLACE "/" ";" folderListFromPath ${path})
+    set(findTargetName 0)
+
+    foreach(folder ${folderListFromPath})
+        if(findTargetName)
+            set(SOURCE_GROUP ${SOURCE_GROUP}\\${folder})
+        endif()
+
+        if(${folder} STREQUAL ${targetName})
+            SET(findTargetName 1)
+        endif()
+    endforeach()
+
+    if(NOT SOURCE_GROUP)
+        set(SOURCE_GROUP "general")
+    endif()
+    message("Source group: ${SOURCE_GROUP}")
+    #output: SOURCE_GROUP
+endmacro(buildSourceGroup)
\ No newline at end of file
diff --git a/cpu/VirtualFluidsBasic/CMakeLists.txt b/cpu/VirtualFluidsBasic/CMakeLists.txt
index dcf15e335..ea3869ed7 100644
--- a/cpu/VirtualFluidsBasic/CMakeLists.txt
+++ b/cpu/VirtualFluidsBasic/CMakeLists.txt
@@ -18,7 +18,8 @@ SET(CAB_ADDITIONAL_LINK_LIBRARIES ${MPI_LIBRARY})
 INCLUDE_DIRECTORIES(${SOURCE_ROOT}/VirtualFluidsCore)
 INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
 
-vf_add_library(FOLDER
+vf_add_library(BUILDTYPE static
+               FOLDER
         ${CMAKE_CURRENT_LIST_DIR}/numerics/geometry3d
         ${CMAKE_CURRENT_LIST_DIR}/numerics/geometry3d/Creator
         ${CMAKE_CURRENT_LIST_DIR}/numerics/geometry3d/KdTree
diff --git a/cpu/VirtualFluidsCore/CMakeLists.txt b/cpu/VirtualFluidsCore/CMakeLists.txt
index 47bcdef2c..2e7fab9f9 100644
--- a/cpu/VirtualFluidsCore/CMakeLists.txt
+++ b/cpu/VirtualFluidsCore/CMakeLists.txt
@@ -1,5 +1,3 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
-
 
 #################################################################
 ###   PACKAGES						                          ###
@@ -97,7 +95,7 @@ message("CAB_ADDITIONAL_LINK_LIBRARIES: " ${CAB_ADDITIONAL_LINK_LIBRARIES})
 #CREATE_CAB_PROJECT(VirtualFluids STATIC)
 include (${PROJECT_SOURCE_DIR}/CMake/VirtualFluidsMacros.cmake)
 
-vf_add_library(DEPENDS VirtualFluidsBasic)
+vf_add_library(BUILDTYPE static DEPENDS VirtualFluidsBasic)
 
 vf_get_library_name(library_name)
 target_include_directories(${library_name} PRIVATE ${SOURCE_ROOT}/VirtualFluidsBasic)
-- 
GitLab