Skip to content
Snippets Groups Projects
CMakeLists.txt 5.43 KiB
Newer Older
Pietro Incardona's avatar
Pietro Incardona committed
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(openfpm_pdata LANGUAGES C CXX)
Pietro Incardona's avatar
Pietro Incardona committed
if (POLICY CMP0074)
Pietro Incardona's avatar
Pietro Incardona committed
        cmake_policy(SET CMP0074 OLD)
endif ()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../cmake_modules/)
Pietro Incardona's avatar
Pietro Incardona committed
set(BOOST_INCLUDE ${Boost_INCLUDE_DIR} CACHE PATH "Include directory for BOOST")
set(PETSC_ROOT CACHE PATH "If compiling with linear algebra indicate the PETSC root directory")
set(PARMETIS_ROOT CACHE PATH "Parmetis root directory")
set(METIS_ROOT CACHE PATH "Metis root directory")
set(LIBHILBERT_ROOT CACHE PATH "LibHilbert root path")
set(HDF5_ROOT CACHE PATH "HDF5 root path")
set(EIGEN3_ROOT CACHE PATH "Eigen3 include path")
set(LIBHILBERT_ROOT CACHE PATH "LibHilbert root path")
set(SUITESPARSE_ROOT CACHE PATH "The suitesparse root path")
set(TINYOBJLOADER_ROOT CACHE PATH "TinyObjLoader library path")
Pietro Incardona's avatar
Pietro Incardona committed
set(SE_CLASS1 CACHE BOOL "Activate compilation with SE_CLASS1")
set(SE_CLASS3 CACHE BOOL "Activate compilation with SE_CLASS3")
set(PROFILE_WITH_SCOREP CACHE BOOL "Enable profiling with scorep")
set(ENV{PETSC_DIR} ${PETSC_ROOT})
set(ENV{HDF5_ROOT} ${HDF5_ROOT})
set(ENV{EIGEN3_ROOT} ${EIGEN3_ROOT})
set(METIS_DIR ${METIS_ROOT})
set(PARMETIS_DIR ${PARMETIS_ROOT})
set(OPENBLAS_ROOT CACHE PATH "Root path for blas library")
set(SuiteSparse_ROOT ${SUITESPARSE_ROOT})
set(ALPAKA_ROOT CACHE PATH "Alpaka root path")
set(CUDA_ON_CPU CACHE BOOL "Make Cuda work on heap")
Pietro Incardona's avatar
Pietro Incardona committed
set (CMAKE_CXX_STANDARD 14)
set (CMAKE_CUDA_STANDARD 14)
if (OPENBLAS_ROOT)
	set(ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${OPENBLAS_ROOT}/lib")
	set(ENV{DYLD_LIBRARY_PATH} "$ENV{DYLD_LIBRARY_PATH}:${OPENBLAS_ROOT}/lib")
endif()

set(ENV{PATH} "$ENV{PATH}:${HDF5_ROOT}/bin")
set(HDF5_PREFER_PARALLEL TRUE)

Pietro Incardona's avatar
Pietro Incardona committed
find_package(Boost 1.72.0 REQUIRED COMPONENTS unit_test_framework iostreams program_options OPTIONAL_COMPONENTS fiber context)
Pietro Incardona's avatar
Pietro Incardona committed
find_package(MPI REQUIRED)
find_package(PETSc)
Pietro Incardona's avatar
Pietro Incardona committed
find_package(Eigen3)
find_package(LibHilbert)
find_package(Metis)
find_package(ParMetis)
find_package(TinyObjLoader )
find_package(BLAS)
find_package(LAPACK)
find_package(Eigen3)
find_package(SuiteSparse OPTIONAL_COMPONENTS UMFPACK)
set(CMAKE_SKIP_BUILD_RPATH TRUE)

Pietro Incardona's avatar
Pietro Incardona committed
if(PROFILE_WITH_SCOREP)
	set(CMAKE_CXX_COMPILER_LAUNCHER "scorep")
	set(CMAKE_CC_COMPILER_LAUNCHER "scorep")
	set(CMAKE_CUDA_COMPILER_LAUNCHER "scorep")
endif()

Pietro Incardona's avatar
Pietro Incardona committed
if(CUDA_FOUND)
	set(OPENFPM_INIT_FILE "initialize/initialize_wrapper_cuda.cu")
else()
	set(OPENFPM_INIT_FILE "initialize/initialize_wrapper_cpu.cpp")
Pietro Incardona's avatar
Pietro Incardona committed
endif()

###### CONFIG.h FILE ######

if(SE_CLASS1)
	set(DEFINE_SE_CLASS1 "#define SE_CLASS1")
endif()

if(SE_CLASS3)
	set(DEFINE_SE_CLASS3 "#define SE_CLASS3")
endif()

if(PETSC_FOUND)
	set(DEFINE_HAVE_PETSC "#define HAVE_PETSC")
endif()

if(SCAN_COVERTY)
	set(DEFINE_SCAN_COVERTY "#define COVERTY_SCAN")
endif()

Pietro Incardona's avatar
Pietro Incardona committed
if(CUDA_FOUND)
	set(DEFINE_CUDA_GPU "#define CUDA_GPU")
endif()

if (METIS_FOUND)
	set(DEFINE_HAVE_METIS "#define HAVE_METIS 1")
else()
	file(WRITE error_code "201")
Pietro Incardona's avatar
Pietro Incardona committed
	message( FATAL_ERROR "Metis is required in order to install OpenFPM" )
endif()

if (PARMETIS_FOUND)
	set(DEFINE_HAVE_PARMETIS "#define HAVE_PARMETIS 1")
else()
	file(WRITE error_code "208")
Pietro Incardona's avatar
Pietro Incardona committed
	message( FATAL_ERROR "ParMetis is required in order to install OpenFPM")
endif()

if(MPI_FOUND)
	set(DEFINE_HAVE_MPI "#define HAVE_MPI")
else()
	file(WRITE error_code "200")
Pietro Incardona's avatar
Pietro Incardona committed
	message( FATAL_ERROR "MPI is required in order to install OpenFPM" )
endif()

if(PETSC_FOUND)
        set(DEFINE_HAVE_PETSC "#define HAVE_PETSC")
endif()

Pietro Incardona's avatar
Pietro Incardona committed
if (Boost_FOUND)
	set(DEFINE_HAVE_BOOST "#define HAVE_BOOST")
	set(DEFINE_HAVE_BOOST_IOSTREAMS "#define HAVE_BOOST_IOSTREAMS")
	set(DEFINE_HAVE_BOOST_PROGRAM_OPTIONS "#define HAVE_BOOST_PROGRAM_OPTIONS")
	set(DEFINE_HAVE_BOOST_UNIT_TEST_FRAMEWORK "#define HAVE_BOOST_UNIT_TEST_FRAMEWORK")
else()
	file(WRITE error_code "202")
Pietro Incardona's avatar
Pietro Incardona committed
	message( FATAL_ERROR "BOOST is required in order to install OpenFPM" )
endif()

if(HDF5_FOUND)
	if (HDF5_IS_PARALLEL)
		set(DEFINE_HAVE_HDF5 "#define HAVE_HDF5")
	else()
		file(WRITE error_code "207")
		message( FATAL_ERROR "HDF5 found ${HDF5_INCLUDE_DIRS} does not have parallel support, OpenFPM require it" )
Pietro Incardona's avatar
Pietro Incardona committed
	endif()
else()
	file(WRITE error_code "207")
Pietro Incardona's avatar
Pietro Incardona committed
	message( FATAL_ERROR "HDF5 with parallel support is required in order to install OpenFPM" )
endif()

Pietro Incardona's avatar
Pietro Incardona committed
	set(DEFINE_HAVE_EIGEN "#define HAVE_EIGEN")
endif()


if(EIGEN3_FOUND)
        set(DEFINE_HAVE_EIGEN "#define HAVE_EIGEN")
endif()

Pietro Incardona's avatar
Pietro Incardona committed
if(LIBHILBERT_FOUND)
        set(DEFINE_HAVE_LIBHILBERT "#define HAVE_LIBHILBERT 1")
Pietro Incardona's avatar
Pietro Incardona committed
else()
        file(WRITE error_code "210")
        message( FATAL_ERROR "LibHilbert is required in order to install OpenFPM")
endif()

if(SUITESPARSE_FOUND AND SuiteSparse_UMFPACK_FOUND)
        set(DEFINE_HAVE_SUITESPARSE "#define HAVE_SUITESPARSE")
Pietro Incardona's avatar
Pietro Incardona committed
endif()

if(SUITESPARSE_FOUND AND SuiteSparse_UMFPACK_FOUND)
	set(DEFINE_HAVE_SUITESPARSE "#define HAVE_SUITESPARSE")
endif()
if(APPLE)
	set(DEFINE_HAVE_OSX "#define HAVE_OSX")
endif()

if(TINYOBJLOADER_FOUND)
	set(DEFINE_HAVE_TINYOBJLOADER "#define HAVE_TINYOBJLOADER 1")
endif()

if (TEST_COVERAGE)
        set(DEFINE_TEST_COVERAGE_MODE "#define TEST_COVERAGE_MODE")
endif()

file(WRITE error_code "0")
file(WRITE cuda_lib "${CUDA_cudart_static_LIBRARY} ${CUDA_cudadevrt_LIBRARY}")
file(WRITE cuda_include "-I${CUDA_INCLUDE_DIRS}")
file(WRITE mpi_include "-I${MPI_C_INCLUDE_DIRS}")
file(WRITE mpi_libs "${MPI_C_LINK_FLAGS} ${MPI_C_LIBRARIES}")

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config/config_cmake.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/config/config.h)
Pietro Incardona's avatar
Pietro Incardona committed

add_subdirectory (src)

Pietro Incardona's avatar
Pietro Incardona committed