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) set(HDF5_PREFER_PARALLEL TRUE) list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/HighFive") include(HighFiveConfig) list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/pugs") include(PugsTargets) include(PugsCompileFlags) #------------------------------------------------------ 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/") include_directories(SYSTEM "${MPI_CXX_INCLUDE_DIRS}") get_target_property(_prop Pugs::PugsAlgebra INTERFACE_INCLUDE_DIRECTORIES) set(PUGS_INC_DIR "${PUGS_INC_DIR};${_prop}") get_target_property(_prop Pugs::PugsUtils INTERFACE_INCLUDE_DIRECTORIES) set(PUGS_INC_DIR "${PUGS_INC_DIR};${_prop}") get_target_property(_prop Pugs::pugs INTERFACE_INCLUDE_DIRECTORIES) set(PUGS_INC_DIR "${PUGS_INC_DIR};${_prop}") include_directories(SYSTEM ${PUGS_INC_DIR}) 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 ) #------------------------------------------------------ add_subdirectory(tests) #------------------------------------------------------ install(TARGETS _PLUGIN_NAME_)