Skip to content
Snippets Groups Projects
Commit f070d5c8 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Improve installation procedure and "modernize" CMake usage

parent ba1af0d0
Branches
Tags
No related merge requests found
......@@ -141,8 +141,16 @@ endif()
#------------------------------------------------------
# Search for ParMETIS
if(${MPI_FOUND})
find_package(ParMETIS)
if(PARMETIS_LIBRARIES)
add_library(PkgConfig::ParMETIS STATIC IMPORTED)
set_property(TARGET PkgConfig::ParMETIS PROPERTY
IMPORTED_LOCATION "${PARMETIS_LIBRARIES}")
set(PARMETIS_TARGET PkgConfig::ParMETIS)
endif()
if(${MPI_FOUND})
if (NOT PARMETIS_LIBRARIES)
if(PUGS_ENABLE_MPI MATCHES "^AUTO$")
message(STATUS "MPI support deactivated: ParMETIS cannot be found!")
......@@ -168,7 +176,16 @@ set(PUGS_ENABLE_PETSC AUTO CACHE STRING
if (PUGS_ENABLE_PETSC MATCHES "^(AUTO|ON)$")
if (MPI_FOUND)
# PETSc support is deactivated if MPI is not found
pkg_check_modules(PETSC PETSc)
pkg_check_modules(PETSC IMPORTED_TARGET GLOBAL PETSc)
set_property(TARGET PkgConfig::PETSC PROPERTY
IMPORTED_LOCATION "${PETSC_LIBRARIES}"
)
set_property(TARGET PkgConfig::PETSC PROPERTY
INTERFACE_INCLUDE_DIRECTORIES "${PETSC_INCLUDE_DIRS}"
)
set(PETSC_TARGET PkgConfig::PETSC)
else()
message(STATUS "PETSc support is deactivated since pugs will not be build with MPI support")
set(PETSC_FOUND FALSE)
......@@ -196,7 +213,16 @@ set(PUGS_ENABLE_SLEPC AUTO CACHE STRING
if (PUGS_ENABLE_SLEPC MATCHES "^(AUTO|ON)$")
if (PETSC_FOUND)
# SLEPc support is deactivated if PETSc is not found
pkg_check_modules(SLEPC SLEPc)
pkg_check_modules(SLEPC IMPORTED_TARGET GLOBAL SLEPc)
set_property(TARGET PkgConfig::SLEPC PROPERTY
IMPORTED_LOCATION "${SLEPC_LIBRARIES}"
)
set_property(TARGET PkgConfig::SLEPC PROPERTY
INTERFACE_INCLUDE_DIRECTORIES "${SLEPC_INCLUDE_DIRS}"
)
set(SLEPC_TARGET PkgConfig::SLEPC)
else()
message(STATUS "SLEPc support is deactivated since pugs will not be build with PETSc support")
set(SLEPC_FOUND FALSE)
......@@ -233,6 +259,7 @@ set(PUGS_ENABLE_HDF5 AUTO CACHE STRING
"Choose one of: AUTO ON OFF")
if (PUGS_ENABLE_HDF5 MATCHES "^(AUTO|ON)$")
if (MPI_FOUND)
# May be risky. (make to show pugs build options)
set(HDF5_PREFER_PARALLEL TRUE)
find_package(HDF5)
......@@ -246,6 +273,10 @@ if (PUGS_ENABLE_HDF5 MATCHES "^(AUTO|ON)$")
add_subdirectory(${PUGS_SOURCE_DIR}/packages/HighFive/)
set(HIGHFIVE_TARGET HighFive)
endif()
else()
message(STATUS "HDF5 support is deactivated since pugs will not be build with MPI support")
set(HDF5_FOUND FALSE)
endif()
set(PUGS_HAS_HDF5 ${HDF5_FOUND})
else()
unset(HIGHFIVE_TARGET)
......@@ -259,7 +290,14 @@ find_package(Slurm)
set(PUGS_HAS_SLURM ${SLURM_FOUND})
if (${SLURM_FOUND})
if (SLURM_FOUND)
add_library(PkgConfig::Slurm STATIC IMPORTED)
set_property(TARGET PkgConfig::Slurm PROPERTY
IMPORTED_LOCATION "${SLURM_LIBRARY}")
set_property(TARGET PkgConfig::Slurm PROPERTY
INTERFACE_INCLUDE_DIRECTORIES "${SLURM_INCLUDE_DIR}")
set(SLURM_TARGET PkgConfig::Slurm)
include_directories(SYSTEM "${SLURM_INCLUDE_DIR}")
else()
set(SLURM_LIBRARY "")
......@@ -442,7 +480,6 @@ add_custom_target(run_mpi_unit_tests
COMMENT ${RUN_MPI_UNIT_TESTS_COMMENT}
)
add_custom_target(run_unit_tests
COMMAND "${PUGS_BINARY_DIR}/unit_tests"
DEPENDS all_unit_tests
......@@ -632,18 +669,20 @@ target_link_libraries(
PugsLanguageUtils
PugsCheckpointing
Kokkos::kokkos
${PETSC_LIBRARIES}
${SLEPC_LIBRARIES}
${PARMETIS_LIBRARIES}
${PETSC_TARGET}
${SLEPC_TARGET}
${PARMETIS_TARGET}
${MPI_CXX_LINK_FLAGS} ${MPI_CXX_LIBRARIES}
${KOKKOS_CXX_FLAGS}
${OPENMP_LINK_FLAGS}
${PUGS_STD_LINK_FLAGS}
${HIGHFIVE_TARGET}
${SLURM_LIBRARY}
${SLURM_TARGET}
stdc++fs
)
target_include_directories(pugs PUBLIC ${PETSC_INCLUDE_DIRS})
# Checkpoint management tool
add_executable(
pugs_checkpoint
......@@ -667,19 +706,18 @@ target_link_libraries(
PugsMesh
PugsOutput
Kokkos::kokkos
${PETSC_LIBRARIES}
${SLEPC_LIBRARIES}
${PARMETIS_LIBRARIES}
${PETSC_TARGET}
${SLEPC_TARGET}
${PARMETIS_TARGET}
${MPI_CXX_LINK_FLAGS} ${MPI_CXX_LIBRARIES}
${KOKKOS_CXX_FLAGS}
${OPENMP_LINK_FLAGS}
${PUGS_STD_LINK_FLAGS}
${HIGHFIVE_TARGET}
${SLURM_LIBRARY}
${SLURM_TARGET}
stdc++fs
)
# -------------------- Documentation --------------------
include(PugsDoc)
......@@ -692,7 +730,6 @@ include(PugsDoxygen)
install(TARGETS
pugs
pugs_checkpoint
PugsMesh
PugsAlgebra
PugsAnalysis
PugsCheckpointing
......@@ -701,18 +738,33 @@ install(TARGETS
PugsLanguage
PugsLanguageAST
PugsLanguageModules
PugsLanguageAlgorithms
PugsLanguageUtils
PugsMesh
PugsAlgebra
PugsScheme
PugsUtils
PugsOutput
PugsLanguageUtils
PugsScheme
kokkos
Catch2
EXPORT "${PROJECT_NAME}Targets"
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
ARCHIVE DESTINATION lib
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
PugsConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion
)
install(EXPORT PugsTargets
FILE PugsTargets.cmake
NAMESPACE Pugs::
DESTINATION lib/cmake/pugs
)
# ------------------- Build options -------------------
message("")
......
# Looking for ParMETIS
find_path(PARMETIS_INCLUDE_DIR parmetis.h
PATH_SUFFIX include parmetis $ENV{PARMETIS_INCDIR})
......@@ -17,7 +16,8 @@ if(EXISTS "${PARMETIS_INCLUDE_DIR}/parmetis.h")
find_path(METIS_INCLUDE_DIR metis.h $ENV{METIS_INCDIR})
if(EXISTS "${METIS_INCLUDE_DIR}/metis.h")
message(STATUS "Found metis.h in ${METIS_INCLUDE_DIR}")
set(PARMETIS_LIBRARIES ${LIB_PARMETIS} ${LIB_METIS})
set(PARMETIS_LIBRARIES ${LIB_PARMETIS})
set(METIS_LIBRARIES ${LIB_METIS})
message(STATUS "Found parmetis/metis libraries ${PARMETIS_LIBRARIES}")
else()
message(WARNING "** Could not find metis.h.\n** Is METIS_INCDIR correctly set (Actual: \"$ENV{METIS_INCDIR}\")?")
......@@ -27,3 +27,4 @@ else()
endif()
mark_as_advanced(PARMETIS_INCLUDE_DIR PARMETIS_LIBRARIES)
mark_as_advanced(METIS_INCLUDE_DIR METIS_LIBRARIES)
......@@ -9,7 +9,10 @@ add_library(
target_link_libraries(
PugsAlgebra
${PETSC_LIBRARIES}
${SLEPC_LIBRARIES}
${PETSC_TARGET}
${SLEPC_TARGET}
${HIGHFIVE_TARGET}
)
target_include_directories(PugsAlgebra PUBLIC ${PETSC_INCLUDE_DIRS})
target_include_directories(PugsAlgebra PUBLIC ${SLEPC_INCLUDE_DIRS})
......@@ -48,5 +48,6 @@ add_library(
target_link_libraries(
PugsMesh
${PARMETIS_TARGET}
${HIGHFIVE_TARGET}
)
......@@ -33,11 +33,15 @@ endif()
target_link_libraries(
PugsUtils
${PETSC_LIBRARIES}
${SLEPC_LIBRARIES}
${PETSC_TARGET}
${SLEPC_TARGET}
${SLURM_TARGET}
${HIGHFIVE_TARGET}
)
target_include_directories(PugsUtils PUBLIC ${PETSC_INCLUDE_DIRS})
target_include_directories(PugsUtils PUBLIC ${SLURM_INCLUDE_DIRS})
# --------------- get git revision info ---------------
# Generates revision header file
......@@ -59,12 +63,11 @@ set_source_files_properties(
add_custom_command(TARGET PugsGitRevison
COMMAND ${CMAKE_COMMAND} -E remove -f
${CMAKE_CURRENT_BINARY_DIR}/pugs_git_revision
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pugs_git_revision.hpp
POST_BUILD
COMMENT ""
)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pugs_git_revision.hpp
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_BINARY_DIR}/pugs_git_revision
${CMAKE_CURRENT_BINARY_DIR}/pugs_git_revision.hpp
......@@ -74,7 +77,6 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pugs_git_revision.hpp
)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pugs_git_revision
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -DPUGS_VERSION=${PUGS_VERSION} -DPUGS_SOURCE_DIR=${PUGS_SOURCE_DIR} -P ${PUGS_SOURCE_DIR}/cmake/GetPugsGitRevision.cmake
COMMENT "Check pugs git status"
VERBATIM
......
......@@ -4,6 +4,20 @@ include_directories(${PUGS_SOURCE_DIR}/src)
include_directories(${PUGS_BINARY_DIR}/src)
include_directories(${PUGS_SOURCE_DIR}/tests)
install(
DIRECTORY "${PUGS_SOURCE_DIR}/packages/Catch2/src/catch2"
DESTINATION "include"
FILES_MATCHING
PATTERN "*.hpp"
)
install(
DIRECTORY "${PUGS_BINARY_DIR}/generated-includes/catch2"
DESTINATION "include"
FILES_MATCHING
PATTERN "*.hpp"
)
set(checkpointing_sequential_TESTS
# this one should enventually integrate parallel tests
test_checkpointing_Checkpoint_sequential.cpp
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment