From 3f7b1752c4e04aef503c2b2a4db05d65e929ba7e Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 23 Aug 2022 18:01:13 +0200
Subject: [PATCH 1/5] [expt] implements alternate linking to MPI/OpenMP

this is an attempt to fix problems related to gcc receiving
semicolon-separated lists of parameters.
I don't have this problem myself on any of my machines, so I'm trying
blind...
---
 CMakeLists.txt  | 60 ++++++++++++++++++++++++++++++-------------------
 TurTLE/_code.py | 22 +++++++++---------
 2 files changed, 48 insertions(+), 34 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 81488582..760e377d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,9 +28,11 @@ cmake_minimum_required(VERSION 3.6)
 cmake_policy(VERSION 3.12)
 
 project(TurTLE)
+add_library(TurTLE STATIC "")
 
 string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
 
+
 #####################################################################################
 ## Python and version
 
@@ -49,6 +51,8 @@ execute_process(
 project(TurTLE
         VERSION ${TURTLE_VERSION}
         LANGUAGES C CXX)
+
+target_compile_options(TurTLE PRIVATE $<$<CONFIG:DEBUG>:-O1>)
 #####################################################################################
 
 #####################################################################################
@@ -62,20 +66,22 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 ## OpenMP
 
 find_package(OpenMP REQUIRED)
+target_link_libraries(TurTLE
+    PRIVATE
+    OpenMP::OpenMP_CXX)
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
 #####################################################################################
 
 #####################################################################################
 ## MPI
 
 find_package(MPI REQUIRED)
+target_link_libraries(TurTLE
+    PRIVATE
+    MPI::MPI_C)
 
-set(CMAKE_CXX_COMPILE_FLAGS "${CMAKE_CXX_COMPILE_FLAGS} ${MPI_CXX_COMPILE_OPTIONS}")
-set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_CXX_LINK_FLAGS}")
-include_directories(${MPI_CXX_INCLUDE_DIRS})
-add_definitions(${MPI_CXX_COMPILE_DEFINITIONS})
+#include_directories(${MPI_CXX_INCLUDE_DIRS})
+#add_definitions(${MPI_CXX_COMPILE_DEFINITIONS})
 # set(CMAKE_CXX_EXTENSIONS OFF)
 #####################################################################################
 
@@ -212,13 +218,19 @@ endif()
 
 set(HDF5_PREFER_PARALLEL TRUE)
 set(HDF5_NO_FIND_PACKAGE_CONFIG_FILE TRUE)
-find_package(HDF5 REQUIRED)
+find_package(HDF5 REQUIRED COMPONENTS C)
+target_link_libraries(TurTLE
+    PRIVATE
+    HDF5::HDF5)
+target_include_directories(TurTLE
+    PUBLIC
+    ${HDF5_C_INCLUDE_DIR})
 
-message(STATUS "HDF5_C_INCLUDE_DIRS ${HDF5_C_INCLUDE_DIRS}")
+#message(STATUS "HDF5_C_INCLUDE_DIRS ${HDF5_C_INCLUDE_DIRS}")
 
-include_directories(${HDF5_C_INCLUDE_DIRS})
-add_definitions(${HDF5_C_DEFINITIONS})
-list(APPEND TURTLE_LIBS "${HDF5_C_LIBRARIES}")
+#include_directories(${HDF5_C_INCLUDE_DIRS})
+#add_definitions(${HDF5_C_DEFINITIONS})
+#list(APPEND TURTLE_LIBS "${HDF5_C_LIBRARIES}")
 
 option(TURTLE_HDF5_USE_SZIP "Set to on to also link against SZIP" OFF)
 
@@ -227,7 +239,10 @@ if(TURTLE_HDF5_USE_SZIP)
     if(TURTLE_HDF5_SZIP_LIB_PATH)
         link_directories(${TURTLE_HDF5_SZIP_LIB_PATH})
     endif()
-    list(APPEND TURTLE_LIBS "z")
+    #list(APPEND TURTLE_LIBS "z")
+    target_link_libraries(TurTLE
+        PRIVATE
+        z)
 endif()
 #####################################################################################
 
@@ -237,8 +252,9 @@ endif()
 find_package(GSL)
 
 if (GSL_FOUND)
-    include_directories(${GSL_INCLUDE_DIRS})
-    list(APPEND TURTLE_LIBS "${GSL_LIBRARIES}")
+    target_link_libraries(TurTLE
+        PRIVATE
+        GSL)
 endif()
 #####################################################################################
 
@@ -252,9 +268,8 @@ if(DEFINED ENV{PINCHECK_ROOT})
         HINTS ${PINCHECK_INCLUDE})
     if(PINCHECK_HEADER)
         message("found pincheck header ${PINCHECK_HEADER}")
-        include_directories($ENV{PINCHECK_ROOT}/include)
-        #add_definitions(-DPINCHECK_FOUND)
-        set(CMAKE_CXX_COMPILE_FLAGS "${CMAKE_CXX_COMPILE_FLAGS} -DPINCHECK_FOUND")
+        target_include_directories(TurTLE PUBLIC $ENV{PINCHECK_ROOT}/include)
+        target_compile_definitions(TurTLE PRIVATE PINCHECK_FOUND)
     endif()
 endif()
 #####################################################################################
@@ -311,8 +326,8 @@ find_library(
 set(TURTLE_LIBS ${FFTW_MPI} ${TURTLE_LIBS})
 #####################################################################################
 
-list(APPEND TURTLE_LIBS "${MPI_CXX_LIBRARIES}")
-list(APPEND TURTLE_LIBS "${OpenMP_CXX_LIB_NAMES}")
+#list(APPEND TURTLE_LIBS "${MPI_CXX_LIBRARIES}")
+#list(APPEND TURTLE_LIBS "${OpenMP_CXX_LIB_NAMES}")
 
 #####################################################################################
 ## Get the links and include from deps
@@ -506,10 +521,9 @@ endif()
 #file(GLOB_RECURSE hpp_for_lib ${PROJECT_SOURCE_DIR}/*.hpp)
 LIST(APPEND source_files ${hpp_for_lib} ${cpp_for_lib})
 
-add_library(TurTLE ${source_files})
-
-target_link_libraries(TurTLE ${TURTLE_LIBS})
-target_compile_options(TurTLE PRIVATE $<$<CONFIG:DEBUG>:-O1>)
+target_sources(TurTLE
+    PRIVATE
+    ${source_files})
 
 install(TARGETS TurTLE EXPORT TURTLE_EXPORT DESTINATION lib/ )
 install(DIRECTORY ${PROJECT_SOURCE_DIR}/cpp/ DESTINATION include/TurTLE/ FILES_MATCHING PATTERN "*.h*")
diff --git a/TurTLE/_code.py b/TurTLE/_code.py
index 24481fbc..6f772ba5 100644
--- a/TurTLE/_code.py
+++ b/TurTLE/_code.py
@@ -206,16 +206,19 @@ class _code(_base):
             outfile.write('cmake_minimum_required(VERSION 3.10)\n')
             outfile.write('cmake_policy(VERSION 3.12)\n')
             outfile.write('project(project_{0} LANGUAGES C CXX)\n'.format(self.name))
+            outfile.write('add_executable({0} {0}.cpp)\n'.format(self.name))
             outfile.write('set(CMAKE_CXX_STANDARD 17)\n')
             outfile.write('set(CMAKE_CXX_STANDARD_REQUIRED ON)\n')
             outfile.write('find_package(OpenMP REQUIRED)\n')
-            outfile.write('set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")\n')
             outfile.write('find_package(MPI REQUIRED)\n')
-            outfile.write('set(CMAKE_CXX_COMPILE_FLAGS "${CMAKE_CXX_COMPILE_FLAGS} ${MPI_CXX_COMPILE_OPTIONS}")\n')
-            outfile.write('include_directories(${MPI_CXX_INCLUDE_DIRS})\n')
-            outfile.write('add_definitions(${MPI_CXX_COMPILE_DEFINITIONS})\n')
-            outfile.write('list(APPEND TURTLE_LIBS "${MPI_CXX_LIBRARIES}")\n')
-            outfile.write('list(APPEND TURTLE_LIBS "${OpenMP_CXX_LIB_NAMES}")\n')
+            outfile.write('target_link_libraries({0} PRIVATE OpenMP::OpenMP_CXX MPI::MPI_C)\n'.format(self.name))
+            outfile.write('set(HDF5_STATIC ON)\n')
+            outfile.write('set(HDF5_PREFER_PARALLEL TRUE)\n')
+            outfile.write('set(HDF5_NO_FIND_PACKAGE_CONFIG_FILE TRUE)\n')
+            outfile.write('find_package(HDF5 REQUIRED COMPONENTS C)\n')
+            outfile.write('message("found HDF5 include dir at ${HDF5_C_INCLUDE_DIR}")\n')
+            outfile.write('target_link_libraries({0} PRIVATE HDF5::HDF5)\n'.format(self.name))
+            outfile.write('target_include_directories({0} PRIVATE ${{HDF5_C_INCLUDE_DIR}})\n'.format(self.name))
             #ideally we should use something like the following 2 lines
             #outfile.write('set(CMAKE_CXX_COMPILER ${TURTLE_CXX_COMPILER})\n')
             #outfile.write('set(CMAKE_C_COMPILER ${TURTLE_C_COMPILER})\n')
@@ -223,8 +226,6 @@ class _code(_base):
             outfile.write('set(CMAKE_CXX_COMPILE_FLAGS "${CMAKE_CXX_COMPILE_FLAGS} ${TURTLE_CXX_COMPILE_FLAGS}")\n')
             outfile.write('set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_FLAGS}")\n')
             outfile.write('set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${TURTLE_EXE_LINKER_FLAGS}")\n')
-            outfile.write('set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_CXX_LINK_FLAGS}")\n')
-            outfile.write('set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")\n')
             outfile.write('if(NDEBUG)\n')
             outfile.write('    add_definitions(-DNDEBUG)\n')
             outfile.write('endif()\n')
@@ -234,9 +235,8 @@ class _code(_base):
             outfile.write('include_directories(${TURTLE_INCLUDE_DIRECTORIES} ${TURTLE_INCLUDE_DIR}/TurTLE)\n')
             outfile.write('link_directories(${TURTLE_LINK_DIRECTORIES} ${TURTLE_LIBRARIES_DIR})\n')
             outfile.write('find_library(TURTLE_STATIC_LIBRARY TurTLE HINTS ${TURTLE_LIBRARIES_DIR})\n')
-            outfile.write('add_executable({0} {0}.cpp)\n'.format(self.name))
-            outfile.write('target_link_libraries(' + self.name + ' ${TURTLE_STATIC_LIBRARY})\n')
-            outfile.write('target_link_libraries(' + self.name + ' ${TURTLE_LIBS})\n')
+            outfile.write('target_link_libraries(' + self.name + ' PRIVATE ${TURTLE_STATIC_LIBRARY})\n')
+            outfile.write('target_link_libraries(' + self.name + ' PRIVATE ${TURTLE_LIBS})\n')
             fname = self.dns_type + '_extra_cmake.txt'
             if os.path.exists(fname):
                 with open(fname, 'r') as ifile:
-- 
GitLab


From 009cae6df1f72890b232673814813403bb43918c Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 23 Aug 2022 18:51:50 +0200
Subject: [PATCH 2/5] [expt] fixes GSL linking step

---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 760e377d..17826be0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -254,7 +254,7 @@ find_package(GSL)
 if (GSL_FOUND)
     target_link_libraries(TurTLE
         PRIVATE
-        GSL)
+        GSL::gsl)
 endif()
 #####################################################################################
 
-- 
GitLab


From a83d266005218b3f8f6a12da9fabdc937d64d043 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 23 Aug 2022 18:55:13 +0200
Subject: [PATCH 3/5] [expt] permute CXX standard with add_library command

---
 CMakeLists.txt | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 17826be0..fd6f53a1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,10 +28,16 @@ cmake_minimum_required(VERSION 3.6)
 cmake_policy(VERSION 3.12)
 
 project(TurTLE)
-add_library(TurTLE STATIC "")
 
 string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
 
+#####################################################################################
+## CXX Standard
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+#####################################################################################
+
 
 #####################################################################################
 ## Python and version
@@ -52,14 +58,9 @@ project(TurTLE
         VERSION ${TURTLE_VERSION}
         LANGUAGES C CXX)
 
-target_compile_options(TurTLE PRIVATE $<$<CONFIG:DEBUG>:-O1>)
-#####################################################################################
-
-#####################################################################################
-## CXX Standard
+add_library(TurTLE STATIC "")
 
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
+target_compile_options(TurTLE PRIVATE $<$<CONFIG:DEBUG>:-O1>)
 #####################################################################################
 
 #####################################################################################
-- 
GitLab


From 5a0641265eea8b0b2f7a5226e64553948e51def6 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Tue, 23 Aug 2022 19:16:50 +0200
Subject: [PATCH 4/5] fixes _code.py CMake standard request

---
 TurTLE/_code.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/TurTLE/_code.py b/TurTLE/_code.py
index 6f772ba5..fcd6ac5b 100644
--- a/TurTLE/_code.py
+++ b/TurTLE/_code.py
@@ -205,10 +205,10 @@ class _code(_base):
         with open('CMakeLists.txt', 'w') as outfile:
             outfile.write('cmake_minimum_required(VERSION 3.10)\n')
             outfile.write('cmake_policy(VERSION 3.12)\n')
-            outfile.write('project(project_{0} LANGUAGES C CXX)\n'.format(self.name))
-            outfile.write('add_executable({0} {0}.cpp)\n'.format(self.name))
             outfile.write('set(CMAKE_CXX_STANDARD 17)\n')
             outfile.write('set(CMAKE_CXX_STANDARD_REQUIRED ON)\n')
+            outfile.write('project(project_{0} LANGUAGES C CXX)\n'.format(self.name))
+            outfile.write('add_executable({0} {0}.cpp)\n'.format(self.name))
             outfile.write('find_package(OpenMP REQUIRED)\n')
             outfile.write('find_package(MPI REQUIRED)\n')
             outfile.write('target_link_libraries({0} PRIVATE OpenMP::OpenMP_CXX MPI::MPI_C)\n'.format(self.name))
-- 
GitLab


From ac00c7f171f36a6809e3bdcd9fb3414857755a88 Mon Sep 17 00:00:00 2001
From: Cristian C Lalescu <Cristian.Lalescu@mpcdf.mpg.de>
Date: Wed, 24 Aug 2022 07:41:27 +0200
Subject: [PATCH 5/5] splits CMakeLists.txt to ease parsing

---
 CMakeLists.txt     | 189 +---------------------------------------
 cpp/CMakeLists.txt | 210 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 212 insertions(+), 187 deletions(-)
 create mode 100644 cpp/CMakeLists.txt

diff --git a/CMakeLists.txt b/CMakeLists.txt
index fd6f53a1..a2a18ce0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -327,9 +327,6 @@ find_library(
 set(TURTLE_LIBS ${FFTW_MPI} ${TURTLE_LIBS})
 #####################################################################################
 
-#list(APPEND TURTLE_LIBS "${MPI_CXX_LIBRARIES}")
-#list(APPEND TURTLE_LIBS "${OpenMP_CXX_LIB_NAMES}")
-
 #####################################################################################
 ## Get the links and include from deps
 
@@ -338,193 +335,11 @@ get_property(ALL_LINK_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_D
 #####################################################################################
 
 #####################################################################################
-## Build the lib
+## Add sources
 
 include_directories(${PROJECT_SOURCE_DIR}/cpp)
 
-#file(GLOB_RECURSE cpp_for_lib ${PROJECT_SOURCE_DIR}/*.cpp)
-set(cpp_for_lib
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/code_base.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/direct_numerical_simulation.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSE.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/static_field.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/kraichnan_field.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/joint_acc_vel_stats.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/pressure_stats.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/filter_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/field_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/write_filtered_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/dealias_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/Gauss_field_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/symmetrize_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/field_output_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/phase_shift_test.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_tracer_set.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/get_rfields.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/get_velocity.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/get_3D_correlations.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/write_rpressure.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/bandpass_stats.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/field_single_to_double.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/resize.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE_field_stats.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/native_binary_to_hdf5.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/postprocess.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/base.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/field.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/kspace.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/field_layout.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/hdf5_tools.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/fftw_tools.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/vorticity_equation.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/field_binary_IO.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n0.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n1.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n2.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n3.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n4.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n5.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n6.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n7.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n8.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n9.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n10.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/Lagrange_polys.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/field_tinterpolator.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/particle_set.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/rhs/tracer_rhs.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/rhs/tracer_with_collision_counter_rhs.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particle_solver.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/scope_timer.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_interpolation.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEparticles.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEcomplex_particles.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE_Stokes_particles.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEp_extra_sampling.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/ornstein_uhlenbeck_process.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/ou_vorticity_equation.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_interpolation_methods.cpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_particle_integration.cpp)
-
-set(hpp_for_lib
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/code_base.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/direct_numerical_simulation.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSE.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/static_field.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/kraichnan_field.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/joint_acc_vel_stats.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/pressure_stats.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/filter_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/dealias_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/Gauss_field_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/field_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/write_filtered_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/symmetrize_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/field_output_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/phase_shift_test.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_tracer_set.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/get_rfields.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/get_velocity.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/get_3D_correlations.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/write_rpressure.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/bandpass_stats.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/field_single_to_double.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/resize.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE_field_stats.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/native_binary_to_hdf5.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/postprocess.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/field.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/kspace.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/field_layout.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/hdf5_tools.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/fftw_tools.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/vorticity_equation.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/field_binary_IO.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n0.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n1.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n2.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n3.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n4.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n5.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n6.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n7.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n8.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n9.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/spline_n10.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/Lagrange_polys.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/abstract_particle_set.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/particle_set.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/field_tinterpolator.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particle_rhs.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/rhs/tracer_rhs.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/rhs/deformation_tensor_rhs.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/rhs/tracer_with_collision_counter_rhs.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particle_solver.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/scope_timer.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_interpolation.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEparticles.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEcomplex_particles.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE_Stokes_particles.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEp_extra_sampling.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer_2nd_order.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/inner/particles_inner_computer_empty.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_input.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_output.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_system.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/abstract_particles_system_with_p2p.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/alltoall_exchanger.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/lock_free_bool_array.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_computer_empty.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_computer.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_ghost_collisions.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_distr_mpi.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/p2p/p2p_tree.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_adams_bashforth.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_distr_mpi.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/particles_field_computer.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/interpolation/particles_generic_interp.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_input_hdf5.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_output_hdf5.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_output_mpiio.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_output_sampling_hdf5.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_sampling.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_system_builder.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_system.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/particles/particles_utils.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/main_code.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/codes_with_no_output.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVE_no_output.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/NSVEparticles_no_output.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/base.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/env_utils.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/fftw_interface.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/turtle_timer.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/omputils.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/shared_array.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/spectrum_function.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/ornstein_uhlenbeck_process.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/ou_vorticity_equation.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_interpolation_methods.hpp
-    ${PROJECT_SOURCE_DIR}/cpp/full_code/test_particle_integration.hpp)
-
-if(GSL_FOUND)
-    LIST(APPEND cpp_for_lib ${PROJECT_SOURCE_DIR}/cpp/particles/rhs/deformation_tensor_rhs.cpp)
-    LIST(APPEND hpp_for_lib ${PROJECT_SOURCE_DIR}/cpp/particles/rhs/deformation_tensor_rhs.hpp)
-endif()
-
-#file(GLOB_RECURSE hpp_for_lib ${PROJECT_SOURCE_DIR}/*.hpp)
-LIST(APPEND source_files ${hpp_for_lib} ${cpp_for_lib})
-
-target_sources(TurTLE
-    PRIVATE
-    ${source_files})
+add_subdirectory(cpp)
 
 install(TARGETS TurTLE EXPORT TURTLE_EXPORT DESTINATION lib/ )
 install(DIRECTORY ${PROJECT_SOURCE_DIR}/cpp/ DESTINATION include/TurTLE/ FILES_MATCHING PATTERN "*.h*")
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
new file mode 100644
index 00000000..6421dd5c
--- /dev/null
+++ b/cpp/CMakeLists.txt
@@ -0,0 +1,210 @@
+#######################################################################
+#                                                                     #
+#  Copyright 2019 Max Planck Institute                                #
+#                 for Dynamics and Self-Organization                  #
+#                                                                     #
+#  This file is part of TurTLE.                                       #
+#                                                                     #
+#  TurTLE is free software: you can redistribute it and/or modify     #
+#  it under the terms of the GNU General Public License as published  #
+#  by the Free Software Foundation, either version 3 of the License,  #
+#  or (at your option) any later version.                             #
+#                                                                     #
+#  TurTLE is distributed in the hope that it will be useful,          #
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of     #
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      #
+#  GNU General Public License for more details.                       #
+#                                                                     #
+#  You should have received a copy of the GNU General Public License  #
+#  along with TurTLE.  If not, see <http://www.gnu.org/licenses/>     #
+#                                                                     #
+# Contact: Cristian.Lalescu@ds.mpg.de                                 #
+#                                                                     #
+#######################################################################
+
+
+
+set(cpp_for_lib
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/code_base.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/direct_numerical_simulation.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSE.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVE.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/static_field.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/kraichnan_field.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/joint_acc_vel_stats.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/pressure_stats.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/filter_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/field_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/write_filtered_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/dealias_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/Gauss_field_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/symmetrize_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/field_output_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/phase_shift_test.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_tracer_set.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/get_rfields.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/get_velocity.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/get_3D_correlations.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/write_rpressure.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/bandpass_stats.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/field_single_to_double.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/resize.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVE_field_stats.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/native_binary_to_hdf5.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/postprocess.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/base.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/field.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/kspace.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/field_layout.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/hdf5_tools.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/fftw_tools.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/vorticity_equation.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/field_binary_IO.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n0.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n1.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n2.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n3.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n4.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n5.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n6.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n7.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n8.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n9.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n10.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/Lagrange_polys.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/field_tinterpolator.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/particle_set.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/rhs/tracer_rhs.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/rhs/tracer_with_collision_counter_rhs.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particle_solver.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/scope_timer.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_interpolation.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVEparticles.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVEcomplex_particles.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVE_Stokes_particles.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVEp_extra_sampling.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/inner/particles_inner_computer.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/ornstein_uhlenbeck_process.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/ou_vorticity_equation.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_interpolation_methods.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_particle_integration.cpp)
+
+set(hpp_for_lib
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/code_base.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/direct_numerical_simulation.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSE.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVE.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/static_field.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/kraichnan_field.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/joint_acc_vel_stats.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/pressure_stats.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/filter_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/dealias_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/Gauss_field_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/field_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/write_filtered_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/symmetrize_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/field_output_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/phase_shift_test.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_tracer_set.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/get_rfields.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/get_velocity.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/get_3D_correlations.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/write_rpressure.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/bandpass_stats.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/field_single_to_double.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/resize.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVE_field_stats.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/native_binary_to_hdf5.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/postprocess.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/field.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/kspace.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/field_layout.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/hdf5_tools.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/fftw_tools.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/vorticity_equation.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/field_binary_IO.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n0.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n1.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n2.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n3.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n4.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n5.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n6.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n7.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n8.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n9.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/spline_n10.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/Lagrange_polys.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/abstract_particle_set.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/particle_set.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/field_tinterpolator.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/abstract_particle_rhs.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/rhs/tracer_rhs.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/rhs/deformation_tensor_rhs.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/rhs/tracer_with_collision_counter_rhs.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particle_solver.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/scope_timer.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_interpolation.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVEparticles.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVEcomplex_particles.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVE_Stokes_particles.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVEp_extra_sampling.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/inner/particles_inner_computer.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/inner/particles_inner_computer_2nd_order.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/inner/particles_inner_computer_empty.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/abstract_particles_input.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/abstract_particles_output.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/abstract_particles_system.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/abstract_particles_system_with_p2p.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/alltoall_exchanger.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/lock_free_bool_array.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/p2p/p2p_computer_empty.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/p2p/p2p_computer.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/p2p/p2p_ghost_collisions.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/p2p/p2p_distr_mpi.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/p2p/p2p_tree.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_adams_bashforth.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_distr_mpi.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/particles_field_computer.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/interpolation/particles_generic_interp.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_input_hdf5.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_output_hdf5.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_output_mpiio.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_output_sampling_hdf5.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_sampling.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_system_builder.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_system.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/particles/particles_utils.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/main_code.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/codes_with_no_output.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVE_no_output.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/NSVEparticles_no_output.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/base.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/env_utils.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/fftw_interface.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/turtle_timer.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/omputils.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/shared_array.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/spectrum_function.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/ornstein_uhlenbeck_process.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/ou_vorticity_equation.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_interpolation_methods.hpp
+    ${CMAKE_CURRENT_LIST_DIR}/full_code/test_particle_integration.hpp)
+
+if(GSL_FOUND)
+    LIST(APPEND cpp_for_lib ${CMAKE_CURRENT_LIST_DIR}/particles/rhs/deformation_tensor_rhs.cpp)
+    LIST(APPEND hpp_for_lib ${CMAKE_CURRENT_LIST_DIR}/particles/rhs/deformation_tensor_rhs.hpp)
+endif()
+
+LIST(APPEND source_files ${hpp_for_lib} ${cpp_for_lib})
+
+target_sources(TurTLE
+    PRIVATE
+    ${source_files})
+
+#EOF
+
-- 
GitLab