prepare buildsystem for separate repos
- generate cmake config files - refactor testing to make it reusable (downloads gtest if used from applications) - split of flags/definitions - install Apps/Common with main library
This commit is contained in:
parent
4874493bf0
commit
ea242fda48
|
@ -1,26 +1,24 @@
|
|||
PROJECT(IFEM_Apps)
|
||||
project(IFEM_Apps)
|
||||
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
# Add local modules
|
||||
SET(IFEM_PATH ${PROJECT_SOURCE_DIR}/..)
|
||||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${IFEM_PATH}/cmake/Modules)
|
||||
FIND_PACKAGE(IFEM REQUIRED)
|
||||
set(IFEM_PATH ${PROJECT_SOURCE_DIR}/..)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${IFEM_PATH}/cmake/Modules)
|
||||
set(IFEM_COMMON_APP_BUILD 1)
|
||||
|
||||
ENABLE_TESTING()
|
||||
find_package(IFEM REQUIRED)
|
||||
|
||||
enable_testing()
|
||||
|
||||
include_directories(${IFEM_INCLUDES})
|
||||
|
||||
SET(ORIG_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IFEM_CXX_FLAGS}")
|
||||
IF(NOT IFEM_AS_SUBMODULE)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IFEM_CXX_FLAGS}")
|
||||
if(NOT IFEM_AS_SUBMODULE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPROFILE_LEVEL=2")
|
||||
ENDIF(NOT IFEM_AS_SUBMODULE)
|
||||
endif()
|
||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
|
||||
|
||||
SET(EXECUTABLE_OUTPUT_PATH bin)
|
||||
SET(IFEM_COMMON_APP_BUILD 1)
|
||||
|
||||
add_subdirectory(Common)
|
||||
if(EXISTS ${PROJECT_SOURCE_DIR}/Poisson)
|
||||
add_subdirectory(Poisson)
|
||||
endif()
|
||||
|
@ -30,13 +28,16 @@ endif()
|
|||
if(EXISTS ${PROJECT_SOURCE_DIR}/Darcy)
|
||||
add_subdirectory(Darcy)
|
||||
endif()
|
||||
|
||||
if(EXISTS ${PROJECT_SOURCE_DIR}/Elasticity)
|
||||
add_subdirectory(Elasticity)
|
||||
add_subdirectory(Elasticity/Beam)
|
||||
add_subdirectory(Elasticity/FiniteDeformation)
|
||||
add_subdirectory(Elasticity/Linear)
|
||||
add_subdirectory(Elasticity/Nonlinear)
|
||||
add_subdirectory(Elasticity/BeamSim)
|
||||
if(EXISTS ${PROJECT_SOURCE_DIR}/Elasticity/BeamEx)
|
||||
add_subdirectory(Elasticity/FiniteDeformation)
|
||||
add_subdirectory(Elasticity/BeamSim)
|
||||
add_subdirectory(Elasticity/Nonlinear)
|
||||
endif()
|
||||
endif()
|
||||
if(EXISTS ${PROJECT_SOURCE_DIR}/FSWallDistance)
|
||||
add_subdirectory(FSWallDistance)
|
||||
|
@ -60,6 +61,8 @@ endif()
|
|||
if(EXISTS ${PROJECT_SOURCE_DIR}/FSI AND
|
||||
EXISTS ${PROJECT_SOURCE_DIR}/Stokes AND
|
||||
EXISTS ${PROJECT_SOURCE_DIR}/NavierStokes AND
|
||||
EXISTS ${PROJECT_SOURCE_DIR}/Elasticity AND
|
||||
EXISTS ${PROJECT_SOURCE_DIR}/Elasticity/BeamEx AND
|
||||
EXISTS ${PROJECT_SOURCE_DIR}/FSWallDistance)
|
||||
add_subdirectory(FSI)
|
||||
endif()
|
||||
|
|
|
@ -1,50 +1,37 @@
|
|||
project(CommonIFEM)
|
||||
project(IFEMAppCommon)
|
||||
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
# Add local modules
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
||||
${PROJECT_SOURCE_DIR}/../../cmake/Modules
|
||||
$ENV{HOME}/cmake/Modules)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
# Required packages
|
||||
if(NOT IFEM_CONFIGURED)
|
||||
find_package(IFEM REQUIRED)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IFEM_CXX_FLAGS}")
|
||||
|
||||
include_directories(${IFEM_INCLUDES} ${PROJECT_SOURCE_DIR})
|
||||
|
||||
if(NOT WIN32)
|
||||
# Emit position-independent code, suitable for dynamic linking
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
# Enable all warnings
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||
endif()
|
||||
include_directories(${PROJECT_SOURCE_DIR})
|
||||
|
||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
|
||||
|
||||
if(IFEM_AS_SUBMODULE)
|
||||
set(IFEM_LIBRARIES IFEM ${IFEM_DEPLIBS})
|
||||
endif()
|
||||
|
||||
# Common application sources
|
||||
add_library(CommonIFEM STATIC MeshUtils.C
|
||||
ResidualOperators.C
|
||||
Spalding.C
|
||||
SAWallLaw.C
|
||||
SIMNodalConstraint.C
|
||||
SIMSemi3D.C
|
||||
StabilizationUtils.C
|
||||
TimeIntUtils.C
|
||||
WeakOperators.C)
|
||||
target_link_libraries(CommonIFEM ${IFEM_LIBRARIES})
|
||||
add_library(IFEMAppCommon STATIC MeshUtils.C
|
||||
ResidualOperators.C
|
||||
Spalding.C
|
||||
SAWallLaw.C
|
||||
SIMNodalConstraint.C
|
||||
SIMSemi3D.C
|
||||
StabilizationUtils.C
|
||||
TimeIntUtils.C
|
||||
WeakOperators.C)
|
||||
install(TARGETS IFEMAppCommon DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
file(GLOB AppCommon_HEADERS *.h)
|
||||
install(FILES ${AppCommon_HEADERS} DESTINATION include/IFEM)
|
||||
install(FILES scripts/regtest.sh.in DESTINATION lib/IFEM/scripts
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
|
||||
# Unit tests
|
||||
IFEM_add_test_app(${PROJECT_SOURCE_DIR}/Test/*.C
|
||||
${PROJECT_SOURCE_DIR}/Test
|
||||
AppCommon
|
||||
CommonIFEM ${IFEM_LIBRARIES})
|
||||
IFEMAppCommon ${IFEM_LIBRARIES})
|
||||
set(TEST_APPS ${TEST_APPS} PARENT_SCOPE)
|
||||
set(UNIT_TEST_NUMBER ${UNIT_TEST_NUMBER} PARENT_SCOPE)
|
||||
|
|
167
CMakeLists.txt
167
CMakeLists.txt
|
@ -1,56 +1,57 @@
|
|||
PROJECT(IFEM)
|
||||
project(IFEM)
|
||||
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
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})
|
||||
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})
|
||||
|
||||
# Generate header with version info
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/src/IFEM.h.in
|
||||
configure_file(${PROJECT_SOURCE_DIR}/src/IFEM.h.in
|
||||
IFEM.h @ONLY)
|
||||
|
||||
# Generate doxy in build tree
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/Doxyfile.in
|
||||
configure_file(${PROJECT_SOURCE_DIR}/Doxyfile.in
|
||||
Doxyfile @ONLY)
|
||||
|
||||
# Required defines (well, PROFILE_LEVEL is not actually required, but...)
|
||||
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(VERBOSE_DEBUG GREATER 0)
|
||||
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()
|
||||
|
||||
ENABLE_TESTING()
|
||||
set(IFEM_LIBRARY_BUILD 1)
|
||||
|
||||
# Add local modules
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
||||
${CMAKE_SOURCE_DIR}/cmake/Modules)
|
||||
${CMAKE_SOURCE_DIR}/cmake/Modules
|
||||
${CMAKE_SOURCE_DIR}/cmake/Scripts)
|
||||
|
||||
INCLUDE(Apps/Common/cmake/UseMultiArch.cmake)
|
||||
set(IFEM_LIBRARY_BUILD 1)
|
||||
include(cmake/Scripts/UseMultiArch.cmake)
|
||||
|
||||
if(NOT IFEM_AS_SUBMODULE)
|
||||
FIND_PACKAGE(IFEMDeps)
|
||||
find_package(IFEMDeps)
|
||||
endif()
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IFEM_BUILD_CXX_FLAGS}")
|
||||
|
||||
IF(NOT IFEM_USE_SYSTEM_TINYXML)
|
||||
SET(IFEM_INCLUDES ${IFEM_INCLUDES}
|
||||
add_definitions(${IFEM_DEFINITIONS})
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IFEM_BUILD_CXX_FLAGS}")
|
||||
|
||||
if(NOT IFEM_USE_SYSTEM_TINYXML)
|
||||
set(IFEM_INCLUDES ${IFEM_INCLUDES}
|
||||
${PROJECT_SOURCE_DIR}/3rdparty/tinyxml)
|
||||
FILE(GLOB_RECURSE TINYXML_SRCS ${PROJECT_SOURCE_DIR}/3rdparty/tinyxml/*.C)
|
||||
ENDIF(NOT IFEM_USE_SYSTEM_TINYXML)
|
||||
file(GLOB_RECURSE TINYXML_SRCS ${PROJECT_SOURCE_DIR}/3rdparty/tinyxml/*.C)
|
||||
endif()
|
||||
|
||||
IF(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS)
|
||||
SET(IFEM_INCLUDES ${IFEM_INCLUDES}
|
||||
if(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS)
|
||||
set(IFEM_INCLUDES ${IFEM_INCLUDES}
|
||||
${PROJECT_SOURCE_DIR}/src/ASM/LR)
|
||||
ENDIF(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS)
|
||||
|
||||
ENDIF()
|
||||
|
||||
# Required include directories
|
||||
SET(IFEM_INCLUDES
|
||||
set(IFEM_INCLUDES
|
||||
${IFEM_INCLUDES}
|
||||
${IFEM_DEPINCLUDES}
|
||||
${PROJECT_SOURCE_DIR}/src
|
||||
|
@ -64,28 +65,28 @@ SET(IFEM_INCLUDES
|
|||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
|
||||
INCLUDE_DIRECTORIES(${IFEM_INCLUDES})
|
||||
include_directories(${IFEM_INCLUDES})
|
||||
|
||||
SET(EXECUTABLE_OUTPUT_PATH bin)
|
||||
SET(LIBRARY_OUTPUT_PATH lib)
|
||||
set(EXECUTABLE_OUTPUT_PATH bin)
|
||||
set(LIBRARY_OUTPUT_PATH lib)
|
||||
|
||||
IF(NOT CMAKE_INSTALL_DOCDIR)
|
||||
SET(CMAKE_INSTALL_DOCDIR share/doc/libifem1)
|
||||
ENDIF(NOT CMAKE_INSTALL_DOCDIR)
|
||||
if(NOT CMAKE_INSTALL_DOCDIR)
|
||||
set(CMAKE_INSTALL_DOCDIR share/doc/libifem1)
|
||||
endif()
|
||||
|
||||
IF(NOT WIN32)
|
||||
if(NOT WIN32)
|
||||
# Emit position-independent code, suitable for dynamic linking
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
# Enable all warnings
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-parentheses")
|
||||
ENDIF(NOT WIN32)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-parentheses")
|
||||
endif()
|
||||
|
||||
# Generate build flags in build tree
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/cmake/Modules/IFEMFlags.cmake.in
|
||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/Modules/IFEMFlags.cmake.in
|
||||
IFEMFlags.cmake @ONLY)
|
||||
|
||||
# Make the IFEM library
|
||||
FILE(GLOB IFEM_SRCS ${PROJECT_SOURCE_DIR}/src/IFEM.C
|
||||
file(GLOB IFEM_SRCS ${PROJECT_SOURCE_DIR}/src/IFEM.C
|
||||
${PROJECT_SOURCE_DIR}/src/ASM/*.C
|
||||
${PROJECT_SOURCE_DIR}/src/Eig/*.C
|
||||
${PROJECT_SOURCE_DIR}/src/LinAlg/*.C
|
||||
|
@ -95,70 +96,106 @@ FILE(GLOB IFEM_SRCS ${PROJECT_SOURCE_DIR}/src/IFEM.C
|
|||
${PROJECT_SOURCE_DIR}/src/Eig/*.f
|
||||
${PROJECT_SOURCE_DIR}/3rdparty/expreval/*.cpp)
|
||||
string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/src/ASM/ASMs.DInterpolate.C" "" IFEM_SRCS "${IFEM_SRCS}")
|
||||
IF(LRSPLINE_FOUND OR LRSpline_FOUND)
|
||||
if(LRSPLINE_FOUND OR LRSpline_FOUND)
|
||||
file(GLOB LR_SRCS ${PROJECT_SOURCE_DIR}/src/ASM/LR/*.C)
|
||||
list(APPEND IFEM_SRCS ${LR_SRCS})
|
||||
ENDIF()
|
||||
ADD_LIBRARY(IFEM ${IFEM_SRCS} ${TINYXML_SRCS})
|
||||
TARGET_LINK_LIBRARIES(IFEM ${IFEM_DEPLIBS})
|
||||
SET_TARGET_PROPERTIES(IFEM PROPERTIES VERSION ${IFEM_VERSION}
|
||||
endif()
|
||||
add_library(IFEM ${IFEM_SRCS} ${TINYXML_SRCS})
|
||||
target_link_libraries(IFEM ${IFEM_DEPLIBS})
|
||||
set_target_properties(IFEM PROPERTIES VERSION ${IFEM_VERSION}
|
||||
SOVERSION ${IFEM_ABI_VERSION})
|
||||
|
||||
# For generating the doxy
|
||||
ADD_CUSTOM_TARGET(lib_doc doxygen ${PROJECT_BINARY_DIR}/Doxyfile
|
||||
add_custom_target(lib_doc doxygen ${PROJECT_BINARY_DIR}/Doxyfile
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
COMMENT "Generating API documentation" VERBATIM)
|
||||
if(NOT TARGET doc)
|
||||
add_custom_target(doc)
|
||||
endif(NOT TARGET doc)
|
||||
endif()
|
||||
add_dependencies(doc lib_doc)
|
||||
|
||||
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)
|
||||
|
||||
# Unit tests
|
||||
if(IFEM_AS_SUBMODULE OR IFEM_COMMON_APP_BUILD)
|
||||
set(TEST_APPS ${TEST_APPS} PARENT_SCOPE)
|
||||
else()
|
||||
set(IFEM_INTREE_BUILD ON)
|
||||
set(IFEM_LIBRARIES IFEM)
|
||||
set(IFEM_PATH ${PROJECT_SOURCE_DIR})
|
||||
add_check_target()
|
||||
endif()
|
||||
|
||||
# 'install' target
|
||||
# Have install force doc build
|
||||
INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BUILD_TOOL} doc WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")" COMPONENT doc)
|
||||
install(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BUILD_TOOL} doc WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")" COMPONENT doc)
|
||||
|
||||
IF(WIN32)
|
||||
if(WIN32)
|
||||
# TODO
|
||||
ELSE(WIN32)
|
||||
else()
|
||||
# lib
|
||||
INSTALL(TARGETS IFEM DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT bin)
|
||||
install(TARGETS IFEM DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT bin)
|
||||
|
||||
# headers
|
||||
FILE(GLOB IFEM_HEADERS src/ASM/AlgEqSystem.h src/ASM/ASMbase.h
|
||||
file(GLOB IFEM_HEADERS src/ASM/AlgEqSystem.h src/ASM/ASMbase.h
|
||||
src/ASM/ASMenums.h src/ASM/ASMmxBase.h
|
||||
src/ASM/ASMs?Dmx.h
|
||||
src/ASM/ASMstruct.h src/ASM/*Mats.h src/ASM/ElmNorm.h
|
||||
src/ASM/Field.h src/ASM/Fields.h src/ASM/GlbForceVec.h
|
||||
src/ASM/FiniteElement.h src/ASM/GlbNorm.h
|
||||
src/ASM/GlobalIntegral.h src/ASM/IntegrandBase.h
|
||||
src/ASM/ImmersedBoundaries.h
|
||||
src/ASM/Integrand.h src/ASM/Lagrange.h
|
||||
src/ASM/LocalIntegral.h src/ASM/SAMpatch.h
|
||||
src/ASM/TimeDomain.h src/ASM/ASMs?D.h src/ASM/ASM?D.h
|
||||
src/LinAlg/*.h src/SIM/*.h
|
||||
src/Utility/*.h
|
||||
${CMAKE_BINARY_DIR}/IFEM.h)
|
||||
INSTALL(FILES ${IFEM_HEADERS}
|
||||
DESTINATION include/IFEM COMPONENT ${IFEM_DEV_COMPONENT})
|
||||
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)
|
||||
install(FILES src/ASM/ASMunstruct.h DESTINATION include/IFEM)
|
||||
list(APPEND IFEM_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/IFEM/LR)
|
||||
endif()
|
||||
|
||||
# cmake modules
|
||||
INSTALL(FILES cmake/Modules/FindIFEM.cmake DESTINATION lib/IFEM RENAME IFEMConfig.cmake)
|
||||
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
|
||||
cmake/Scripts/CheckCommits.cmake
|
||||
cmake/Scripts/DownloadGTest.cmake
|
||||
cmake/Scripts/UseMultiArch.cmake
|
||||
cmake/Scripts/IFEMTesting.cmake DESTINATION lib/IFEM)
|
||||
|
||||
# source code
|
||||
install(FILES src/IFEM-test.C DESTINATION lib/IFEM/src)
|
||||
|
||||
# documentation and license
|
||||
IF(INSTALL_DOXY)
|
||||
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}
|
||||
if(INSTALL_DOXY)
|
||||
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}
|
||||
COMPONENT doc
|
||||
PATTERN *.md5 EXCLUDE
|
||||
PATTERN *.map EXCLUDE)
|
||||
INSTALL(FILES doc/petsc.pdf doc/sim-input.pdf doc/Tutorial/GettingStarted.pdf DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
ENDIF(INSTALL_DOXY)
|
||||
ENDIF(WIN32)
|
||||
install(FILES doc/petsc.pdf doc/sim-input.pdf doc/Tutorial/GettingStarted.pdf DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
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)
|
||||
endif()
|
||||
|
|
|
@ -1,178 +1,153 @@
|
|||
# IFEM uses C++ and Fortran
|
||||
ENABLE_LANGUAGE(CXX)
|
||||
ENABLE_LANGUAGE(Fortran)
|
||||
enable_language(CXX)
|
||||
enable_language(Fortran)
|
||||
|
||||
# Custom profiles
|
||||
|
||||
IF(NOT IFEM_BUILD_TYPE)
|
||||
SET(IFEM_BUILD_TYPE ${CMAKE_BUILD_TYPE})
|
||||
ENDIF(NOT IFEM_BUILD_TYPE)
|
||||
if(NOT IFEM_BUILD_TYPE)
|
||||
set(IFEM_BUILD_TYPE ${CMAKE_BUILD_TYPE})
|
||||
endif()
|
||||
|
||||
IF(NOT CMAKE_BUILD_TYPE)
|
||||
SET(CMAKE_BUILD_TYPE Release)
|
||||
ENDIF(NOT CMAKE_BUILD_TYPE)
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
IF(${CMAKE_BUILD_TYPE} MATCHES "Nopt")
|
||||
SET(CMAKE_BUILD_TYPE Debug)
|
||||
ELSEIF(${CMAKE_BUILD_TYPE} MATCHES "Debug-MPI")
|
||||
SET(CMAKE_BUILD_TYPE Debug)
|
||||
ELSEIF(${CMAKE_BUILD_TYPE} MATCHES "Nomp")
|
||||
SET(CMAKE_BUILD_TYPE Release)
|
||||
ELSEIF(${CMAKE_BUILD_TYPE} MATCHES "Release-MPI")
|
||||
SET(CMAKE_BUILD_TYPE Release)
|
||||
ENDIF(${CMAKE_BUILD_TYPE} MATCHES "Nopt")
|
||||
if(${CMAKE_BUILD_TYPE} MATCHES "Nopt")
|
||||
set(CMAKE_BUILD_TYPE Debug)
|
||||
elseif(${CMAKE_BUILD_TYPE} MATCHES "Debug-MPI")
|
||||
set(CMAKE_BUILD_TYPE Debug)
|
||||
elseif(${CMAKE_BUILD_TYPE} MATCHES "Nomp")
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
elseif(${CMAKE_BUILD_TYPE} MATCHES "Release-MPI")
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
IF(NOT IFEM_FORCE_SYSTEM_LIB AND NOT IFEM_AS_SUBMODULE)
|
||||
FIND_PATH(IFEM_PATH
|
||||
if(NOT IFEM_AS_SUBMODULE)
|
||||
find_path(IFEM_PATH
|
||||
NAMES ${IFEM_BUILD_TYPE}/IFEM.h
|
||||
PATHS ${PROJECT_SOURCE_DIR}/..
|
||||
${PROJECT_SOURCE_DIR}/../..
|
||||
${PROJECT_SOURCE_DIR}/../../.. NO_DEFAULT_PATHS)
|
||||
SET(IFEM_H_PATH ${IFEM_PATH}/${IFEM_BUILD_TYPE})
|
||||
IF(NOT IFEM_PATH)
|
||||
FIND_PATH(IFEM_PATH
|
||||
NAMES IFEM.h
|
||||
PATHS ${PROJECT_SOURCE_DIR}/..
|
||||
${PROJECT_SOURCE_DIR}/../..
|
||||
${PROJECT_SOURCE_DIR}/../../.. NO_DEFAULT_PATHS)
|
||||
SET(IFEM_H_PATH ${IFEM_PATH})
|
||||
ENDIF(NOT IFEM_PATH)
|
||||
ENDIF(NOT IFEM_FORCE_SYSTEM_LIB AND NOT IFEM_AS_SUBMODULE)
|
||||
set(IFEM_H_PATH ${IFEM_PATH}/${IFEM_BUILD_TYPE})
|
||||
if(NOT IFEM_PATH)
|
||||
find_path(IFEM_PATH
|
||||
NAMES IFEM.h
|
||||
PATHS ${PROJECT_SOURCE_DIR}/..
|
||||
${PROJECT_SOURCE_DIR}/../..
|
||||
${PROJECT_SOURCE_DIR}/../../.. NO_DEFAULT_PATHS)
|
||||
set(IFEM_H_PATH ${IFEM_PATH})
|
||||
endif(NOT IFEM_PATH)
|
||||
endif()
|
||||
|
||||
IF(IFEM_PATH OR IFEM_AS_SUBMODULE)
|
||||
IF(IFEM_AS_SUBMODULE)
|
||||
# Build wants IFEM as a submodule
|
||||
MESSAGE(STATUS "Building IFEM as a submodule")
|
||||
IF(CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
|
||||
endif()
|
||||
FIND_PATH(IFEM_PATH NAMES src/IFEM.h.in
|
||||
PATHS ${PROJECT_SOURCE_DIR}/..
|
||||
${PROJECT_SOURCE_DIR}/../..
|
||||
${PROJECT_SOURCE_DIR}/../../.. NO_DEFAULT_PATHS)
|
||||
IF(NOT IFEM_PATH)
|
||||
MESSAGE(FATAL_ERROR "IFEM cannot be located, and we want it as a submodule")
|
||||
ENDIF(NOT IFEM_PATH)
|
||||
IF(CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
endif()
|
||||
find_package(IFEMDeps) # To get FOUND variables in current context
|
||||
ADD_SUBDIRECTORY(${IFEM_PATH} IFEM)
|
||||
INCLUDE(${CMAKE_BINARY_DIR}/IFEM/IFEMFlags.cmake)
|
||||
SET(IFEM_LIBRARIES IFEM)
|
||||
ELSE(IFEM_AS_SUBMODULE)
|
||||
# Build is in-tree
|
||||
MESSAGE(STATUS "Using in-tree IFEM")
|
||||
SET(IFEM_INTREE_BUILD ON)
|
||||
SET(IFEM_INCLUDES ${IFEM_H_PATH}
|
||||
${IFEM_PATH}/src/ASM
|
||||
${IFEM_PATH}/src/Eig
|
||||
${IFEM_PATH}/src/LinAlg
|
||||
${IFEM_PATH}/src/SIM
|
||||
${IFEM_PATH}/src/Utility
|
||||
${IFEM_PATH}/3rdparty/gtest/include)
|
||||
if(IFEM_AS_SUBMODULE)
|
||||
# Build wants IFEM as a submodule
|
||||
message(STATUS "Building IFEM as a submodule")
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
|
||||
endif()
|
||||
find_path(IFEM_PATH NAMES src/IFEM.h.in
|
||||
PATHS ${PROJECT_SOURCE_DIR}/..
|
||||
${PROJECT_SOURCE_DIR}/../..
|
||||
${PROJECT_SOURCE_DIR}/../../.. NO_DEFAULT_PATHS)
|
||||
if(NOT IFEM_PATH)
|
||||
message(FATAL_ERROR "IFEM cannot be located, and we want it as a submodule")
|
||||
endif()
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
endif()
|
||||
find_package(IFEMDeps) # To get FOUND variables in current context
|
||||
add_subdirectory(${IFEM_PATH} IFEM)
|
||||
include(${CMAKE_BINARY_DIR}/IFEM/IFEMFlags.cmake)
|
||||
set(IFEM_LIBRARIES IFEM)
|
||||
else()
|
||||
# Build is in-tree
|
||||
message(STATUS "Using in-tree IFEM")
|
||||
set(IFEM_INTREE_BUILD ON)
|
||||
set(IFEM_INCLUDES ${IFEM_H_PATH}
|
||||
${IFEM_PATH}/src/ASM
|
||||
${IFEM_PATH}/src/Eig
|
||||
${IFEM_PATH}/src/LinAlg
|
||||
${IFEM_PATH}/src/SIM
|
||||
${IFEM_PATH}/src/Utility
|
||||
${IFEM_PATH}/3rdparty/gtest/include)
|
||||
|
||||
FIND_LIBRARY(IFEM_LIBRARIES
|
||||
NAMES IFEM
|
||||
PATHS ${IFEM_PATH}/${IFEM_BUILD_TYPE}/lib
|
||||
${IFEM_PATH}/lib
|
||||
NO_DEFAULT_PATH)
|
||||
IF(NOT IFEM_LIBRARIES)
|
||||
MESSAGE(WARNING "Could not find the in-tree IFEM library, "
|
||||
"we assume it will be built into a build-type dir")
|
||||
ENDIF(NOT IFEM_LIBRARIES)
|
||||
IF (NOT BUILD_SHARED_LIBS)
|
||||
FIND_PACKAGE(IFEMDeps REQUIRED)
|
||||
if(LRSpline_FOUND)
|
||||
list(APPEND IFEM_INCLUDES ${IFEM_PATH}/src/ASM/LR)
|
||||
endif()
|
||||
SET(IFEM_LIBRARIES ${IFEM_LIBRARIES} ${IFEM_DEPLIBS})
|
||||
ENDIF(NOT BUILD_SHARED_LIBS)
|
||||
IF(NOT IFEM_USE_SYSTEM_TINYXML)
|
||||
SET(IFEM_INCLUDES ${IFEM_INCLUDES}
|
||||
${IFEM_PATH}/3rdparty/tinyxml)
|
||||
ENDIF(NOT IFEM_USE_SYSTEM_TINYXML)
|
||||
set(IFEM_LIBRARIES ${IFEM_LIBRARIES} ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
|
||||
ENDIF(IFEM_AS_SUBMODULE)
|
||||
add_custom_target(check-commits
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
|
||||
-DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
|
||||
-P ${IFEM_PATH}/Apps/Common/cmake/CheckCommits.cmake)
|
||||
ELSE(IFEM_PATH OR IFEM_AS_SUBMODULE)
|
||||
# Build wants system IFEM
|
||||
IF(NOT DEFINED FORCE_SYSTEM_IFEM OR NOT "${FORCE_SYSTEM_IFEM}")
|
||||
MESSAGE(STATUS "No in-tree libIFEM found, looking for system library")
|
||||
ENDIF(NOT DEFINED FORCE_SYSTEM_IFEM OR NOT "${FORCE_SYSTEM_IFEM}")
|
||||
|
||||
FIND_PATH(IFEM_INCLUDES
|
||||
NAMES SIMbase.h
|
||||
PATHS $ENV{HOME}/include
|
||||
PATH_SUFFIXES IFEM)
|
||||
|
||||
FIND_LIBRARY(IFEM_LIBRARIES
|
||||
find_library(IFEM_LIBRARIES
|
||||
NAMES IFEM
|
||||
PATHS $ENV{HOME}/lib)
|
||||
PATHS ${IFEM_PATH}/${IFEM_BUILD_TYPE}/lib
|
||||
${IFEM_PATH}/lib
|
||||
NO_DEFAULT_PATH)
|
||||
if(NOT IFEM_LIBRARIES)
|
||||
message(WARNING "Could not find the in-tree IFEM library, "
|
||||
"we assume it will be built into a build-type dir")
|
||||
endif()
|
||||
if(NOT BUILD_SHARED_LIBS)
|
||||
find_package(IFEMDeps REQUIRED)
|
||||
set(IFEM_LIBRARIES ${IFEM_LIBRARIES} ${IFEM_DEPLIBS})
|
||||
endif()
|
||||
add_library(IFEMAppCommon STATIC IMPORTED)
|
||||
set_target_properties(IFEMAppCommon PROPERTIES IMPORTED_LOCATION
|
||||
${IFEM_PATH}/${IFEM_BUILD_TYPE}/lib/libIFEMAppCommon${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
if(LRSpline_FOUND)
|
||||
list(APPEND IFEM_INCLUDES ${IFEM_PATH}/src/ASM/LR)
|
||||
endif()
|
||||
if(NOT IFEM_USE_SYSTEM_TINYXML)
|
||||
set(IFEM_INCLUDES ${IFEM_INCLUDES}
|
||||
${IFEM_PATH}/3rdparty/tinyxml)
|
||||
endif()
|
||||
set(IFEM_LIBRARIES ${IFEM_LIBRARIES} ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
|
||||
endif()
|
||||
|
||||
# system lib always uses system tixml
|
||||
FIND_PACKAGE(TinyXML REQUIRED)
|
||||
# The damn DSO's on ubuntu need us to explicitly link these
|
||||
FIND_PACKAGE(CBLAS REQUIRED)
|
||||
FIND_PACKAGE(LAPACK REQUIRED)
|
||||
FIND_PACKAGE(GoTools REQUIRED)
|
||||
# Need these as they determine ABI (c++-11 vs c++-03)
|
||||
SET(IFEM_CXX_FLAGS ${IFEM_CXX_FLAGS} ${GoTools_CXX_FLAGS})
|
||||
SET(IFEM_DEPLIBS ${TINYXML_LIBRARIES}
|
||||
${CBLAS_LIBRARIES}
|
||||
${LAPACK_LIBRARIES}
|
||||
${GoTools_LIBRARIES})
|
||||
SET(IFEM_H_PATH ${IFEM_INCLUDES})
|
||||
ENDIF(IFEM_PATH OR IFEM_AS_SUBMODULE)
|
||||
list(APPEND CMAKE_MODULE_PATH ${IFEM_PATH}/cmake/Scripts)
|
||||
|
||||
IF(NOT IFEM_AS_SUBMODULE)
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
if(NOT IFEM_AS_SUBMODULE)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(IFEM DEFAULT_MSG
|
||||
IFEM_LIBRARIES)
|
||||
|
||||
# Export version information
|
||||
IF(IFEM_INCLUDES)
|
||||
EXECUTE_PROCESS(COMMAND cat "${IFEM_H_PATH}/IFEM.h" OUTPUT_VARIABLE IFEM_HEADER)
|
||||
STRING(REGEX MATCH "IFEM_VERSION_MAJOR ([0-9]+)" IFEM_VERSION_MAJOR ${IFEM_HEADER})
|
||||
STRING(REGEX REPLACE "IFEM_VERSION_MAJOR ([0-9]+)" "\\1" IFEM_VERSION_MAJOR "${IFEM_VERSION_MAJOR}")
|
||||
STRING(REGEX MATCH "IFEM_VERSION_MINOR ([0-9]+)" IFEM_VERSION_MINOR ${IFEM_HEADER})
|
||||
STRING(REGEX REPLACE "IFEM_VERSION_MINOR ([0-9]+)" "\\1" IFEM_VERSION_MINOR "${IFEM_VERSION_MINOR}")
|
||||
STRING(REGEX MATCH "IFEM_VERSION_PATCH ([0-9]+)" IFEM_VERSION_PATCH ${IFEM_HEADER})
|
||||
STRING(REGEX REPLACE "IFEM_VERSION_PATCH ([0-9]+)" "\\1" IFEM_VERSION_PATCH "${IFEM_VERSION_PATCH}")
|
||||
SET(IFEM_VERSION "${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR}.${IFEM_VERSION_PATCH}")
|
||||
SET(IFEM_ABI_VERSION ${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR})
|
||||
ENDIF(IFEM_INCLUDES)
|
||||
if(IFEM_INCLUDES)
|
||||
execute_process(COMMAND cat "${IFEM_H_PATH}/IFEM.h" OUTPUT_VARIABLE IFEM_HEADER)
|
||||
string(REGEX MATCH "IFEM_VERSION_MAJOR ([0-9]+)" IFEM_VERSION_MAJOR ${IFEM_HEADER})
|
||||
string(REGEX REPLACE "IFEM_VERSION_MAJOR ([0-9]+)" "\\1" IFEM_VERSION_MAJOR "${IFEM_VERSION_MAJOR}")
|
||||
string(REGEX MATCH "IFEM_VERSION_MINOR ([0-9]+)" IFEM_VERSION_MINOR ${IFEM_HEADER})
|
||||
string(REGEX REPLACE "IFEM_VERSION_MINOR ([0-9]+)" "\\1" IFEM_VERSION_MINOR "${IFEM_VERSION_MINOR}")
|
||||
string(REGEX MATCH "IFEM_VERSION_PATCH ([0-9]+)" IFEM_VERSION_PATCH ${IFEM_HEADER})
|
||||
string(REGEX REPLACE "IFEM_VERSION_PATCH ([0-9]+)" "\\1" IFEM_VERSION_PATCH "${IFEM_VERSION_PATCH}")
|
||||
set(IFEM_VERSION "${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR}.${IFEM_VERSION_PATCH}")
|
||||
set(IFEM_ABI_VERSION ${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR})
|
||||
endif()
|
||||
|
||||
SET(IFEM_LIBRARIES ${IFEM_LIBRARIES}
|
||||
set(IFEM_LIBRARIES ${IFEM_LIBRARIES}
|
||||
${IFEM_DEPLIBS})
|
||||
SET(IFEM_INCLUDES ${IFEM_INCLUDES} ${IFEM_DEPINCLUDES})
|
||||
ENDIF(NOT IFEM_AS_SUBMODULE)
|
||||
set(IFEM_INCLUDES ${IFEM_INCLUDES} ${IFEM_DEPINCLUDES})
|
||||
endif()
|
||||
|
||||
IF(IFEM_TEST_MEMCHECK)
|
||||
if(IFEM_TEST_MEMCHECK)
|
||||
include(CTest)
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
# Needed as we have templates using these flags
|
||||
ENABLE_LANGUAGE(CXX)
|
||||
IF(CMAKE_CXX_COMPILER_ID MATCHES Intel)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
ELSE(CMAKE_CXX_COMPILER_ID MATCHES Intel)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DUSE_CBLAS")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DUSE_CBLAS")
|
||||
ENDIF(CMAKE_CXX_COMPILER_ID MATCHES Intel)
|
||||
|
||||
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} -DINT_DEBUG=${VERBOSE_DEBUG}")
|
||||
ENDIF(VERBOSE_DEBUG GREATER 0)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DReal=double")
|
||||
|
||||
SET(IFEM_CONFIGURED 1)
|
||||
if(NOT IFEM_TESTING_INCLUDED)
|
||||
include(IFEMTesting)
|
||||
enable_language(CXX)
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES Intel)
|
||||
set(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
set(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
list(APPEND IFEM_DEFINITIONS -DUSE_MKL=1)
|
||||
else()
|
||||
set(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DUSE_CBLAS")
|
||||
set(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DUSE_CBLAS")
|
||||
list(APPEND IFEM_DEFINITIONS -DUSE_CBLAS=1)
|
||||
endif()
|
||||
|
||||
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} -DINT_DEBUG=${VERBOSE_DEBUG}")
|
||||
endif()
|
||||
set(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DReal=double")
|
||||
list(APPEND IFEM_DEFINITIONS -DReal=double)
|
||||
|
||||
set(IFEM_CONFIGURED 1)
|
||||
if(NOT IFEM_TESTING_INCLUDED)
|
||||
include(../Scripts/IFEMTesting)
|
||||
endif()
|
||||
|
||||
set(IFEM_REGTEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/regtest.sh.in)
|
||||
|
|
|
@ -20,15 +20,15 @@ ENDIF(CMAKE_Fortran_COMPILER MATCHES ifort)
|
|||
# And C++ code
|
||||
ENABLE_LANGUAGE(CXX)
|
||||
IF(CMAKE_CXX_COMPILER_ID MATCHES Intel)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -mkl=sequential")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -mkl=sequential")
|
||||
list(APPEND IFEM_DEFINITIONS -DUSE_MKL)
|
||||
FIND_PACKAGE(CBLAS REQUIRED)
|
||||
FIND_PACKAGE(LAPACK REQUIRED)
|
||||
ELSE(CMAKE_CXX_COMPILER_ID MATCHES Intel)
|
||||
FIND_PACKAGE(CBLAS REQUIRED)
|
||||
FIND_PACKAGE(LAPACK REQUIRED)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} ${CBLAS_DEFINITIONS}")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} ${CBLAS_DEFINITIONS}")
|
||||
list(APPEND IFEM_DEFINITIONS ${CBLAS_DEFINITIONS})
|
||||
ENDIF(CMAKE_CXX_COMPILER_ID MATCHES Intel)
|
||||
|
||||
if(MINGW)
|
||||
|
@ -83,6 +83,7 @@ IF(IFEM_USE_HDF5)
|
|||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${HDF5_LIBRARIES})
|
||||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${HDF5_INCLUDE_DIR})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_HDF5=1")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_HDF5=1)
|
||||
ENDIF(HDF5_LIBRARIES AND HDF5_INCLUDE_DIR)
|
||||
ENDIF(IFEM_USE_HDF5)
|
||||
|
||||
|
@ -102,11 +103,13 @@ IF(IFEM_USE_SUPERLU OR IFEM_USE_SUPERLU_MT)
|
|||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${SuperLU_MT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${SuperLU_MT_INCLUDES})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_SUPERLU_MT")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_SUPERLUMT)
|
||||
MESSAGE(STATUS "Using SuperLU-MT")
|
||||
ELSEIF(SuperLU_LIBRARIES AND SuperLU_INCLUDES)
|
||||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${SuperLU_LIBRARIES})
|
||||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${SuperLU_INCLUDES})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_SUPERLU")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_SUPERLU=1)
|
||||
MESSAGE(STATUS "Using SuperLU")
|
||||
ENDIF(SuperLU_MT_LIBRARIES AND SuperLU_MT_INCLUDES AND IFEM_USE_SUPERLU_MT)
|
||||
ENDIF(IFEM_USE_SUPERLU OR IFEM_USE_SUPERLU_MT)
|
||||
|
@ -126,6 +129,7 @@ IF(IFEM_USE_LRSPLINES)
|
|||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${LRSpline_INCLUDE_DIRS})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_LRSPLINE=1 ${LRSpline_DEFINITIONS}")
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DHAS_LRSPLINE=1 ${LRSpline_DEFINITIONS}")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_LRSPLINE=1 ${LRSpline_DEFINITIONS})
|
||||
ENDIF(LRSPLINE_VERSION_MINOR LESS 5 AND LRSPLINE_VERSION_MAJOR LESS 1)
|
||||
ENDIF(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS)
|
||||
ENDIF(IFEM_USE_LRSPLINES)
|
||||
|
@ -138,12 +142,14 @@ IF(IFEM_USE_PETSC)
|
|||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${PETSC_LIBRARIES})
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DHAS_PETSC")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_PETSC")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_PETSC)
|
||||
IF(IFEM_USE_PARALLEL_PETSC)
|
||||
IF(IFEM_USE_OPENMP)
|
||||
MESSAGE(FATAL_ERROR "Cannot use parallel PETSc and OpenMP in combination, bailing")
|
||||
ENDIF(IFEM_USE_OPENMP)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DPARALLEL_PETSC") # Needed due to usage in apps..
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DPARALLEL_PETSC")
|
||||
list(APPEND IFEM_DEFINITIONS -DPARALLEL_PETSC)
|
||||
ENDIF(IFEM_USE_PARALLEL_PETSC)
|
||||
IF(IFEM_ENABLE_SLEPC)
|
||||
FIND_PACKAGE(SLEPc)
|
||||
|
@ -151,6 +157,7 @@ IF(IFEM_USE_PETSC)
|
|||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${SLEPC_INCLUDES})
|
||||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${SLEPC_LIBRARIES})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_SLEPC")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_SLEPC)
|
||||
ENDIF(SLEPC_LIBRARIES AND SLEPC_INCLUDES)
|
||||
ENDIF(IFEM_ENABLE_SLEPC)
|
||||
ENDIF()
|
||||
|
@ -162,6 +169,7 @@ IF(IFEM_USE_SPR)
|
|||
IF(SPR_LIBRARIES)
|
||||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${SPR_LIBRARIES})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_SPR -DUSE_F77SAM")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_SPR -DUSE_F77SAM)
|
||||
ENDIF(SPR_LIBRARIES)
|
||||
ENDIF(IFEM_USE_SPR)
|
||||
|
||||
|
@ -172,6 +180,7 @@ IF(IFEM_USE_SAMG)
|
|||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${SAMG_LIBRARIES})
|
||||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${SAMG_INCLUDES})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_SAMG -DSAMG_UNIX_LINUX=1 -DSAMG_LCASE_USCORE")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_SAMG -DSAMG_UNIX_LINUX=1 -DSAMG_LCASE_USCORE)
|
||||
ENDIF(SAMG_LIBRARIES AND SAMG_INCLUDES)
|
||||
ENDIF(IFEM_USE_SAMG)
|
||||
|
||||
|
@ -183,6 +192,7 @@ IF(IFEM_USE_VTFWRITER)
|
|||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${VTFWRITER_INCLUDES})
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DHAS_VTFAPI=${VTFAPI}")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_VTFAPI=${VTFAPI}")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAS_VTFAPI=${VTFAPI})
|
||||
ENDIF(VTFWRITER_LIBRARIES AND VTFWRITER_INCLUDES)
|
||||
ENDIF(IFEM_USE_VTFWRITER)
|
||||
|
||||
|
@ -192,6 +202,7 @@ IF(IFEM_USE_OPENMP)
|
|||
IF(OPENMP_FOUND)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -DUSE_OPENMP")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -DUSE_OPENMP")
|
||||
list(APPEND IFEM_DEFINITIONS -DUSE_OPENMP=1)
|
||||
ENDIF(OPENMP_FOUND)
|
||||
ENDIF(IFEM_USE_OPENMP)
|
||||
|
||||
|
@ -202,41 +213,12 @@ set(CMAKE_REQUIRED_FLAGS)
|
|||
check_function_exists(get_current_dir_name unistd.h HAVE_GET_CURRENT_DIR_NAME) # lacks on osx
|
||||
if(HAVE_GET_CURRENT_DIR_NAME)
|
||||
set(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DHAVE_GET_CURRENT_DIR_NAME=1")
|
||||
list(APPEND IFEM_DEFINITIONS -DHAVE_GET_CURRENT_DIR_NAME=1)
|
||||
endif()
|
||||
|
||||
# Get GTest tests as CMake tests.
|
||||
# Copied from FindGTest.cmake
|
||||
# Thanks to Daniel Blezek <blezek@gmail.com> for the GTEST_ADD_TESTS code
|
||||
function(gtest_add_tests executable working_dir)
|
||||
if(NOT ARGN)
|
||||
message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS")
|
||||
endif()
|
||||
if(NOT UNIT_TEST_NUMBER)
|
||||
set(UNIT_TEST_NUMBER 0 CACHE INT "" FORCE)
|
||||
endif()
|
||||
foreach(source ${ARGN})
|
||||
file(READ "${source}" contents)
|
||||
string(REGEX MATCHALL "TEST_?[F]?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
|
||||
foreach(hit ${found_tests})
|
||||
string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit})
|
||||
math(EXPR UNIT_TEST_NUMBER "${UNIT_TEST_NUMBER}+1")
|
||||
set(UNIT_TEST${UNIT_TEST_NUMBER} ${test_name} ${working_dir} ${executable} --gtest_filter=${test_name} CACHE STRING "" FORCE)
|
||||
endforeach()
|
||||
# Groups parametrized tests under a single ctest entry
|
||||
string(REGEX MATCHALL "INSTANTIATE_TEST_CASE_P\\(([^,]+), *([^,]+)" found_tests2 ${contents})
|
||||
foreach(hit ${found_tests2})
|
||||
string(SUBSTRING ${hit} 24 -1 test_name)
|
||||
string(REPLACE "," ";" test_name "${test_name}")
|
||||
list(GET test_name 0 filter_name)
|
||||
list(GET test_name 1 test_prefix)
|
||||
string(STRIP ${test_prefix} test_prefix)
|
||||
math(EXPR UNIT_TEST_NUMBER "${UNIT_TEST_NUMBER}+1")
|
||||
set(UNIT_TEST${UNIT_TEST_NUMBER} ${test_prefix}.${filter_name} ${working_dir} ${executable} --gtest_filter=${filter_name}* CACHE STRING "" FORCE)
|
||||
endforeach()
|
||||
endforeach()
|
||||
set(UNIT_TEST_NUMBER ${UNIT_TEST_NUMBER} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
if(NOT IFEM_TESTING_INCLUDED)
|
||||
include(IFEMTesting)
|
||||
endif()
|
||||
# Other things
|
||||
list(APPEND IFEM_DEFINITIONS -DReal=double)
|
||||
list(APPEND IFEM_DEPLIBS ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
|
||||
include_directories(${IFEM_INCLUDE_DIRS})
|
||||
add_definitions(${IFEM_DEFINITIONS})
|
||||
set(IFEM_CHECKCOMMITS_SCRIPT ${IFEM_PATH}/cmake/Scripts/CheckCommits.cmake)
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
macro(IFEM_add_test_app path workdir name)
|
||||
FILE(GLOB TEST_SRCS ${path})
|
||||
add_executable(${name}-test EXCLUDE_FROM_ALL ${IFEM_PATH}/src/IFEM-test.C ${TEST_SRCS})
|
||||
gtest_add_tests($<TARGET_FILE:${name}-test> ${workdir} ${TEST_SRCS})
|
||||
list(APPEND TEST_APPS ${name}-test)
|
||||
target_link_libraries(${name}-test ${ARGN} gtest)
|
||||
endmacro()
|
||||
|
||||
macro(IFEM_add_unittests IFEM_PATH)
|
||||
IFEM_add_test_app("${IFEM_PATH}/src/Utility/Test/*.C;${IFEM_PATH}/src/ASM/Test/*.C;${IFEM_PATH}/src/LinAlg/Test/*.C"
|
||||
${IFEM_PATH}
|
||||
IFEM
|
||||
${IFEM_LIBRARIES} ${IFEM_DEPLIBS})
|
||||
endmacro()
|
||||
|
||||
function(IFEM_add_test name binary)
|
||||
separate_arguments(MEMCHECK_COMMAND)
|
||||
if(IFEM_TEST_EXTRA)
|
||||
set(test-name "${binary}+${IFEM_TEST_EXTRA}+${name}")
|
||||
else()
|
||||
set(test-name "${binary}+${name}")
|
||||
endif()
|
||||
if(IFEM_TEST_MEMCHECK)
|
||||
add_test("${test-name}" regtest.sh "${MEMORYCHECK_COMMAND} --log-file=${CMAKE_BINARY_DIR}/valgrindlog ${EXECUTABLE_OUTPUT_PATH}/${binary}" ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${ARGN})
|
||||
else(IFEM_TEST_MEMCHECK)
|
||||
add_test("${test-name}" regtest.sh ${EXECUTABLE_OUTPUT_PATH}/${binary} ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${ARGN})
|
||||
endif(IFEM_TEST_MEMCHECK)
|
||||
endfunction()
|
||||
|
||||
macro(add_check_target)
|
||||
add_custom_target(check ${CMAKE_CTEST_COMMAND} WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
|
||||
add_custom_command(TARGET check PRE_BUILD COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/failed.log)
|
||||
if(IFEM_INTREE_BUILD)
|
||||
include_directories(${IFEM_PATH}/3rdparty/gtest/include)
|
||||
elseif(NOT IFEM_AS_SUBMODULE)
|
||||
find_package(GTest)
|
||||
if(NOT GTEST_FOUND)
|
||||
return()
|
||||
endif()
|
||||
add_library(gtest IMPORTED ${GTEST_LIBRARIES})
|
||||
include_directories(${GTEST_INCLUDE_DIRS})
|
||||
endif()
|
||||
if(IFEM_AS_SUBMODULE OR IFEM_LIBRARY_BUILD)
|
||||
ifem_add_unittests(${IFEM_PATH})
|
||||
endif()
|
||||
if(NOT TARGET gtest)
|
||||
add_subdirectory(${IFEM_PATH}/3rdparty/gtest gtest EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
if (${UNIT_TEST_NUMBER} GREATER 0)
|
||||
foreach(test_number RANGE 1 ${UNIT_TEST_NUMBER})
|
||||
list(GET UNIT_TEST${test_number} 0 name)
|
||||
list(GET UNIT_TEST${test_number} 1 dir)
|
||||
list(GET UNIT_TEST${test_number} 2 -1 cmd)
|
||||
add_test(NAME ${name} WORKING_DIRECTORY ${dir} COMMAND ${cmd})
|
||||
endforeach()
|
||||
endif()
|
||||
add_dependencies(check ${TEST_APPS})
|
||||
add_custom_target(testapps DEPENDS ${TEST_APPS})
|
||||
endmacro()
|
||||
|
||||
set(IFEM_TESTING_INCLUDED 1)
|
31
cmake/Scripts/DownloadGTest.cmake
Normal file
31
cmake/Scripts/DownloadGTest.cmake
Normal file
|
@ -0,0 +1,31 @@
|
|||
########################### GTEST
|
||||
# Enable ExternalProject CMake module
|
||||
INCLUDE(ExternalProject)
|
||||
|
||||
# Set default ExternalProject root directory
|
||||
set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/third_party)
|
||||
|
||||
# Add gtest
|
||||
# http://stackoverflow.com/questions/9689183/cmake-googletest
|
||||
externalproject_add(
|
||||
googletest
|
||||
URL http://googletest.googlecode.com/files/gtest-1.6.0.zip
|
||||
# Disable install step
|
||||
INSTALL_COMMAND ""
|
||||
# Wrap download, configure and build steps in a script to log output
|
||||
LOG_DOWNLOAD ON
|
||||
LOG_CONFIGURE ON
|
||||
LOG_BUILD ON)
|
||||
|
||||
# Specify include dir
|
||||
externalproject_get_property(googletest source_dir)
|
||||
set(GTEST_INCLUDE_DIRS ${source_dir}/include)
|
||||
|
||||
# Library
|
||||
externalproject_get_property(googletest binary_dir)
|
||||
set(GTEST_LIBRARIES ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a)
|
||||
add_library(gtest UNKNOWN IMPORTED)
|
||||
set_property(TARGET gtest PROPERTY IMPORTED_LOCATION
|
||||
${GTEST_LIBRARIES})
|
||||
set_property(TARGET googletest PROPERTY EXCLUDE_FROM_ALL 1)
|
||||
add_dependencies(gtest googletest)
|
100
cmake/Scripts/IFEMTesting.cmake
Normal file
100
cmake/Scripts/IFEMTesting.cmake
Normal file
|
@ -0,0 +1,100 @@
|
|||
# Get GTest tests as CMake tests.
|
||||
# Copied from FindGTest.cmake
|
||||
# Thanks to Daniel Blezek <blezek@gmail.com> for the GTEST_ADD_TESTS code
|
||||
function(gtest_add_tests executable working_dir)
|
||||
if(NOT ARGN)
|
||||
message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS")
|
||||
endif()
|
||||
if(NOT UNIT_TEST_NUMBER)
|
||||
set(UNIT_TEST_NUMBER 0 CACHE INT "" FORCE)
|
||||
endif()
|
||||
foreach(source ${ARGN})
|
||||
file(READ "${source}" contents)
|
||||
string(REGEX MATCHALL "TEST_?[F]?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
|
||||
foreach(hit ${found_tests})
|
||||
string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit})
|
||||
math(EXPR UNIT_TEST_NUMBER "${UNIT_TEST_NUMBER}+1")
|
||||
set(UNIT_TEST${UNIT_TEST_NUMBER} ${test_name} ${working_dir} ${executable} --gtest_filter=${test_name} CACHE STRING "" FORCE)
|
||||
endforeach()
|
||||
# Groups parametrized tests under a single ctest entry
|
||||
string(REGEX MATCHALL "INSTANTIATE_TEST_CASE_P\\(([^,]+), *([^,]+)" found_tests2 ${contents})
|
||||
foreach(hit ${found_tests2})
|
||||
string(SUBSTRING ${hit} 24 -1 test_name)
|
||||
string(REPLACE "," ";" test_name "${test_name}")
|
||||
list(GET test_name 0 filter_name)
|
||||
list(GET test_name 1 test_prefix)
|
||||
string(STRIP ${test_prefix} test_prefix)
|
||||
math(EXPR UNIT_TEST_NUMBER "${UNIT_TEST_NUMBER}+1")
|
||||
set(UNIT_TEST${UNIT_TEST_NUMBER} ${test_prefix}.${filter_name} ${working_dir} ${executable} --gtest_filter=${filter_name}* CACHE STRING "" FORCE)
|
||||
endforeach()
|
||||
endforeach()
|
||||
set(UNIT_TEST_NUMBER ${UNIT_TEST_NUMBER} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
macro(IFEM_add_test_app path workdir name)
|
||||
FILE(GLOB TEST_SRCS ${path})
|
||||
add_executable(${name}-test EXCLUDE_FROM_ALL ${IFEM_PATH}/src/IFEM-test.C ${TEST_SRCS})
|
||||
gtest_add_tests($<TARGET_FILE:${name}-test> ${workdir} ${TEST_SRCS})
|
||||
list(APPEND TEST_APPS ${name}-test)
|
||||
target_link_libraries(${name}-test ${ARGN} gtest)
|
||||
endmacro()
|
||||
|
||||
macro(IFEM_add_unittests IFEM_PATH)
|
||||
IFEM_add_test_app("${IFEM_PATH}/src/Utility/Test/*.C;${IFEM_PATH}/src/ASM/Test/*.C;${IFEM_PATH}/src/LinAlg/Test/*.C"
|
||||
${IFEM_PATH}
|
||||
IFEM
|
||||
${IFEM_LIBRARIES} ${IFEM_DEPLIBS})
|
||||
endmacro()
|
||||
|
||||
function(IFEM_add_test name binary)
|
||||
separate_arguments(MEMCHECK_COMMAND)
|
||||
if(IFEM_TEST_EXTRA)
|
||||
set(test-name "${binary}+${IFEM_TEST_EXTRA}+${name}")
|
||||
else()
|
||||
set(test-name "${binary}+${name}")
|
||||
endif()
|
||||
if(IFEM_TEST_MEMCHECK)
|
||||
add_test("${test-name}" regtest.sh "${MEMORYCHECK_COMMAND} --log-file=${CMAKE_BINARY_DIR}/valgrindlog ${EXECUTABLE_OUTPUT_PATH}/${binary}" ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${ARGN})
|
||||
else(IFEM_TEST_MEMCHECK)
|
||||
add_test("${test-name}" regtest.sh ${EXECUTABLE_OUTPUT_PATH}/${binary} ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${ARGN})
|
||||
endif(IFEM_TEST_MEMCHECK)
|
||||
endfunction()
|
||||
|
||||
macro(add_check_target)
|
||||
add_custom_target(check ${CMAKE_CTEST_COMMAND} WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
|
||||
add_custom_command(TARGET check PRE_BUILD COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/failed.log)
|
||||
if(IFEM_AS_SUBMODULE OR IFEM_LIBRARY_BUILD)
|
||||
ifem_add_unittests(${IFEM_PATH})
|
||||
endif()
|
||||
if(NOT TARGET gtest)
|
||||
add_subdirectory(${IFEM_PATH}/3rdparty/gtest gtest EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
if (${UNIT_TEST_NUMBER} GREATER 0)
|
||||
foreach(test_number RANGE 1 ${UNIT_TEST_NUMBER})
|
||||
list(GET UNIT_TEST${test_number} 0 name)
|
||||
list(GET UNIT_TEST${test_number} 1 dir)
|
||||
list(GET UNIT_TEST${test_number} 2 -1 cmd)
|
||||
add_test(NAME ${name} WORKING_DIRECTORY ${dir} COMMAND ${cmd})
|
||||
endforeach()
|
||||
endif()
|
||||
add_dependencies(check ${TEST_APPS})
|
||||
add_custom_target(testapps DEPENDS ${TEST_APPS})
|
||||
endmacro()
|
||||
|
||||
if(NOT TARGET check-commits)
|
||||
add_custom_target(check-commits
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
|
||||
-DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
|
||||
-P ${IFEM_CHECKCOMMITS_SCRIPT})
|
||||
endif()
|
||||
|
||||
set(IFEM_TESTING_INCLUDED 1)
|
||||
if(IFEM_INTREE_BUILD)
|
||||
include_directories(${IFEM_PATH}/3rdparty/gtest/include)
|
||||
elseif(NOT IFEM_AS_SUBMODULE AND NOT IFEM_LIBRARY_BUILD
|
||||
AND NOT TARGET gtest)
|
||||
include(DownloadGTest)
|
||||
include_directories(${GTEST_INCLUDE_DIRS})
|
||||
endif()
|
|
@ -34,9 +34,14 @@ else ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
|||
endif ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
||||
|
||||
# let the user override if somewhere else is desirable
|
||||
set (CMAKE_INSTALL_LIBDIR "${_libdir_def}" CACHE PATH "Object code libraries")
|
||||
set (CMAKE_INSTALL_LIBDIR_NOARCH "${_libdir_noarch}" CACHE PATH "Architecture-independent library files")
|
||||
if(CMAKE_INSTALL_PREFIX MATCHES "/usr/local")
|
||||
set (CMAKE_INSTALL_LIBDIR "lib" CACHE PATH "Object code libraries")
|
||||
set (CMAKE_INSTALL_LIBDIR_NOARCH "lib" CACHE PATH "Architecture-independent library files")
|
||||
else()
|
||||
set (CMAKE_INSTALL_LIBDIR "${_libdir_def}" CACHE PATH "Object code libraries")
|
||||
set (CMAKE_INSTALL_LIBDIR_NOARCH "${_libdir_noarch}" CACHE PATH "Architecture-independent library files")
|
||||
endif()
|
||||
mark_as_advanced (
|
||||
CMAKE_INSTALL_LIBDIR
|
||||
CMAKE_INSTALL_LIBDIR_NOARCH
|
||||
)
|
||||
)
|
17
cmake/Templates/IFEMConfig.cmake.in
Normal file
17
cmake/Templates/IFEMConfig.cmake.in
Normal file
|
@ -0,0 +1,17 @@
|
|||
if(NOT IFEM_FOUND)
|
||||
set(IFEM_INCLUDE_DIRS @IFEM_INCLUDE_DIRS@)
|
||||
set(IFEM_LIBRARIES -L@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ -lIFEM @IFEM_DEPLIBS@)
|
||||
set(IFEM_DEFINITIONS "@IFEM_DEFINITIONS@")
|
||||
set(IFEM_CXX_FLAGS "@IFEM_CXX_FLAGS@")
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH @CMAKE_INSTALL_PREFIX@/lib/IFEM)
|
||||
set(IFEM_PATH @CMAKE_INSTALL_PREFIX@/lib/IFEM)
|
||||
|
||||
set(IFEM_REGTEST_SCRIPT ${IFEM_PATH}/scripts/regtest.sh.in)
|
||||
set(IFEM_CHECKCOMMITS_SCRIPT ${IFEM_PATH}/CheckCommits.cmake)
|
||||
|
||||
add_library(IFEMAppCommon STATIC IMPORTED)
|
||||
set_target_properties(IFEMAppCommon PROPERTIES IMPORTED_LOCATION
|
||||
@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/libIFEMAppCommon${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
set(IFEM_FOUND 1)
|
||||
endif()
|
4
cmake/Templates/IFEMConfigVersion.cmake.in
Normal file
4
cmake/Templates/IFEMConfigVersion.cmake.in
Normal file
|
@ -0,0 +1,4 @@
|
|||
set(PACKAGE_VERSION @IFEM_VERSION_MAJOR@.@IFEM_VERSION_MINOR@.@IFEM_VERSION_PATCH@)
|
||||
set(PACKAGE_VERSION_MAJOR @IFEM_VERSION_MAJOR@)
|
||||
set(PACAKGE_VERSION_MINOR @IFEM_VERSION_MINOR@)
|
||||
set(PACKAGE_VERSION_PATCH @IFEM_VERSION_PATCH@)
|
Loading…
Reference in New Issue
Block a user