168 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
PROJECT(IFEM)
 | 
						|
 | 
						|
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})
 | 
						|
 | 
						|
# Generate header with version info
 | 
						|
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/src/IFEM.h.in
 | 
						|
               IFEM.h @ONLY)
 | 
						|
 | 
						|
# Generate doxy in build tree
 | 
						|
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)
 | 
						|
 | 
						|
ENABLE_TESTING()
 | 
						|
 | 
						|
# Add local modules
 | 
						|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
 | 
						|
                      ${CMAKE_SOURCE_DIR}/cmake/Modules)
 | 
						|
 | 
						|
INCLUDE(Apps/Common/cmake/UseMultiArch.cmake)
 | 
						|
 | 
						|
if(NOT IFEM_AS_SUBMODULE)
 | 
						|
  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}
 | 
						|
                    ${PROJECT_SOURCE_DIR}/3rdparty/tinyxml)
 | 
						|
  FILE(GLOB_RECURSE TINYXML_SRCS ${PROJECT_SOURCE_DIR}/3rdparty/tinyxml/*.C)
 | 
						|
ENDIF(NOT IFEM_USE_SYSTEM_TINYXML)
 | 
						|
 | 
						|
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)
 | 
						|
 | 
						|
 | 
						|
# Required include directories
 | 
						|
SET(IFEM_INCLUDES
 | 
						|
    ${IFEM_INCLUDES}
 | 
						|
    ${IFEM_DEPINCLUDES}
 | 
						|
    ${PROJECT_SOURCE_DIR}/src
 | 
						|
    ${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
 | 
						|
    ${PROJECT_SOURCE_DIR}/3rdparty/expreval
 | 
						|
    ${PROJECT_SOURCE_DIR}/3rdparty/gtest/include
 | 
						|
    ${PROJECT_BINARY_DIR}
 | 
						|
)
 | 
						|
 | 
						|
INCLUDE_DIRECTORIES(${IFEM_INCLUDES})
 | 
						|
 | 
						|
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 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 -Wno-parentheses")
 | 
						|
ENDIF(NOT WIN32)
 | 
						|
 | 
						|
# Generate build flags in build tree
 | 
						|
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
 | 
						|
                    ${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)
 | 
						|
string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/src/ASM/ASMs.DInterpolate.C" "" IFEM_SRCS "${IFEM_SRCS}")
 | 
						|
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}
 | 
						|
                           SOVERSION ${IFEM_ABI_VERSION})
 | 
						|
 | 
						|
IF(IFEM_USE_GETBEAM)
 | 
						|
  FILE(GLOB_RECURSE GETB_SRCS ${PROJECT_SOURCE_DIR}/3rdparty/GETBeam/*.f)
 | 
						|
  ADD_LIBRARY(GETBeam ${GETB_SRCS})
 | 
						|
ENDIF(IFEM_USE_GETBEAM)
 | 
						|
 | 
						|
# For generating the doxy
 | 
						|
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)
 | 
						|
add_dependencies(doc lib_doc)
 | 
						|
 | 
						|
# 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)
 | 
						|
 | 
						|
IF(WIN32)
 | 
						|
  # TODO
 | 
						|
ELSE(WIN32)
 | 
						|
  # lib
 | 
						|
  INSTALL(TARGETS IFEM DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT bin)
 | 
						|
 | 
						|
  # headers
 | 
						|
  FILE(GLOB IFEM_HEADERS src/ASM/AlgEqSystem.h src/ASM/ASMbase.h
 | 
						|
                         src/ASM/ASMenums.h src/ASM/ASMmxBase.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/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})
 | 
						|
 | 
						|
  # cmake modules
 | 
						|
  INSTALL(FILES cmake/Modules/FindIFEM.cmake DESTINATION lib/IFEM RENAME IFEMConfig.cmake)
 | 
						|
 | 
						|
  # 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}
 | 
						|
            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)
 |