Skip to content
Snippets Groups Projects
CMakeLists.txt 8.38 KiB
Newer Older
Pietro Incardona's avatar
Pietro Incardona committed
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)

########################### Executables

if (CUDA_ON_CPU)
Pietro Incardona's avatar
Pietro Incardona committed
        add_definitions(-DCUDA_ON_CPU)
        set_source_files_properties(${CUDA_SOURCES} PROPERTIES LANGUAGE CXX)
        set_source_files_properties(${CUDA_SOURCES} PROPERTIES COMPILE_FLAGS "-D__NVCC__ -DCUDA_GPU -DCUDART_VERSION=11000")
        if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
Pietro Incardona's avatar
Pietro Incardona committed
                add_definitions("-x c++")
        endif()
endif()
if (CUDA_FOUND)
	set(CUDA_SOURCES Operators/Vector/vector_dist_operators_unit_tests.cu
					 Operators/Vector/vector_dist_operators_apply_kernel_unit_tests.cu)
endif()

add_executable(numerics ${OPENFPM_INIT_FILE} ${CUDA_SOURCES}
						main.cpp 
						Matrix/SparseMatrix_unit_tests.cpp
						interpolation/interpolation_unit_tests.cpp
						Vector/Vector_unit_tests.cpp  
						Solvers/petsc_solver_unit_tests.cpp 
						FiniteDifference/FDScheme_unit_tests.cpp 
						FiniteDifference/eq_unit_test_3d.cpp 
						FiniteDifference/eq_unit_test.cpp  
						Operators/Vector/vector_dist_operators_unit_tests.cpp 
						Operators/Vector/vector_dist_operators_apply_kernel_unit_tests.cpp
						../../src/lib/pdata.cpp)
Pietro Incardona's avatar
Pietro Incardona committed
add_dependencies(numerics ofpmmemory)
add_dependencies(numerics vcluster)

Pietro Incardona's avatar
Pietro Incardona committed
###########################

if ( CMAKE_COMPILER_IS_GNUCC )
    target_compile_options(numerics PRIVATE "-Wno-deprecated-declarations")
    if (TEST_COVERAGE)
        target_compile_options(numerics PRIVATE $<$<COMPILE_LANGUAGE:CXX>: -fprofile-arcs -ftest-coverage>)
    endif()
endif()

if (CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
        add_definitions(-D__STRICT_ANSI__)
endif()

if(CUDA_FOUND)
        if (TEST_COVERAGE)
Pietro Incardona's avatar
Pietro Incardona committed
                target_compile_options(numerics PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -Xcompiler "-fprofile-arcs -ftest-coverage" >)
Pietro Incardona's avatar
Pietro Incardona committed

target_include_directories (numerics PUBLIC ${CUDA_INCLUDE_DIRS})
target_include_directories (numerics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories (numerics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../openfpm_devices/src/)
target_include_directories (numerics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../openfpm_vcluster/src/)
target_include_directories (numerics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../src/)
target_include_directories (numerics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../openfpm_data/src/)
target_include_directories (numerics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../openfpm_io/src/)
target_include_directories (numerics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/config)
target_include_directories (numerics PUBLIC ${PARMETIS_ROOT}/include)
target_include_directories (numerics PUBLIC ${METIS_ROOT}/include)
target_include_directories (numerics PUBLIC ${HDF5_ROOT}/include)
target_include_directories (numerics PUBLIC ${LIBHILBERT_INCLUDE_DIRS})
target_include_directories (numerics PUBLIC ${Boost_INCLUDE_DIRS})
Pietro Incardona's avatar
Pietro Incardona committed
target_include_directories (numerics PUBLIC ${Vc_INCLUDE_DIR})
target_include_directories (numerics PUBLIC ${ALPAKA_ROOT}/include)
target_include_directories (numerics PUBLIC ${MPI_C_INCLUDE_DIRS})
if(EIGEN3_FOUND)
	target_include_directories (numerics PUBLIC ${EIGEN3_INCLUDE_DIR})
endif()
link_directories(${PARMETIS_ROOT} ${METIS_ROOT})
Pietro Incardona's avatar
Pietro Incardona committed
target_link_libraries(numerics ${Boost_LIBRARIES})
target_link_libraries(numerics ${HDF5_LIBRARIES})
target_link_libraries(numerics ${PARMETIS_LIBRARIES})
Pietro Incardona's avatar
Pietro Incardona committed
target_link_libraries(numerics -L${LIBHILBERT_LIBRARY_DIRS} ${LIBHILBERT_LIBRARIES})
Pietro Incardona's avatar
Pietro Incardona committed
target_link_libraries(numerics ${Vc_LIBRARIES})
target_link_libraries(numerics ${MPI_C_LIBRARIES})
target_link_libraries(numerics ${MPI_CXX_LIBRARIES})
Pietro Incardona's avatar
Pietro Incardona committed
if(PETSC_FOUND)
	target_include_directories (numerics PUBLIC ${PETSC_INCLUDES})
	target_link_libraries(numerics ${PETSC_LIBRARIES})
Pietro Incardona's avatar
Pietro Incardona committed
endif()
Pietro Incardona's avatar
Pietro Incardona committed
target_link_libraries(numerics vcluster)
target_link_libraries(numerics ofpmmemory)

if(SuiteSparse_FOUND)
	target_include_directories (numerics PUBLIC ${SuiteSparse_INCLUDE_DIRS})
        target_link_libraries(numerics ${SuiteSparse_LIBRARIES})
	target_include_directories (numerics PUBLIC ${BLAS_INCLUDE_DIRS})
	target_link_libraries(numerics ${BLAS_LIBRARIES})
Pietro Incardona's avatar
Pietro Incardona committed
if(OpenMP_CXX_FOUND)
    target_include_directories (numerics PUBLIC ${OpenMP_CXX_INCLUDE_DIRS})
Pietro Incardona's avatar
Pietro Incardona committed
    target_link_libraries(numerics ${OpenMP_CXX_FLAGS})
endif()

target_link_libraries(numerics -L${METIS_ROOT}/lib metis)
if (TEST_COVERAGE)
    target_link_libraries(numerics -lgcov)
endif()

Pietro Incardona's avatar
Pietro Incardona committed
# Request that particles be built with -std=c++11
# As this is a public compile feature anything that links to particles
# will also build with -std=c++11
target_compile_features(numerics PUBLIC cxx_std_11)
target_link_libraries(numerics ${MPI_C_LIBRARIES})
if (NOT APPLE)
Pietro Incardona's avatar
Pietro Incardona committed
    target_link_libraries(numerics rt)
Pietro Incardona's avatar
Pietro Incardona committed
endif ()
Pietro Incardona's avatar
Pietro Incardona committed

install(FILES Matrix/SparseMatrix.hpp 
	      Matrix/SparseMatrix_Eigen.hpp 
	      Matrix/SparseMatrix_petsc.hpp
Pietro Incardona's avatar
Pietro Incardona committed
	      DESTINATION openfpm_numerics/include/Matrix
	      COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed

install(FILES Vector/Vector_eigen.hpp
	      Vector/Vector_petsc.hpp 
	      Vector/Vector_util.hpp 
	      Vector/Vector.hpp
Pietro Incardona's avatar
Pietro Incardona committed
	      DESTINATION openfpm_numerics/include/Vector 
	      COMPONENT OpenFPM)
install(FILES Solvers/umfpack_solver.hpp 
	      Solvers/petsc_solver.hpp
	      Solvers/petsc_solver_AMG_report.hpp
Pietro Incardona's avatar
Pietro Incardona committed
	      DESTINATION openfpm_numerics/include/Solvers 
	      COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed

install(FILES util/petsc_util.hpp 
	      util/linalgebra_lib.hpp 
	      util/util_num.hpp 
	      util/grid_dist_testing.hpp
Pietro Incardona's avatar
Pietro Incardona committed
	      DESTINATION openfpm_numerics/include/util 
	      COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed

install(FILES FiniteDifference/Average.hpp 
      	      FiniteDifference/Derivative.hpp 
      	      FiniteDifference/FD_util_include.hpp  
      	      FiniteDifference/eq.hpp 
      	      FiniteDifference/FDScheme.hpp 
      	      FiniteDifference/Laplacian.hpp 
      	      FiniteDifference/mul.hpp 
      	      FiniteDifference/sum.hpp 
Pietro Incardona's avatar
Pietro Incardona committed
      	      DESTINATION openfpm_numerics/include/FiniteDifference 
	      COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed
	      
install(FILES FiniteDifference/util/common.hpp
Pietro Incardona's avatar
Pietro Incardona committed
      	      DESTINATION openfpm_numerics/include/FiniteDifference/util 
	      COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed

install(FILES PSE/Kernels.hpp PSE/Kernels_test_util.hpp 
Pietro Incardona's avatar
Pietro Incardona committed
        DESTINATION openfpm_numerics/include/PSE 
	COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed

install(FILES Operators/Vector/vector_dist_operators_extensions.hpp 
      	       Operators/Vector/vector_dist_operators.hpp 
      	       Operators/Vector/vector_dist_operators_apply_kernel.hpp 
      	       Operators/Vector/vector_dist_operators_functions.hpp 
      	       Operators/Vector/vector_dist_operator_assign.hpp
Pietro Incardona's avatar
Pietro Incardona committed
      	       DESTINATION openfpm_numerics/include/Operators/Vector 
	       COMPONENT OpenFPM)
       install(FILES Operators/Vector/cuda/vector_dist_operators_cuda.cuh
Pietro Incardona's avatar
Pietro Incardona committed
	      DESTINATION openfpm_numerics/include/Operators/Vector/cuda 
	      COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed
install(FILES Draw/DrawParticles.hpp 
      	      Draw/PointIterator.hpp 
      	      Draw/PointIteratorSkin.hpp
Pietro Incardona's avatar
Pietro Incardona committed
	      Draw/DrawCircle.hpp
	      Draw/DrawSphere.hpp
Pietro Incardona's avatar
Pietro Incardona committed
      	      DESTINATION openfpm_numerics/include/Draw 
	      COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed

install(FILES interpolation/interpolation.hpp 
      	      interpolation/mp4_kernel.hpp 
      	      interpolation/z_spline.hpp
Pietro Incardona's avatar
Pietro Incardona committed
      	      DESTINATION openfpm_numerics/include/interpolation 
	      COMPONENT OpenFPM)
install(FILES level_set/redistancing_Sussman/ComputeGradient.hpp
	      level_set/redistancing_Sussman/HelpFunctions.hpp
	      level_set/redistancing_Sussman/HelpFunctionsForGrid.hpp
	      level_set/redistancing_Sussman/NarrowBand.hpp
	      level_set/redistancing_Sussman/RedistancingSussman.hpp
Pietro Incardona's avatar
Pietro Incardona committed
	      DESTINATION openfpm_numerics/include/level_set/redistancing_Sussman
	      COMPONENT OpenFPM)
install(FILES DMatrix/EMatrix.hpp
Pietro Incardona's avatar
Pietro Incardona committed
	DESTINATION openfpm_numerics/include/DMatrix 
	COMPONENT OpenFPM)
Pietro Incardona's avatar
Pietro Incardona committed

#if(BUILD_TESTING)

#  add_executable(particle_test test.cu)

#  set_target_properties(particle_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
#  target_link_libraries(particle_test PRIVATE particles)

#  add_test(NAME particles_10k COMMAND particle_test 10000 )
#  add_test(NAME particles_256k COMMAND particle_test 256000 )

#  if(APPLE)
    # We need to add the default path to the driver (libcuda.dylib) as an rpath,
    # so that the static cuda runtime can find it at runtime.
    #    set_property(TARGET particle_test PROPERTY BUILD_RPATH ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
    #  endif()
    #endif()