Revision d7833f1dcac15add7acadea3c815f4d5a4054a57 authored by renchao_lu on 12 April 2021, 13:38:53 UTC, committed by renchao_lu on 23 April 2021, 09:11:34 UTC
1 parent 76f0149
Dependencies.cmake
set(CMAKE_FOLDER ThirdParty)
if(OGS_BUILD_TESTING)
CPMAddPackage(
NAME googletest
GITHUB_REPOSITORY google/googletest
GIT_TAG 389cb68b87193358358ae87cc56d257fd0d80189
OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt ON"
EXCLUDE_FROM_ALL YES
)
CPMAddPackage(
NAME autocheck
GITHUB_REPOSITORY ufz/autocheck
GIT_TAG e388ecbb31c49fc2724c8d0436da313b6edca7fd
DOWNLOAD_ONLY YES
)
if(autocheck_ADDED)
add_library(autocheck INTERFACE IMPORTED)
target_include_directories(
autocheck SYSTEM INTERFACE ${autocheck_SOURCE_DIR}/include
)
endif()
endif()
CPMAddPackage(
NAME exprtk
GITHUB_REPOSITORY ArashPartow/exprtk
GIT_TAG c7c219480d9678eec7383a4a99030683c4a84d91
DOWNLOAD_ONLY YES
)
if(exprtk_ADDED)
add_library(exprtk INTERFACE IMPORTED)
target_include_directories(exprtk SYSTEM INTERFACE ${exprtk_SOURCE_DIR})
endif()
CPMAddPackage(NAME spdlog GITHUB_REPOSITORY gabime/spdlog VERSION 1.8.2)
CPMAddPackage(
NAME tclap
GITHUB_REPOSITORY ufz/tclap
GIT_TAG 03abc3a3327214137c6ffd5b9a6efe23f0927cc2
DOWNLOAD_ONLY YES
)
if(tclap_ADDED)
add_library(tclap INTERFACE IMPORTED)
target_include_directories(
tclap SYSTEM INTERFACE ${tclap_SOURCE_DIR}/include
)
endif()
CPMAddPackage(
NAME tetgen GITHUB_REPOSITORY ufz/tetgen
GIT_TAG 603ba181ebfaed38eec88532720e282606009b73
)
if(tetgen_ADDED)
install(PROGRAMS $<TARGET_FILE:tetgen> DESTINATION bin)
list(APPEND DISABLE_WARNINGS_TARGETS tet tetgen)
endif()
if(OGS_USE_PYTHON)
CPMAddPackage(
NAME pybind11
GITHUB_REPOSITORY pybind/pybind11
GIT_TAG f1abf5d9159b805674197f6bc443592e631c9130
# pybind11 uses old CMake find functionality, pass variables to use the
# same Python installation.
OPTIONS "PYTHON_INCLUDE_DIR ${Python3_INCLUDE_DIRS}"
"PYTHON_LIBRARIES ${Python3_LIBRARIES}"
"PYTHON_EXECUTABLE ${Python3_EXECUTABLE}"
"PYBIND11_PYTHON_VERSION ${Python3_VERSION}"
)
endif()
if(OGS_BUILD_PROCESS_ComponentTransport
OR OGS_BUILD_PROCESS_RichardsComponentTransport
)
CPMAddPackage(
NAME iphreeqc
GITHUB_REPOSITORY ufz/iphreeqc
GIT_TAG b1047d3eb03e7ef1b850231be35acb9c6a2cf345
DOWNLOAD_ONLY YES
)
if(iphreeqc_ADDED)
include(scripts/cmake/iphreeqc.cmake)
list(APPEND DISABLE_WARNINGS_TARGETS iphreeqc)
endif()
endif()
CPMFindPackage(
NAME Eigen3
GITLAB_REPOSITORY libeigen/eigen
GIT_TAG ${ogs.minimum_version.eigen}
DOWNLOAD_ONLY YES
)
if(Eigen3_ADDED)
add_library(Eigen3::Eigen INTERFACE IMPORTED)
target_include_directories(
Eigen3::Eigen SYSTEM INTERFACE ${Eigen3_SOURCE_DIR}
)
endif()
if(OGS_USE_MFRONT)
CPMAddPackage(
NAME MGIS
GITHUB_REPOSITORY ufz/MFrontGenericInterfaceSupport
GIT_TAG 04e7d1bfad83fdc36a5fedb9c3d2e3b0d4b7fccf
OPTIONS "enable-doxygen-doc OFF" "enable-fortran-bindings OFF"
EXCLUDE_FROM_ALL YES
)
if(MGIS_ADDED)
set_target_properties(MFrontGenericInterface PROPERTIES CXX_STANDARD 11)
list(APPEND DISABLE_WARNINGS_TARGETS MFrontGenericInterface)
endif()
endif()
string(REPLACE "." "_" BOOST_VERSION_UNDESCORE ${ogs.minimum_version.boost})
CPMFindPackage(
NAME Boost
VERSION ${ogs.minimum_version.boost}
URL https://dl.bintray.com/boostorg/release/${ogs.minimum_version.boost}/source/boost_${BOOST_VERSION_UNDESCORE}.tar.gz
)
if(Boost_ADDED)
add_library(Boost::boost INTERFACE IMPORTED)
target_include_directories(Boost::boost INTERFACE "${Boost_SOURCE_DIR}")
endif()
if(OGS_USE_XDMF)
# ZLIB is a HDF5 dependency
CPMFindPackage(
NAME ZLIB
GITHUB_REPOSITORY madler/zlib
VERSION 1.2.11
EXCLUDE_FROM_ALL YES
)
if(ZLIB_ADDED)
add_library(ZLIB::ZLIB ALIAS zlibstatic)
endif()
if(OGS_USE_MPI)
set(_hdf5_options "HDF5_ENABLE_PARALLEL ON")
endif()
string(REPLACE "." "_" HDF5_TAG ${ogs.minimum_version.hdf5})
CPMFindPackage(
NAME HDF5
GITHUB_REPOSITORY HDFGroup/hdf5
GIT_TAG hdf5-${HDF5_TAG}
VERSION ${ogs.minimum_version.hdf5}
OPTIONS "HDF5_EXTERNALLY_CONFIGURED 1"
"HDF5_GENERATE_HEADERS OFF"
"HDF5_BUILD_TOOLS OFF"
"HDF5_BUILD_EXAMPLES OFF"
"HDF5_BUILD_HL_LIB OFF"
"HDF5_BUILD_FORTRAN OFF"
"HDF5_BUILD_CPP_LIB OFF"
"HDF5_BUILD_JAVA OFF"
${_hdf5_options}
EXCLUDE_FROM_ALL YES
)
if(HDF5_ADDED)
target_include_directories(hdf5-static INTERFACE ${HDF5_BINARY_DIR})
list(APPEND DISABLE_WARNINGS_TARGETS hdf5-static)
set(HDF5_LIBRARIES hdf5-static)
set(HDF5_C_INCLUDE_DIR ${HDF5_SOURCE_DIR})
set(HDF5_INCLUDE_DIR ${HDF5_SOURCE_DIR})
endif()
CPMFindPackage(
NAME LibXml2
GITHUB_REPOSITORY GNOME/libxml2
VERSION ${ogs.minimum_version.libxml2}
GIT_TAG f93ca3e140a371b26366f747a408588c631e0fd1
OPTIONS "LIBXML2_WITH_TESTS OFF"
"LIBXML2_WITH_PROGRAMS OFF"
"LIBXML2_WITH_ICONV OFF"
"LIBXML2_WITH_ICU OFF"
"LIBXML2_WITH_LZMA OFF"
"LIBXML2_WITH_PYTHON OFF"
"LIBXML2_WITH_ZLIB OFF"
EXCLUDE_FROM_ALL YES
)
if(LibXml2_ADDED)
add_library(LibXml2::LibXml2 ALIAS LibXml2)
set(LIBXML2_INCLUDE_DIR ${LibXml2_SOURCE_DIR})
endif()
CPMAddPackage(
NAME xdmf
VERSION 3.0.0
GIT_REPOSITORY https://gitlab.opengeosys.org/ogs/xdmflib.git
GIT_TAG 8d5ae1e1cbf506b8ca2160745fc914e25690c8a4
OPTIONS "XDMF_LIBNAME OgsXdmf"
)
if(xdmf_ADDED)
target_include_directories(
OgsXdmf PUBLIC ${xdmf_SOURCE_DIR} ${xdmf_BINARY_DIR}
)
target_link_libraries(OgsXdmf Boost::boost ZLIB::ZLIB)
target_include_directories(
OgsXdmfCore PUBLIC ${xdmf_SOURCE_DIR}/core ${xdmf_BINARY_DIR}/core
PRIVATE ${xdmf_SOURCE_DIR}/CMake/VersionSuite
)
target_link_libraries(
OgsXdmfCore PUBLIC Boost::boost LibXml2::LibXml2 ${HDF5_LIBRARIES}
)
set_target_properties(
OgsXdmf OgsXdmfCore
PROPERTIES RUNTIME_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
LIBRARY_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
ARCHIVE_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
)
if(BUILD_SHARED_LIBS)
install(TARGETS OgsXdmf OgsXdmfCore
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
endif()
list(APPEND DISABLE_WARNINGS_TARGETS OgsXdmf OgsXdmfCore)
endif()
endif()
if(OGS_BUILD_SWMM)
CPMAddPackage(
NAME SWMMInterface GITHUB_REPOSITORY ufz/SwmmInterface
GIT_TAG 141e05ae1f419918799d7bf9178ebcd97feb1ed3
)
if(SWMMInterface_ADDED)
target_include_directories(
SwmmInterface SYSTEM PUBLIC ${SWMMInterface_SOURCE_DIR}
)
list(APPEND DISABLE_WARNINGS_TARGETS SWMM SwmmInterface)
endif()
endif()
CPMAddPackage(
NAME nlohmann_json
VERSION 3.6.1
# the git repo is incredibly large, so we download the archived include
# directory
URL https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip
URL_HASH
SHA256=69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf
)
if(nlohmann_json_ADDED)
add_library(nlohmann_json INTERFACE IMPORTED)
target_include_directories(
nlohmann_json INTERFACE ${nlohmann_json_SOURCE_DIR}
)
endif()
if(OGS_BUILD_GUI)
CPMAddPackage(
NAME rapidxml
VERSION 1.13
GITHUB_REPOSITORY ufz/rapidxml
GIT_TAG 2ae4b2888165a393dfb6382168825fddf00c27b9
EXCLUDE_FROM_ALL YES
)
if(rapidxml_ADDED)
add_library(rapidxml INTERFACE IMPORTED)
target_include_directories(rapidxml INTERFACE ${rapidxml_SOURCE_DIR})
endif()
endif()
if(OGS_BUILD_GUI)
find_package(Shapelib QUIET)
if(Shapelib_FOUND)
add_library(shp INTERFACE IMPORTED)
target_include_directories(shp INTERFACE ${Shapelib_INCLUDE_DIRS})
target_link_libraries(shp INTERFACE ${Shapelib_LIBRARIES})
else()
CPMAddPackage(
NAME Shapelib
GITHUB_REPOSITORY OSGeo/shapelib
VERSION 1.5.0
EXCLUDE_FROM_ALL YES
)
target_include_directories(
shp INTERFACE $<BUILD_INTERFACE:${Shapelib_SOURCE_DIR}>
)
endif()
endif()
if(OGS_USE_CVODE)
CPMAddPackage(
NAME CVODE
GITHUB_REPOSITORY ufz/cvode
VERSION 2.8.2
GIT_TAG 42d786bff4f950045d2de941677ecd4432cec855
OPTIONS "EXAMPLES_ENABLE OFF"
EXCLUDE_FROM_ALL YES
)
if(CVODE_ADDED)
add_library(CVODE::CVODE INTERFACE IMPORTED)
target_include_directories(
CVODE::CVODE INTERFACE ${CVODE_SOURCE_DIR}/include
${CVODE_BINARY_DIR}/include
)
target_link_libraries(
CVODE::CVODE INTERFACE sundials_cvode_static
sundials_nvecserial_static
)
endif()
endif()
# VTK ###
set(VTK_COMPONENTS vtkIOXML vtkIOLegacy)
if(OGS_BUILD_GUI)
list(
APPEND
VTK_COMPONENTS
vtkIOExport
vtkImagingCore
vtkInteractionStyle
vtkInteractionWidgets
vtkGUISupportQt
vtkRenderingOpenGL2
vtkRenderingContextOpenGL2
vtkFiltersTexture
vtkRenderingAnnotation
vtkRenderingCore
)
if(OGS_BUILD_UTILS)
list(APPEND VTK_COMPONENTS vtkFiltersParallel)
endif()
endif()
if(OGS_USE_MPI)
list(APPEND VTK_COMPONENTS vtkIOParallelXML vtkParallelMPI)
endif()
# TODO: if(OGS_INSITU) find_package(ParaView REQUIRED) end()
find_package(VTK ${ogs.minimum_version.vtk} QUIET COMPONENTS ${VTK_COMPONENTS})
if(VTK_FOUND)
include(${VTK_USE_FILE})
else()
list(
APPEND
VTK_OPTIONS
"BUILD_SHARED_LIBS OFF"
"BUILD_TESTING OFF"
"VTK_BUILD_EXAMPLES OFF"
"VTK_BUILD_TESTING OFF"
"VTK_ENABLE_WRAPPING OFF"
"VTK_Group_Rendering OFF"
"VTK_Group_StandAlone OFF"
"VTK_USE_64BIT_IDS ON"
)
foreach(comp ${VTK_COMPONENTS})
list(APPEND VTK_OPTIONS "Module_${comp} ON")
endforeach()
CPMAddPackage(
NAME VTK
GITHUB_REPOSITORY kitware/vtk
VERSION ${ogs.minimum_version.vtk}
OPTIONS ${VTK_OPTIONS}
EXCLUDE_FROM_ALL YES GIT_SUBMODULES "" # Disable submodules
)
include(${VTK_BINARY_DIR}/VTKConfig.cmake)
endif()
# end VTK ###
if(OGS_BUILD_TESTING)
CPMAddPackage(
NAME vtkdiff GITHUB_REPOSITORY ufz/vtkdiff
GIT_TAG 49403cee266bb8e80405a02d677dbb5f71afc61a
)
if(vtkdiff_ADDED)
if(VTK_ADDED)
target_include_directories(vtkdiff PRIVATE ${VTK_INCLUDE_DIRS})
endif()
install(PROGRAMS $<TARGET_FILE:vtkdiff> DESTINATION bin)
endif()
endif()
# Disable warnings
if(WIN32 AND VTK_ADDED)
list(APPEND DISABLE_WARNINGS_TARGETS vtksys)
endif()
foreach(target ${DISABLE_WARNINGS_TARGETS})
target_compile_options(
${target}
PRIVATE
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:-w>
$<$<CXX_COMPILER_ID:MSVC>:/W0>
)
endforeach()
# Hack: Disable tests from dependencies
configure_file(
${PROJECT_SOURCE_DIR}/scripts/cmake/test/CTestCustom.in.cmake
${PROJECT_BINARY_DIR}/CTestCustom.cmake @ONLY
)
find_program(CLANG_FORMAT_PROGRAM clang-format)
find_program(CMAKE_FORMAT_PROGRAM cmake-format)
if(CLANG_FORMAT_PROGRAM OR CMAKE_FORMAT_PROGRAM)
if(NOT CMAKE_FORMAT_PROGRAM)
set(_skip_cmake "FORMAT_SKIP_CMAKE YES")
endif()
CPMAddPackage(
NAME Format.cmake
VERSION 1.7.0
GITHUB_REPOSITORY TheLartians/Format.cmake
OPTIONS
${_skip_cmake}
"CMAKE_FORMAT_EXCLUDE scripts/cmake/CPM.cmake|.*/Tests.cmake|scripts/cmake/jedbrown/.*|scripts/cmake/conan/conan.cmake|scripts/cmake/vector-of-bool/.*"
)
endif()
# Third-party licenses
CPMAddPackage(
NAME CPMLicenses.cmake GITHUB_REPOSITORY cpm-cmake/CPMLicenses.cmake
VERSION 0.0.5
)
cpm_licenses_create_disclaimer_target(
write-licenses "${PROJECT_BINARY_DIR}/third_party_licenses.txt"
"${CPM_PACKAGES}"
)
# ccache
if(NOT WIN32 AND CCACHE_TOOL_PATH AND NOT OGS_DISABLE_CCACHE)
set(CCACHE_OPTIONS "CCACHE_SLOPPINESS=pch_defines,time_macros")
if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang|AppleClang")
list(APPEND CCACHE_OPTIONS "CCACHE_CPP2=true")
endif()
CPMAddPackage(
NAME Ccache.cmake
GITHUB_REPOSITORY TheLartians/Ccache.cmake
VERSION 1.2.2
OPTIONS "USE_CCACHE ON"
)
endif()
CPMAddPackage(
NAME GroupSourcesByFolder.cmake
GITHUB_REPOSITORY TheLartians/GroupSourcesByFolder.cmake VERSION 1.0
)
unset(CMAKE_FOLDER)
Computing file changes ...