cmake_minimum_required(VERSION 3.2 FATAL_ERROR) project(AMDiS VERSION 1.1 LANGUAGES CXX) list(APPEND CMAKE_MODULE_PATH ${BASE_DIR}/cmake3) # Include macros include(target_enable_cxx11) include(target_enable_mtl4) include(target_enable_boost) include(target_enable_umfpack) include(target_enable_petsc) include(target_enable_zoltan) include(target_enable_bddcml) include(target_enable_hypre) include(target_enable_png) # ------------------------------------------------------------------------------ # define an interface-library for flags and compile-definitions add_library(amdis_base INTERFACE) add_library(AMDiS::base ALIAS amdis_base) target_include_directories(amdis_base INTERFACE ${SOURCE_DIR}) target_compile_definitions(amdis_base INTERFACE) target_enable_cxx14(SUPPORTS_CXX14 amdis_base INTERFACE) if (SUPPORTS_CXX14) target_compile_definitions(amdis_base INTERFACE AMDIS_HAS_CXX14=1) else () target_enable_cxx11(SUPPORTS_CXX11 amdis_base INTERFACE) endif () if (NOT SUPPORTS_CXX11 AND NOT SUPPORTS_CXX14) message(FATAL_ERROR "AMDiS needs c++11 support, but the current compiler does not support this feature!") endif () target_compile_definitions(amdis_base INTERFACE AMDIS_HAS_CXX11=1) target_enable_mtl4(amdis_base INTERFACE) target_enable_boost(amdis_base INTERFACE) if (ENABLE_UMFPACK) target_enable_umfpack(amdis_base INTERFACE) endif (ENABLE_UMFPACK) if (ENABLE_PNG) target_enable_png(amdis_base INTERFACE) endif (ENABLE_PNG) # ------------------------------------------------------------------------------ add_library(amdis ${SOURCE_DIR}/AdaptBase.cc ${SOURCE_DIR}/AdaptInfo.cc ${SOURCE_DIR}/AdaptInstationary.cc ${SOURCE_DIR}/AdaptStationary.cc ${SOURCE_DIR}/AMDiS.cc ${SOURCE_DIR}/Assembler.cc ${SOURCE_DIR}/BasisFunction.cc ${SOURCE_DIR}/Boundary.cc ${SOURCE_DIR}/BoundaryManager.cc ${SOURCE_DIR}/BoundaryObject.cc ${SOURCE_DIR}/Bubble.cc ${SOURCE_DIR}/Cholesky.cc ${SOURCE_DIR}/CoarseningManager.cc ${SOURCE_DIR}/CoarseningManager1d.cc ${SOURCE_DIR}/CoarseningManager2d.cc ${SOURCE_DIR}/CoarseningManager3d.cc ${SOURCE_DIR}/ComponentTraverseInfo.cc ${SOURCE_DIR}/CouplingIterationInterface.cc ${SOURCE_DIR}/CreatorMap.cc ${SOURCE_DIR}/DOFAdmin.cc ${SOURCE_DIR}/DOFIndexed.cc ${SOURCE_DIR}/DOFMatrix.cc ${SOURCE_DIR}/DOFSerializer.cc ${SOURCE_DIR}/DOFVector.cc ${SOURCE_DIR}/DirichletBC.cc ${SOURCE_DIR}/DualTraverse.cc ${SOURCE_DIR}/ElInfo.cc ${SOURCE_DIR}/ElInfo1d.cc ${SOURCE_DIR}/ElInfo2d.cc ${SOURCE_DIR}/ElInfo3d.cc ${SOURCE_DIR}/ElInfoStack.cc ${SOURCE_DIR}/Element.cc ${SOURCE_DIR}/ElementData.cc ${SOURCE_DIR}/ElementDofIterator.cc ${SOURCE_DIR}/ElementRegion_ED.cc ${SOURCE_DIR}/FiniteElemSpace.cc ${SOURCE_DIR}/FirstOrderAssembler.cc ${SOURCE_DIR}/FirstOrderTerm.cc ${SOURCE_DIR}/FixVec.cc ${SOURCE_DIR}/Global.cc ${SOURCE_DIR}/Initfile.cc ${SOURCE_DIR}/Lagrange.cc ${SOURCE_DIR}/LeafData.cc ${SOURCE_DIR}/Line.cc ${SOURCE_DIR}/MacroElement.cc ${SOURCE_DIR}/Marker.cc ${SOURCE_DIR}/MatrixVector.cc ${SOURCE_DIR}/Mesh.cc ${SOURCE_DIR}/MeshStructure.cc ${SOURCE_DIR}/Operator.cc ${SOURCE_DIR}/OperatorTerm.cc ${SOURCE_DIR}/Parametric.cc ${SOURCE_DIR}/PeriodicBC.cc ${SOURCE_DIR}/ProblemInstat.cc ${SOURCE_DIR}/ProblemInterpol.cc ${SOURCE_DIR}/ProblemStat.cc ${SOURCE_DIR}/Projection.cc ${SOURCE_DIR}/QPInfo.cc ${SOURCE_DIR}/QPsiPhi.cc ${SOURCE_DIR}/Quadrature.cc ${SOURCE_DIR}/RCNeighbourList.cc ${SOURCE_DIR}/Recovery.cc ${SOURCE_DIR}/RefinementManager.cc ${SOURCE_DIR}/RefinementManager1d.cc ${SOURCE_DIR}/RefinementManager2d.cc ${SOURCE_DIR}/RefinementManager3d.cc ${SOURCE_DIR}/RobinBC.cc ${SOURCE_DIR}/ScalableQuadrature.cc ${SOURCE_DIR}/SecondOrderAssembler.cc ${SOURCE_DIR}/SecondOrderTerm.cc ${SOURCE_DIR}/Serializer.cc ${SOURCE_DIR}/StandardProblemIteration.cc ${SOURCE_DIR}/SubAssembler.cc ${SOURCE_DIR}/SubElInfo.cc ${SOURCE_DIR}/SubQuadrature.cc ${SOURCE_DIR}/SurfaceQuadrature.cc ${SOURCE_DIR}/SurfaceRegion_ED.cc ${SOURCE_DIR}/SystemVector.cc ${SOURCE_DIR}/Tetrahedron.cc ${SOURCE_DIR}/Timer.cc ${SOURCE_DIR}/Traverse.cc ${SOURCE_DIR}/Triangle.cc ${SOURCE_DIR}/VertexVector.cc ${SOURCE_DIR}/ZeroOrderAssembler.cc ${SOURCE_DIR}/ZeroOrderTerm.cc ${SOURCE_DIR}/est/Estimator.cc ${SOURCE_DIR}/est/RecoveryEstimator.cc ${SOURCE_DIR}/est/ResidualEstimator.cc ${SOURCE_DIR}/est/SimpleResidualEstimator.cc ${SOURCE_DIR}/io/ArhReader.cc ${SOURCE_DIR}/io/detail/ArhReader.cc ${SOURCE_DIR}/io/Arh2Reader.cc ${SOURCE_DIR}/io/Arh2Writer.cc ${SOURCE_DIR}/io/Arh3Reader.cc ${SOURCE_DIR}/io/Arh3Writer.cc ${SOURCE_DIR}/io/detail/Arh2Reader.cc ${SOURCE_DIR}/io/detail/ArhWriter.cc ${SOURCE_DIR}/io/detail/Arh2Writer.cc ${SOURCE_DIR}/io/detail/Arh3Reader.cc ${SOURCE_DIR}/io/detail/Arh3Writer.cc ${SOURCE_DIR}/io/DofWriter.cc ${SOURCE_DIR}/io/ElementFileWriter.cc ${SOURCE_DIR}/io/FileWriterInterface.cc ${SOURCE_DIR}/io/FileWriter.cc ${SOURCE_DIR}/io/GNUPlotWriter.cc ${SOURCE_DIR}/io/MacroInfo.cc ${SOURCE_DIR}/io/MacroReader.cc ${SOURCE_DIR}/io/MacroWriter.cc ${SOURCE_DIR}/io/PngReader.cc ${SOURCE_DIR}/io/PngWriter.cc ${SOURCE_DIR}/io/PovrayWriter.cc ${SOURCE_DIR}/io/Spreadsheet.cc ${SOURCE_DIR}/io/ValueReader.cc ${SOURCE_DIR}/io/ValueWriter.cc ${SOURCE_DIR}/io/VtkWriter.cc ${SOURCE_DIR}/io/VtkVectorWriter.cc ${SOURCE_DIR}/io/detail/VtkWriter.cc ${SOURCE_DIR}/nonlin/ProblemNonLin.cc ${SOURCE_DIR}/solver/SolverMatrix.cc ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc ${SOURCE_DIR}/time/RosenbrockMethod.cc ${SOURCE_DIR}/time/RosenbrockStationary.cc # debugging files ${SOURCE_DIR}/Debug.cc ${SOURCE_DIR}/GlobalDOFNumbering.cc # not used by any other class ${SOURCE_DIR}/GlobalElementNumbering.cc # not used by any other class ${SOURCE_DIR}/ProblemStatDbg.cc ) include(amdis_parallel) # adds sources to amdis include(amdis_extensions) # -> target AMDiS::extensions include(muparser) # -> target muparser # ------------------------------------------------------------------------------ if (ENABLE_COMPRESSION) target_compile_definitions(amdis PRIVATE AMDIS_HAS_COMPRESSION=1) endif (ENABLE_COMPRESSION) if (ENABLE_REINIT) include(amdis_reinit) # -> target AMDiS::reinit endif (ENABLE_REINIT) if (ENABLE_COMPOSITE_FEM) include(amdis_compositeFEM) # -> target AMDiS::compositeFEM endif (ENABLE_COMPOSITE_FEM) if (ENABLE_SEQ_PETSC) include(amdis_seq_petsc) # -> target AMDiS::seq_petsc endif (ENABLE_SEQ_PETSC) # ------------------------------------------------------------------------------ target_link_libraries(amdis AMDiS::base muparser) # specify how to install this target: # ----------------------------------- set(INSTALL_SUBDIRS . config nonlin est expressions operations traits utility time solver solver/details solver/itl io io/detail) foreach (SUBDIR ${INSTALL_SUBDIRS}) file(GLOB HEADERS "${SOURCE_DIR}/${SUBDIR}/*.h*") install(FILES ${HEADERS} DESTINATION include/amdis/${SUBDIR}/) endforeach () file(GLOB CMAKE_MACROS "${BASE_DIR}/cmake3/target_enable_*.cmake") install(FILES ${CMAKE_MACROS} DESTINATION share/amdis/) install(FILES ${BASE_DIR}/cmake3/parse_zoltan_makefile.cmake DESTINATION share/amdis/) install(DIRECTORY ${BASE_DIR}/lib/mtl4/ DESTINATION include/amdis/mtl4/ FILES_MATCHING PATTERN "*.hpp" PATTERN ".svn" EXCLUDE PATTERN ".svn/*" EXCLUDE PATTERN "mtl4/libs" EXCLUDE PATTERN "mtl4/extern" EXCLUDE) set_target_properties(amdis PROPERTIES OUTPUT_NAME amdis${POSTFIX} DEBUG_OUTPUT_NAME amdis${POSTFIX}d) install(TARGETS amdis DESTINATION lib/amdis/ ) # generate configuration file: # ---------------------------- # global configuration configure_file(${BASE_DIR}/cmake3/AMDISConfig.cmake.in ${AMDiS_BINARY_DIR}/AMDISConfig.cmake @ONLY ) # component configuration configure_file(${BASE_DIR}/cmake3/AMDIS.cmake.in ${AMDiS_BINARY_DIR}/AMDIS${POSTFIX}.cmake @ONLY ) install(FILES ${AMDiS_BINARY_DIR}/AMDISConfig.cmake DESTINATION share/amdis/) install(FILES ${AMDiS_BINARY_DIR}/AMDIS${POSTFIX}.cmake DESTINATION share/amdis/) install(FILES ${BASE_DIR}/cmake3/AMDISUse.cmake DESTINATION share/amdis/)