Select Git revision
CMakeLists.txt-template
-
Stéphane Del Pino authoredStéphane Del Pino authored
CMakeLists.txt-template 4.34 KiB
cmake_minimum_required (VERSION 3.19)
project("_PLUGIN_LOW_")
set(PUGS_PREFIX_PATH "" CACHE STRING "pugs intall dir")
string(COMPARE EQUAL "${PUGS_PREFIX_PATH}" "" pugs_prefix_undefined)
if (pugs_prefix_undefined)
message(FATAL_ERROR "PUGS_PREFIX_PATH must be defined")
endif()
# CMake utils
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# Forbids in-source builds
include(CheckNotInSources)
# use PkgConfig to find packages
find_package(PkgConfig REQUIRED)
find_package(Pugs REQUIRED)
list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/Kokkos")
include(KokkosConfig)
list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/pugs")
include(PugsCompileFlags)
if (${PUGS_HAS_MPI})
set(HDF5_PREFER_PARALLEL TRUE)
list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/HighFive")
include(HighFiveConfig)
if (TARGET HighFive)
set(HIGHFIVE_TARGET HighFive::HighFive)
endif()
endif()
include(PugsTargets)
#------------------------------------------------------
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PUGS_CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_STANDARD "${PUGS_CMAKE_CXX_STANDARD}")
# -----------------------------------------------------
# dynamic libraries
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
link_libraries("-rdynamic")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
#------------------------------------------------------
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
#------------------------------------------------------
set(_PLUGIN_UP__SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(_PLUGIN_UP__BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
#------------------------------------------------------
# use pugs compilation settings
set(CMAKE_BUILD_TYPE "${PUGS_CMAKE_BUILD_TYPE}" CACHE STRING "" FORCE)
set(CMAKE_CXX_COMPILER "${PUGS_CMAKE_CXX_COMPILER}" CACHE STRING "" FORCE)
set(CMAKE_C_COMPILER "${PUGS_CMAKE_C_COMPILER}" CACHE STRING "" FORCE)
mark_as_advanced(CMAKE_BUILD_TYPE CMAKE_CXX_COMPILER CMAKE_C_COMPILER)
#------------------------------------------------------
# default build shared libraries
set(BUILD_SHARED_LIBS ON CACHE STRING "" FORCE)
#------------------------------------------------------
# Checks if compiler version is compatible with Pugs sources
set(GNU_CXX_MIN_VERSION "10.0.0")
set(CLANG_CXX_MIN_VERSION "11.0.0")
#------------------------------------------------------
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include")
include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include/kokkos")
include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include/tao/")
if (${PUGS_HAS_MPI})
include_directories(SYSTEM "${MPI_CXX_INCLUDE_DIRS}")
endif()
include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include")
link_directories(${PUGS_PREFIX_PATH}/lib)
#------------------------------------------------------
if(${PUGS_HAS_MPI})
set(MPIEXEC_OPTION_FLAGS --oversubscribe)
if (NOT "$ENV{GITLAB_CI}" STREQUAL "")
set(MPIEXEC_OPTION_FLAGS ${MPIEXEC_OPTION_FLAGS} --allow-run-as-root)
endif()
set(MPIEXEC_NUMPROC 3)
set(MPIEXEC_PATH_FLAG --path)
set(MPI_LAUNCHER ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_NUMPROC} ${MPIEXEC_OPTION_FLAGS})
endif()
add_custom_target(all_unit_tests
DEPENDS unit_tests mpi_unit_tests
)
add_custom_target(check
DEPENDS test
)
add_custom_target(test
DEPENDS run_all_unit_tests
)
add_custom_target(run_all_unit_tests
DEPENDS run_mpi_unit_tests
)
if(PUGS_HAS_MPI)
set(RUN_MPI_UNIT_TESTS_COMMENT "Running mpi_unit_tests [using ${MPIEXEC_NUMPROC} procs]")
else()
set(RUN_MPI_UNIT_TESTS_COMMENT "Running mpi_unit_tests [sequentially]")
endif()
add_custom_target(run_mpi_unit_tests
COMMAND ${MPI_LAUNCHER} "${_PLUGIN_UP__BINARY_DIR}/mpi_unit_tests" --allow-running-no-tests
WORKING_DIRECTORY ${_PLUGIN_UP__BINARY_DIR}
DEPENDS run_unit_tests
COMMENT ${RUN_MPI_UNIT_TESTS_COMMENT}
)
add_custom_target(run_unit_tests
COMMAND "${_PLUGIN_UP__BINARY_DIR}/unit_tests" --allow-running-no-tests
DEPENDS all_unit_tests
COMMENT "Running unit_tests"
)
#------------------------------------------------------
add_library(_PLUGIN_NAME_
_PLUGIN_NAME_Module.cpp
# add cpp sources files here
)
target_link_libraries(_PLUGIN_NAME_
${HIGHFIVE_TARGET}
)
#------------------------------------------------------
add_subdirectory(tests)
#------------------------------------------------------
install(TARGETS _PLUGIN_NAME_)