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

Improve plugin generation and compilation. Add unit tests handling.

parent f070d5c8
No related branches found
No related tags found
No related merge requests found
...@@ -271,7 +271,16 @@ if (PUGS_ENABLE_HDF5 MATCHES "^(AUTO|ON)$") ...@@ -271,7 +271,16 @@ if (PUGS_ENABLE_HDF5 MATCHES "^(AUTO|ON)$")
set(HIGHFIVE_UNIT_TESTS OFF) # no unit tests set(HIGHFIVE_UNIT_TESTS OFF) # no unit tests
set(HIGHFIVE_EXAMPLES OFF) # no examples set(HIGHFIVE_EXAMPLES OFF) # no examples
add_subdirectory(${PUGS_SOURCE_DIR}/packages/HighFive/) add_subdirectory(${PUGS_SOURCE_DIR}/packages/HighFive/)
set(HIGHFIVE_TARGET HighFive) set(HIGHFIVE_TARGET HighFive::HighFive)
add_library(PkgConfig::HDF5 STATIC IMPORTED)
set_property(TARGET PkgConfig::HDF5 PROPERTY
IMPORTED_LOCATION "${HDF5_LIBRARIES}")
set_property(TARGET PkgConfig::HDF5 PROPERTY
INTERFACE_INCLUDE_DIRECTORIES "${HDF5_INCLUDE_DIRS}")
set(HDF5_TARGET PkgConfig::HDF5)
endif() endif()
else() else()
message(STATUS "HDF5 support is deactivated since pugs will not be build with MPI support") message(STATUS "HDF5 support is deactivated since pugs will not be build with MPI support")
...@@ -280,6 +289,7 @@ if (PUGS_ENABLE_HDF5 MATCHES "^(AUTO|ON)$") ...@@ -280,6 +289,7 @@ if (PUGS_ENABLE_HDF5 MATCHES "^(AUTO|ON)$")
set(PUGS_HAS_HDF5 ${HDF5_FOUND}) set(PUGS_HAS_HDF5 ${HDF5_FOUND})
else() else()
unset(HIGHFIVE_TARGET) unset(HIGHFIVE_TARGET)
unset(HDF5_TARGET PkgConfig::HDF5)
unset(PUGS_HAS_HDF5) unset(PUGS_HAS_HDF5)
endif() endif()
...@@ -410,6 +420,10 @@ endif() ...@@ -410,6 +420,10 @@ endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PUGS_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PUGS_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PUGS_CXX_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PUGS_CXX_FLAGS}")
message(STATUS "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
# Add debug mode for Standard C++ library (not for AppleClang since it is broken) # Add debug mode for Standard C++ library (not for AppleClang since it is broken)
if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1")
...@@ -682,6 +696,7 @@ target_link_libraries( ...@@ -682,6 +696,7 @@ target_link_libraries(
) )
target_include_directories(pugs PUBLIC ${PETSC_INCLUDE_DIRS}) target_include_directories(pugs PUBLIC ${PETSC_INCLUDE_DIRS})
target_include_directories(pugs PUBLIC ${HDF5_INCLUDE_DIRS})
# Checkpoint management tool # Checkpoint management tool
add_executable( add_executable(
...@@ -899,3 +914,14 @@ endif() ...@@ -899,3 +914,14 @@ endif()
message("================================") message("================================")
message("") message("")
configure_file(
${PUGS_SOURCE_DIR}/cmake/PugsCompileFlags.cmake.in
${PUGS_BINARY_DIR}/cmake/PugsCompileFlags.cmake
@ONLY
)
install(
FILES ${PUGS_BINARY_DIR}/cmake/PugsCompileFlags.cmake
DESTINATION lib/cmake/pugs
)
@PACKAGE_INIT@
set(PUGS_CMAKE_CXX_FLAGS "@CMAKE_CXX_FLAGS@")
set(PUGS_CMAKE_CXX_STANDARD "@CMAKE_CXX_STANDARD@")
set(PUGS_CMAKE_BUILD_TYPE "@CMAKE_BUILD_TYPE@")
set(PUGS_CMAKE_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
set(PUGS_CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
set(PUGS_HAS_MPI "@PUGS_HAS_MPI@")
...@@ -66,4 +66,8 @@ add_dependencies(PugsCheckpointing ...@@ -66,4 +66,8 @@ add_dependencies(PugsCheckpointing
target_link_libraries( target_link_libraries(
PugsCheckpointing PugsCheckpointing
${HIGHFIVE_TARGET} ${HIGHFIVE_TARGET}
# ${HDF5_TARGET}
) )
#target_include_directories(PugsCheckpointing PUBLIC ${HDF5_INCLUDE_DIRS})
#target_include_directories(PugsAlgebra PUBLIC ${SLEPC_INCLUDE_DIRS})
...@@ -61,18 +61,32 @@ then ...@@ -61,18 +61,32 @@ then
exit 1 exit 1
fi fi
function substitute()
{
sed s/_PLUGIN_NAME_/${PLUGIN_NAME}/g | sed s/_PLUGIN_LOW_/${PLUGIN_LOW}/g | sed s/_PLUGIN_UP_/${PLUGIN_UP}/g
}
mkdir "${PLUGIN_LOW}" mkdir -p "${PLUGIN_LOW}/cmake"
mkdir "${PLUGIN_LOW}/cmake" mkdir -p "${PLUGIN_LOW}/tests"
cp "${PUGS_DIR}"/tests/MeshDataBaseForTests.hpp "${PLUGIN_LOW}"/tests/
cp "${PUGS_DIR}"/tests/MeshDataBaseForTests.cpp "${PLUGIN_LOW}"/tests/
cp "${PUGS_DIR}"/tests/ParallelCheckerTester.hpp "${PLUGIN_LOW}"/tests/
cp "${PUGS_DIR}"/tests/ParallelCheckerTester.cpp "${PLUGIN_LOW}"/tests/
cp "${PUGS_DIR}"/tests/test_main.cpp "${PLUGIN_LOW}"/tests/
cp "${PUGS_DIR}"/tests/mpi_test_main.cpp "${PLUGIN_LOW}"/tests/
cp "${PUGS_DIR}"/cmake/CheckNotInSources.cmake "${PLUGIN_LOW}"/cmake/ cp "${PUGS_DIR}"/cmake/CheckNotInSources.cmake "${PLUGIN_LOW}"/cmake/
cp "${PUGS_DIR}"/tools/plugin-template/FindPugs.cmake "${PLUGIN_LOW}"/cmake/ cp "${PUGS_DIR}"/tools/plugin-template/FindPugs.cmake "${PLUGIN_LOW}"/cmake/
cp "${PUGS_DIR}"/.gitignore "${PLUGIN_LOW}" cp "${PUGS_DIR}"/.gitignore "${PLUGIN_LOW}"
cp "${PUGS_DIR}"/.clang-format "${PLUGIN_LOW}" cp "${PUGS_DIR}"/.clang-format "${PLUGIN_LOW}"
cat "${PUGS_DIR}"/tools/plugin-template/CMakeLists.txt-template | sed s/_PLUGIN_NAME_/${PLUGIN_NAME}/g | sed s/_PLUGIN_LOW_/${PLUGIN_LOW}/g | sed s/_PLUGIN_UP_/${PLUGIN_UP}/g > "${PLUGIN_LOW}"/CMakeLists.txt
cat "${PUGS_DIR}"/tools/plugin-template/Module.hpp-template | sed s/_PLUGIN_NAME_/${PLUGIN_NAME}/g | sed s/_PLUGIN_LOW_/${PLUGIN_LOW}/g | sed s/_PLUGIN_UP_/${PLUGIN_UP}/g > "${PLUGIN_LOW}"/${PLUGIN_NAME}Module.hpp cat "${PUGS_DIR}"/tools/plugin-template/CMakeLists.txt-template | substitute > "${PLUGIN_LOW}"/CMakeLists.txt
cat "${PUGS_DIR}"/tools/plugin-template/Module.cpp-template | sed s/_PLUGIN_NAME_/${PLUGIN_NAME}/g | sed s/_PLUGIN_LOW_/${PLUGIN_LOW}/g | sed s/_PLUGIN_UP_/${PLUGIN_UP}/g > "${PLUGIN_LOW}"/${PLUGIN_NAME}Module.cpp cat "${PUGS_DIR}"/tools/plugin-template/Module.hpp-template | substitute > "${PLUGIN_LOW}"/${PLUGIN_NAME}Module.hpp
cat "${PUGS_DIR}"/tools/plugin-template/README.md-template | sed s/_PLUGIN_NAME_/${PLUGIN_NAME}/g | sed s/_PLUGIN_LOW_/${PLUGIN_LOW}/g | sed s/_PLUGIN_UP_/${PLUGIN_UP}/g > "${PLUGIN_LOW}"/README.md cat "${PUGS_DIR}"/tools/plugin-template/Module.cpp-template | substitute > "${PLUGIN_LOW}"/${PLUGIN_NAME}Module.cpp
cat "${PUGS_DIR}"/tools/plugin-template/README.md-template | substitute > "${PLUGIN_LOW}"/README.md
cat "${PUGS_DIR}"/tools/plugin-template/tests-CMakeLists.txt-template | substitute > "${PLUGIN_LOW}"/tests/CMakeLists.txt
(cd "${PLUGIN_LOW}"; git init -q) (cd "${PLUGIN_LOW}"; git init -q)
(cd "${PLUGIN_LOW}"; git add .) (cd "${PLUGIN_LOW}"; git add .)
......
...@@ -2,6 +2,14 @@ cmake_minimum_required (VERSION 3.19) ...@@ -2,6 +2,14 @@ cmake_minimum_required (VERSION 3.19)
project("_PLUGIN_LOW_") project("_PLUGIN_LOW_")
if (NOT PUGS_PREFIX_PATH)
if (DEFINED ENV{PUGS_INSTALL_DIR})
message(STATUS "Looking for pugs in ${PUGS_INSTALL_DIR}")
else()
message(FATAL_ERROR "you must set PUGS_INSTALL_DIR environment variable")
endif()
endif()
# CMake utils # CMake utils
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
...@@ -12,6 +20,21 @@ include(CheckNotInSources) ...@@ -12,6 +20,21 @@ include(CheckNotInSources)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
find_package(Pugs 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/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 # dynamic libraries
...@@ -21,59 +44,25 @@ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") ...@@ -21,59 +44,25 @@ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
#------------------------------------------------------ #------------------------------------------------------
set(CMAKE_CONFIGURATION_TYPES "Release;Debug;Coverage" CACHE STRING INTERNAL FORCE ) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
#------------------------------------------------------ #------------------------------------------------------
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(PUGS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(CMAKE_BUILD_TYPE "${PUGS_CMAKE_BUILD_TYPE}" CACHE STRING "" FORCE)
set(PUGS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") set(CMAKE_CXX_COMPILER "${PUGS_CMAKE_CXX_COMPILER}" CACHE STRING "" FORCE)
set(CMAKE_C_COMPILER "${PUGS_CMAKE_C_COMPILER}" CACHE STRING "" FORCE)
# Add new build types
set(CMAKE_CXX_FLAGS_COVERAGE
"-g -O0 --coverage"
CACHE STRING "Flags used by the C++ compiler during coverage builds."
FORCE )
set(CMAKE_C_FLAGS_COVERAGE
"-g -O0 --coverage"
CACHE STRING "Flags used by the C compiler during coverage builds."
FORCE )
set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
"--coverage"
CACHE STRING "Flags used for linking binaries during coverage builds."
FORCE )
set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
"--coverage"
CACHE STRING "Flags used by the shared libraries linker during coverage builds."
FORCE )
mark_as_advanced(
CMAKE_CXX_FLAGS_COVERAGE
CMAKE_C_FLAGS_COVERAGE
CMAKE_EXE_LINKER_FLAGS_COVERAGE
CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
if(CMAKE_BUILD_TYPE)
string(REGEX MATCH "^(Release|Debug|Coverage)$" VALID_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
if(NOT VALID_BUILD_TYPE)
message(FATAL_ERROR "Invalid CMAKE_BUILD_TYPE: '${CMAKE_BUILD_TYPE}'")
endif()
endif()
# Default build type is Release mark_as_advanced(CMAKE_BUILD_TYPE CMAKE_CXX_COMPILER CMAKE_C_COMPILER)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build: Release Debug Coverage."
FORCE)
endif()
#------------------------------------------------------ #------------------------------------------------------
# default build shared libraries # default build shared libraries
if (NOT BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ON CACHE STRING "" FORCE) set(BUILD_SHARED_LIBS ON CACHE STRING "" FORCE)
endif()
#------------------------------------------------------ #------------------------------------------------------
...@@ -82,14 +71,81 @@ set(GNU_CXX_MIN_VERSION "10.0.0") ...@@ -82,14 +71,81 @@ set(GNU_CXX_MIN_VERSION "10.0.0")
set(CLANG_CXX_MIN_VERSION "11.0.0") set(CLANG_CXX_MIN_VERSION "11.0.0")
#------------------------------------------------------ #------------------------------------------------------
# Change Kokkos namespace to avoid conflicts
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DKokkos=InlineKokkos")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}") include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include") include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include")
include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include/kokkos") include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include/kokkos")
include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include/tao/") 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_ add_library(_PLUGIN_NAME_
_PLUGIN_NAME_Module.cpp _PLUGIN_NAME_Module.cpp
# add cpp sources files here
) )
#------------------------------------------------------
add_subdirectory(tests)
#------------------------------------------------------
install(TARGETS _PLUGIN_NAME_)
set(EXECUTABLE_OUTPUT_PATH ${_PLUGIN_UP__BINARY_DIR})
include_directories(${_PLUGIN_UP__SOURCE_DIR}/tests)
add_executable (unit_tests
test_main.cpp
# add unit tests here
)
set(_PLUGIN_UP__checkpointing_TESTS
)
if(PUGS_HAS_HDF5)
list(APPEND _PLUGIN_UP__checkpointing_TESTS
)
endif(PUGS_HAS_HDF5)
add_executable (mpi_unit_tests
mpi_test_main.cpp
${_PLUGIN_UP__checkpointing_TESTS}
# add mpi unit tests here
)
add_library(test_MeshDataBase
MeshDataBaseForTests.cpp)
add_library(test_ParallelCheckerTester
ParallelCheckerTester.cpp)
target_link_libraries (test_ParallelCheckerTester
${HIGHFIVE_TARGET})
target_link_libraries (unit_tests
test_MeshDataBase
test_ParallelCheckerTester
PugsAlgebra
PugsAnalysis
PugsUtils
PugsLanguage
PugsLanguageAST
PugsLanguageModules
PugsMesh
PugsAlgebra
PugsUtils
PugsLanguageUtils
PugsScheme
PugsOutput
PugsUtils
PugsCheckpointing
PugsDev
PugsAlgebra
PugsMesh
Kokkos::kokkos
${PARMETIS_LIBRARIES}
${MPI_CXX_LINK_FLAGS} ${MPI_CXX_LIBRARIES}
${PETSC_LIBRARIES}
Catch2
${PUGS_STD_LINK_FLAGS}
${HIGHFIVE_TARGET}
${SLURM_LIBRARY}
stdc++fs
)
target_link_libraries (mpi_unit_tests
test_MeshDataBase
test_ParallelCheckerTester
PugsAlgebra
PugsAnalysis
PugsUtils
PugsLanguage
PugsLanguageAST
PugsLanguageModules
PugsMesh
PugsAlgebra
PugsUtils
PugsLanguageUtils
PugsScheme
PugsOutput
PugsUtils
PugsCheckpointing
PugsDev
PugsAlgebra
PugsMesh
Kokkos::kokkos
${PARMETIS_LIBRARIES}
${MPI_CXX_LINK_FLAGS} ${MPI_CXX_LIBRARIES}
${PETSC_LIBRARIES}
Catch2
${PUGS_STD_LINK_FLAGS}
${HIGHFIVE_TARGET}
${SLURM_LIBRARY}
stdc++fs
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment