2023-09-02 06:38:35 -05:00
|
|
|
cmake_minimum_required(VERSION 3.5)
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2023-09-02 06:38:35 -05:00
|
|
|
project(IFEM)
|
2016-01-24 09:54:14 -06:00
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
set(IFEM_VERSION_MAJOR 0)
|
|
|
|
set(IFEM_VERSION_MINOR 9)
|
|
|
|
set(IFEM_VERSION_PATCH 0)
|
|
|
|
set(IFEM_VERSION "${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR}.${IFEM_VERSION_PATCH}")
|
|
|
|
set(IFEM_ABI_VERSION ${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR})
|
2012-08-16 10:26:02 -05:00
|
|
|
|
|
|
|
# Generate header with version info
|
2016-01-28 12:04:11 -06:00
|
|
|
configure_file(${PROJECT_SOURCE_DIR}/src/IFEM.h.in
|
2013-05-08 04:04:21 -05:00
|
|
|
IFEM.h @ONLY)
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2011-02-22 11:35:18 -06:00
|
|
|
# Required defines (well, PROFILE_LEVEL is not actually required, but...)
|
2016-01-28 12:04:11 -06:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DReal=double -DepsZ=1.0e-12 -DPROFILE_LEVEL=3")
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DINDEX_CHECK=2")
|
|
|
|
if(VERBOSE_DEBUG GREATER 0)
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSP_DEBUG=${VERBOSE_DEBUG}")
|
|
|
|
endif()
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
set(IFEM_LIBRARY_BUILD 1)
|
2011-05-12 08:18:58 -05:00
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
# Add local modules
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
2016-01-28 12:04:11 -06:00
|
|
|
${CMAKE_SOURCE_DIR}/cmake/Modules
|
|
|
|
${CMAKE_SOURCE_DIR}/cmake/Scripts)
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
include(cmake/Scripts/UseMultiArch.cmake)
|
2013-04-30 05:21:00 -05:00
|
|
|
|
2015-09-28 03:43:10 -05:00
|
|
|
if(NOT IFEM_AS_SUBMODULE)
|
2016-05-12 10:25:52 -05:00
|
|
|
if(NOT IFEM_PATH)
|
|
|
|
set(IFEM_PATH ${PROJECT_SOURCE_DIR})
|
|
|
|
endif()
|
2016-01-28 12:04:11 -06:00
|
|
|
find_package(IFEMDeps)
|
2015-09-28 03:43:10 -05:00
|
|
|
endif()
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
add_definitions(${IFEM_DEFINITIONS})
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IFEM_BUILD_CXX_FLAGS}")
|
|
|
|
|
|
|
|
if(NOT IFEM_USE_SYSTEM_TINYXML)
|
2021-11-10 08:01:06 -06:00
|
|
|
message(STATUS "Using bundled tinyxml")
|
2016-01-28 12:04:11 -06:00
|
|
|
set(IFEM_INCLUDES ${IFEM_INCLUDES}
|
2013-05-08 04:04:39 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/tinyxml)
|
2016-01-28 12:04:11 -06:00
|
|
|
file(GLOB_RECURSE TINYXML_SRCS ${PROJECT_SOURCE_DIR}/3rdparty/tinyxml/*.C)
|
|
|
|
endif()
|
2011-05-07 11:56:47 -05:00
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
if(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS)
|
|
|
|
set(IFEM_INCLUDES ${IFEM_INCLUDES}
|
2013-05-08 04:04:39 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/src/ASM/LR)
|
2018-10-08 00:09:44 -05:00
|
|
|
endif()
|
2013-05-08 04:04:39 -05:00
|
|
|
|
|
|
|
# Required include directories
|
2016-01-28 12:04:11 -06:00
|
|
|
set(IFEM_INCLUDES
|
2013-05-08 04:04:39 -05:00
|
|
|
${IFEM_INCLUDES}
|
|
|
|
${IFEM_DEPINCLUDES}
|
|
|
|
${PROJECT_SOURCE_DIR}/src/ASM
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Eig
|
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg
|
|
|
|
${PROJECT_SOURCE_DIR}/src/SIM
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Utility
|
2018-10-08 00:09:44 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty
|
2013-05-08 04:04:39 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/expreval
|
2023-09-20 00:05:23 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/autodiff
|
2013-05-08 04:04:39 -05:00
|
|
|
${PROJECT_BINARY_DIR}
|
|
|
|
)
|
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
include_directories(${IFEM_INCLUDES})
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
set(EXECUTABLE_OUTPUT_PATH bin)
|
|
|
|
set(LIBRARY_OUTPUT_PATH lib)
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2013-05-08 04:04:39 -05:00
|
|
|
# Generate build flags in build tree
|
2016-01-28 12:04:11 -06:00
|
|
|
configure_file(${PROJECT_SOURCE_DIR}/cmake/Modules/IFEMFlags.cmake.in
|
2013-05-08 04:04:39 -05:00
|
|
|
IFEMFlags.cmake @ONLY)
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
# Make the IFEM library
|
2016-01-28 12:04:11 -06:00
|
|
|
file(GLOB IFEM_SRCS ${PROJECT_SOURCE_DIR}/src/IFEM.C
|
2014-10-10 10:23:16 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/src/ASM/*.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Eig/*.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/*.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/SIM/*.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Utility/*.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/ASM/*.f
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Eig/*.f
|
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/expreval/*.cpp)
|
2014-01-14 07:41:13 -06:00
|
|
|
string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/src/ASM/ASMs.DInterpolate.C" "" IFEM_SRCS "${IFEM_SRCS}")
|
2016-05-12 09:20:52 -05:00
|
|
|
|
|
|
|
if(NOT PETSC_FOUND)
|
|
|
|
list(REMOVE_ITEM IFEM_SRCS
|
2016-05-12 09:10:45 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/src/ASM/SAMpatchPETSc.C
|
2016-05-12 09:20:52 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/PETScMatrix.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/PETScPCPerm.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/PETScPCProd.C
|
2016-05-12 09:10:45 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/PETScPCScale.C
|
2019-08-02 05:35:30 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/PETScSchurPC.C
|
2016-05-12 09:10:45 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/PETScSolParams.C)
|
2016-05-12 09:19:35 -05:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT ISTL_FOUND)
|
|
|
|
list(REMOVE_ITEM IFEM_SRCS
|
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/ISTLMatrix.C
|
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg/ISTLSolParams.C)
|
2016-05-12 09:20:52 -05:00
|
|
|
endif()
|
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
if(LRSPLINE_FOUND OR LRSpline_FOUND)
|
2014-10-10 10:23:16 -05:00
|
|
|
file(GLOB LR_SRCS ${PROJECT_SOURCE_DIR}/src/ASM/LR/*.C)
|
|
|
|
list(APPEND IFEM_SRCS ${LR_SRCS})
|
2016-01-28 12:04:11 -06:00
|
|
|
endif()
|
2017-05-31 02:36:20 -05:00
|
|
|
list(APPEND CHECK_SOURCES ${IFEM_SRCS})
|
2016-01-28 12:04:11 -06:00
|
|
|
add_library(IFEM ${IFEM_SRCS} ${TINYXML_SRCS})
|
|
|
|
target_link_libraries(IFEM ${IFEM_DEPLIBS})
|
|
|
|
set_target_properties(IFEM PROPERTIES VERSION ${IFEM_VERSION}
|
2013-05-08 04:04:27 -05:00
|
|
|
SOVERSION ${IFEM_ABI_VERSION})
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2017-01-30 07:28:45 -06:00
|
|
|
set(IFEM_PATH ${PROJECT_SOURCE_DIR})
|
|
|
|
if(NOT IFEM_SUBTREE_BUILD AND NOT IFEM_AS_SUBMODULE)
|
|
|
|
set(EXTRA_DOXY_PATHS ${PROJECT_SOURCE_DIR}/doc)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Generate doxy in build tree
|
|
|
|
configure_file(${PROJECT_SOURCE_DIR}/doc/Doxyfile.in
|
|
|
|
Doxyfile @ONLY)
|
|
|
|
|
2012-08-16 10:27:06 -05:00
|
|
|
# For generating the doxy
|
2016-01-28 12:04:11 -06:00
|
|
|
add_custom_target(lib_doc doxygen ${PROJECT_BINARY_DIR}/Doxyfile
|
2012-02-16 08:18:08 -06:00
|
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
|
|
COMMENT "Generating API documentation" VERBATIM)
|
2017-01-30 07:28:45 -06:00
|
|
|
if(NOT TARGET doc AND NOT IFEM_AS_SUBMODULE)
|
2014-01-21 05:14:02 -06:00
|
|
|
add_custom_target(doc)
|
2017-01-30 07:28:45 -06:00
|
|
|
add_dependencies(doc lib_doc)
|
2016-01-28 12:04:11 -06:00
|
|
|
endif()
|
2012-02-16 08:18:08 -06:00
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
if(NOT IFEM_AS_SUBMODULE AND NOT IFEM_COMMON_APP_BUILD)
|
|
|
|
set(IFEM_INTREE_BUILD ON)
|
|
|
|
set(IFEM_LIBRARIES IFEM ${IFEM_DEPLIBS})
|
|
|
|
set(IFEM_PATH ${PROJECT_SOURCE_DIR})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
enable_testing()
|
|
|
|
include(cmake/Scripts/IFEMTesting.cmake)
|
|
|
|
|
|
|
|
add_subdirectory(Apps/Common)
|
|
|
|
|
2014-10-07 11:17:41 -05:00
|
|
|
# Unit tests
|
|
|
|
if(IFEM_AS_SUBMODULE OR IFEM_COMMON_APP_BUILD)
|
|
|
|
set(TEST_APPS ${TEST_APPS} PARENT_SCOPE)
|
|
|
|
else()
|
|
|
|
add_check_target()
|
|
|
|
endif()
|
|
|
|
|
2016-01-28 12:04:11 -06:00
|
|
|
if(WIN32)
|
2011-02-17 10:09:06 -06:00
|
|
|
# TODO
|
2016-01-28 12:04:11 -06:00
|
|
|
else()
|
2011-02-17 10:09:06 -06:00
|
|
|
# lib
|
2016-01-28 12:04:11 -06:00
|
|
|
install(TARGETS IFEM DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT bin)
|
2011-02-17 10:09:06 -06:00
|
|
|
|
|
|
|
# headers
|
2016-01-28 12:04:11 -06:00
|
|
|
file(GLOB IFEM_HEADERS src/ASM/AlgEqSystem.h src/ASM/ASMbase.h
|
2011-11-22 07:01:31 -06:00
|
|
|
src/ASM/ASMenums.h src/ASM/ASMmxBase.h
|
2022-06-08 05:17:51 -05:00
|
|
|
src/ASM/ASMs?Dmx.h src/ASM/BasisFunction*.h
|
2017-12-07 07:20:35 -06:00
|
|
|
src/ASM/ASM*truct.h src/ASM/*Mats.h src/ASM/ElmNorm.h
|
2014-07-15 11:42:57 -05:00
|
|
|
src/ASM/Field.h src/ASM/Fields.h src/ASM/GlbForceVec.h
|
2011-11-22 07:01:31 -06:00
|
|
|
src/ASM/FiniteElement.h src/ASM/GlbNorm.h
|
2022-05-09 06:36:54 -05:00
|
|
|
src/ASM/GlbL2projector.h src/ASM/GlobalIntegral.h
|
|
|
|
src/ASM/IntegrandBase.h
|
2017-08-28 03:35:59 -05:00
|
|
|
src/ASM/ImmersedBoundaries.h src/ASM/Interface.h
|
2011-11-22 07:01:31 -06:00
|
|
|
src/ASM/Integrand.h src/ASM/Lagrange.h
|
|
|
|
src/ASM/LocalIntegral.h src/ASM/SAMpatch.h
|
2022-05-23 05:01:27 -05:00
|
|
|
src/ASM/SplineField?D.h src/ASM/SplineFields?D.h
|
2013-05-08 04:04:39 -05:00
|
|
|
src/ASM/TimeDomain.h src/ASM/ASMs?D.h src/ASM/ASM?D.h
|
2020-12-04 02:43:43 -06:00
|
|
|
src/ASM/ASMs?DLag.h
|
2019-10-02 12:33:15 -05:00
|
|
|
src/ASM/DomainDecomposition.h src/ASM/ItgPoint.h
|
2019-03-16 01:27:16 -05:00
|
|
|
src/ASM/ReactionsOnly.h
|
2018-10-08 00:09:44 -05:00
|
|
|
src/LinAlg/*.h src/SIM/*.h src/Utility/*.h
|
|
|
|
3rdparty/*.h
|
2013-05-08 04:04:21 -05:00
|
|
|
${CMAKE_BINARY_DIR}/IFEM.h)
|
2017-05-16 02:53:06 -05:00
|
|
|
if(NOT IFEM_USE_SYSTEM_TINYXML)
|
|
|
|
list(APPEND IFEM_HEADERS 3rdparty/tinyxml/tinyxml.h)
|
|
|
|
endif()
|
2016-01-28 12:04:11 -06:00
|
|
|
install(FILES ${IFEM_HEADERS}
|
|
|
|
DESTINATION include/IFEM COMPONENT ${IFEM_DEV_COMPONENT})
|
|
|
|
|
|
|
|
set(IFEM_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/IFEM ${IFEM_DEPINCLUDES})
|
|
|
|
if(LRSpline_FOUND)
|
|
|
|
file(GLOB IFEM_LR_HEADERS src/ASM/LR/*.h)
|
|
|
|
install(FILES ${IFEM_LR_HEADERS} DESTINATION include/IFEM/LR)
|
|
|
|
list(APPEND IFEM_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/IFEM/LR)
|
|
|
|
endif()
|
2011-02-17 10:09:06 -06:00
|
|
|
|
|
|
|
# cmake modules
|
2016-01-28 12:04:11 -06:00
|
|
|
string(REPLACE ";" " " IFEM_CXX_FLAGS ${IFEM_CXX_FLAGS})
|
|
|
|
string(REPLACE ";" " " IFEM_DEPLIBS "${IFEM_DEPLIBS}")
|
|
|
|
string(REPLACE ";" " " IFEM_DEFINITIONS "${IFEM_DEFINITIONS}")
|
|
|
|
configure_file(cmake/Templates/IFEMConfigVersion.cmake.in IFEMConfigVersion.cmake @ONLY)
|
|
|
|
configure_file(cmake/Templates/IFEMConfig.cmake.in IFEMConfig.cmake @ONLY)
|
|
|
|
install(FILES ${CMAKE_BINARY_DIR}/IFEMConfigVersion.cmake
|
|
|
|
${CMAKE_BINARY_DIR}/IFEMConfig.cmake
|
2022-05-11 08:49:26 -05:00
|
|
|
cmake/Modules/FindTestLib.cmake
|
2016-01-28 12:04:11 -06:00
|
|
|
cmake/Scripts/CheckCommits.cmake
|
|
|
|
cmake/Scripts/DownloadGTest.cmake
|
|
|
|
cmake/Scripts/UseMultiArch.cmake
|
2017-01-31 05:17:04 -06:00
|
|
|
cmake/Scripts/IFEMDoxy.cmake
|
2016-01-28 12:04:11 -06:00
|
|
|
cmake/Scripts/IFEMTesting.cmake DESTINATION lib/IFEM)
|
|
|
|
|
|
|
|
# source code
|
|
|
|
install(FILES src/IFEM-test.C DESTINATION lib/IFEM/src)
|
2012-08-16 10:26:05 -05:00
|
|
|
|
|
|
|
# documentation and license
|
2017-01-30 07:28:45 -06:00
|
|
|
if(IFEM_INSTALL_DOXY)
|
2016-01-28 12:04:11 -06:00
|
|
|
install(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BUILD_TOOL} doc WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")" COMPONENT doc)
|
|
|
|
install(DIRECTORY ${PROJECT_BINARY_DIR}/doc/html DESTINATION ${CMAKE_INSTALL_DOCDIR}
|
2013-05-08 04:04:25 -05:00
|
|
|
COMPONENT doc
|
|
|
|
PATTERN *.md5 EXCLUDE
|
|
|
|
PATTERN *.map EXCLUDE)
|
2016-05-12 10:25:52 -05:00
|
|
|
install(FILES doc/petsc.pdf doc/sim-input.pdf doc/Tutorials/GettingStarted.pdf DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
2016-01-28 12:04:11 -06:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(IFEM_COMMON_APP_BUILD OR IFEM_AS_SUBMODULE)
|
|
|
|
set(UNIT_TEST_NUMBER ${UNIT_TEST_NUMBER} PARENT_SCOPE)
|
|
|
|
set(TEST_APPS ${TEST_APPS} PARENT_SCOPE)
|
2017-05-31 02:36:20 -05:00
|
|
|
set(CHECK_SOURCES ${CHECK_SOURCES} PARENT_SCOPE)
|
2016-01-28 12:04:11 -06:00
|
|
|
endif()
|