diff --git a/CMakeLists.txt b/CMakeLists.txt index 08782444aaad92cb5142f5940b19272dfea18249..6fade4d59f21e68559cc68a92fdaaea908f8996d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -141,8 +141,16 @@ endif() #------------------------------------------------------ # Search for ParMETIS +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}) - find_package(ParMETIS) 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,18 +259,23 @@ set(PUGS_ENABLE_HDF5 AUTO CACHE STRING "Choose one of: AUTO ON OFF") if (PUGS_ENABLE_HDF5 MATCHES "^(AUTO|ON)$") - # May be risky. (make to show pugs build options) - set(HDF5_PREFER_PARALLEL TRUE) - find_package(HDF5) - if (HDF5_FOUND) - # HighFive - set(HIGHFIVE_USE_BOOST OFF) # no Boost - set(HIGHFIVE_BUILD_DOCS OFF) # no doc - set(HIGHFIVE_UNIT_TESTS OFF) # no unit tests - set(HIGHFIVE_UNIT_TESTS OFF) # no unit tests - set(HIGHFIVE_EXAMPLES OFF) # no examples - add_subdirectory(${PUGS_SOURCE_DIR}/packages/HighFive/) - set(HIGHFIVE_TARGET HighFive) + if (MPI_FOUND) + # May be risky. (make to show pugs build options) + set(HDF5_PREFER_PARALLEL TRUE) + find_package(HDF5) + if (HDF5_FOUND) + # HighFive + set(HIGHFIVE_USE_BOOST OFF) # no Boost + set(HIGHFIVE_BUILD_DOCS OFF) # no doc + set(HIGHFIVE_UNIT_TESTS OFF) # no unit tests + set(HIGHFIVE_UNIT_TESTS OFF) # no unit tests + set(HIGHFIVE_EXAMPLES OFF) # no examples + 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() @@ -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,17 +669,19 @@ 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( @@ -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("") diff --git a/cmake/FindParMETIS.cmake b/cmake/FindParMETIS.cmake index d9b91d33d92617f3282d4eac2184549b62f62418..5fb1bb961c53897ab8f9cd33a2bf6bedfa41a783 100644 --- a/cmake/FindParMETIS.cmake +++ b/cmake/FindParMETIS.cmake @@ -1,6 +1,5 @@ # 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) diff --git a/src/algebra/CMakeLists.txt b/src/algebra/CMakeLists.txt index 74f40290a2f9250cc2296ec62358b44c366ffc85..d215b09b50d9933f84aab02855388bb4bd25dced 100644 --- a/src/algebra/CMakeLists.txt +++ b/src/algebra/CMakeLists.txt @@ -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}) diff --git a/src/mesh/CMakeLists.txt b/src/mesh/CMakeLists.txt index 78b72bcafc640ecc888c0997eeb3ff8f3056db58..76f5f96d0b98944d3bcd65e42e36a705541886f9 100644 --- a/src/mesh/CMakeLists.txt +++ b/src/mesh/CMakeLists.txt @@ -48,5 +48,6 @@ add_library( target_link_libraries( PugsMesh + ${PARMETIS_TARGET} ${HIGHFIVE_TARGET} ) diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt index 39e8cb35925fb1417222080e2ac0e060814ad353..4d74c5e195fe0361819315cd3732661ba7589e56 100644 --- a/src/utils/CMakeLists.txt +++ b/src/utils/CMakeLists.txt @@ -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 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 871bfbe45bded361f68b64b0a315f7daa9e508a7..23a4ac3094424515b6d488a577781cfe6bbcce5e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -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