Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- # CMake configuration script for Elmer
- #
- # Authors:
- # Sami Ilvonen, CSC - IT Center for Science, Ltd.
- # Phil Weir, NUMA Engineering Services, Ltd.
- # Mikko Byckling, CSC - IT Center for Science Ltd.
- # Juhani Kataja, CSC - IT Center for Science Ltd.
- #
- # First public beta release 11th of October, 2013
- #
- if(APPLE)
- # message("you need to have gcc-gfrotran installed using HomeBrew")
- # set(CMAKE_C_COMPILER "/usr/bin/gcc")
- # set(CMAKE_CXX_COMPILER "/usr/bin/g++")
- set(CMAKE_C_COMPILER "/usr/local/bin/gcc-10")
- set(CMAKE_CXX_COMPILER "/usr/local/bin/g++-10")
- set(CMAKE_Fortran_COMPILER "/usr/local/bin/gfortran")
- # set(BLA_VENDOR "OpenBLAS")
- # option(HUNTER_ENABLED "Enable Hunter package manager support" OFF)
- # set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)
- # set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
- endif()
- IF(NOT CMAKE_BUILD_TYPE)
- SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Build type (Release, Debug, RelWithDebugInfo, MinSizeRel)")
- ENDIF()
- PROJECT(Elmer Fortran C CXX)
- # CMAKE_VERSION seems to require this in minimum
- CMAKE_MINIMUM_REQUIRED(VERSION 3.0.2)
- IF(APPLE)
- SET(CMAKE_MACOSX_RPATH 1)
- # on OSX FindOpenGL uses framework version of OpenGL, but we need X11 version
- FIND_PATH(GLX_INCLUDE_DIR GL/glx.h
- PATHS /opt/X11/include /usr/X11/include /usr/X11R6/include)
- find_library(X11_GL_LIB GL
- PATH /opt/X11/lib /usr/X11/lib /usr/X11R6/lib)
- # FIND_LIBRARY(OPENGL_gl_LIBRARY GL
- # PATHS /opt/X11/lib /usr/X11/lib /usr/X11R6/lib)
- # FIND_LIBRARY(OPENGL_glu_LIBRARY GLU
- # PATHS /opt/X11/lib /usr/X11/lib /usr/X11R6/lib)
- # LIST(APPEND LIBS ${OPENGL_gl_LIBRARY})
- INCLUDE_DIRECTORIES(${GLX_INCLUDE_DIR})
- ENDIF()
- #shamelessly borrowed from FreeCAD project: https://github.com/FreeCAD/FreeCAD/blob/master/cMake/FreeCAD_Helpers/SetupPython.cmake
- # For building on OS X
- if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- # If the user doesn't tell us which package manager they're using
- if(NOT DEFINED MACPORTS_PREFIX AND NOT DEFINED HOMEBREW_PREFIX)
- # Try to find MacPorts path
- find_program(MACPORTS_EXECUTABLE port)
- if(EXISTS ${MACPORTS_EXECUTABLE})
- string(REPLACE "/bin/port" ""
- MACPORTS_PREFIX ${MACPORTS_EXECUTABLE})
- message(STATUS "Detected MacPorts install at ${MACPORTS_PREFIX}")
- endif(EXISTS ${MACPORTS_EXECUTABLE})
- # Try to find Homebrew path
- find_program(HOMEBREW_EXECUTABLE brew)
- if(EXISTS ${HOMEBREW_EXECUTABLE})
- string(REPLACE "/bin/brew" ""
- HOMEBREW_PREFIX ${HOMEBREW_EXECUTABLE})
- message(STATUS "Detected Homebrew install at ${HOMEBREW_PREFIX}")
- endif()
- endif(NOT DEFINED MACPORTS_PREFIX AND NOT DEFINED HOMEBREW_PREFIX)
- # In case someone tries to shoot themselves in the foot
- if(DEFINED MACPORTS_PREFIX AND DEFINED HOMEBREW_PREFIX)
- message(SEND_ERROR "Multiple package management systems detected - ")
- message(SEND_ERROR "define either MACPORTS_PREFIX or HOMEBREW_PREFIX")
- # No package manager
- elseif(NOT DEFINED MACPORTS_PREFIX AND NOT DEFINED HOMEBREW_PREFIX)
- message(SEND_ERROR "No package manager detected - install MacPorts or Homebrew")
- endif()
- endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- # SET(CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules;${PROJECT_SOURCE_DIR}/cmake/Modules")
- SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules;${CMAKE_ROOT}/Modules")
- SET(CMAKE_Fortran_MODULE_DIRECTORY
- ${PROJECT_BINARY_DIR}/fmodules CACHE PATH "Directory for Fortran modules")
- # Defaults to cache variables
- # SET(WITH_MPI TRUE CACHE BOOL "Use MPI parallelization")
- # SET(MPI_TEST_MAXPROC 8 CACHE STRING "Maximum number of tasks used in parallel tests")
- # SET(MPI_TEST_MINPROC 1 CACHE STRING "Minimum number of tasks used in parallel tests")
- SET(WITH_OpenMP FALSE CACHE BOOL "Use OpenMP thread and SIMD (if available) parallelization")
- SET(WITH_MKL FALSE CACHE BOOL "Use Intel Math Kernel library")
- SET(WITH_Mumps FALSE CACHE BOOL "Use Mumps sparse direct solver")
- SET(WITH_Hypre FALSE CACHE BOOL "Use Hypre linear algebra library")
- SET(WITH_ELMERGUI FALSE CACHE BOOL "Include ElmerGUI")
- SET(WITH_ElmerIce FALSE CACHE BOOL "Include ElmerIce")
- SET(WITH_ELMERGUITESTER FALSE CACHE BOOL "Include ElmerGUI tester")
- SET(WITH_ELMERGUILOGGER FALSE CACHE BOOL "Include ElmerGUI logger")
- SET(ELMER_INSTALL_LIB_DIR "lib/elmersolver" CACHE PATH "Location of elmer shared libraries relative to prefix.")
- SET(WITH_Trilinos FALSE CACHE BOOL "Use Trilinos")
- SET(WITH_FETI4I FALSE CACHE BOOL "Use FETI4I")
- SET(WITH_ELMERPOST FALSE CACHE BOOL "Include ElmerPost (DEPRECATED)")
- SET(WITH_CONTRIB FALSE CACHE BOOL "Include contributed solvers")
- SET(WITH_LUA FALSE CACHE BOOL "Include LUA extensions.")
- SET(WITH_Zoltan FALSE CACHE BOOL "Link in Zoltan mesh repartitioning library.")
- # Let user select if the contiguous attribute is used or not
- SET(USE_CONTIGUOUS FALSE CACHE BOOL "Use contiguous attribute")
- MARK_AS_ADVANCED(WITH_ELMERPOST)
- # if("${CMAKE_VERSION}" VERSION_GREATER 2.8.12)
- # CMAKE_POLICY(SET CMP0022 OLD)
- # ENDIF()
- MARK_AS_ADVANCED(ELMER_INSTALL_LIB_DIR)
- ENABLE_TESTING()
- SET(ELMER_FEM_MAJOR_VERSION 9)
- SET(ELMER_FEM_MINOR_VERSION 0)
- SET(ELMER_FEM_VERSION
- ${ELMER_FEM_MAJOR_VERSION}.${ELMER_FEM_MINOR_VERSION})
- IF(NOT(ELMER_FEM_REVISION))
- SET(RESET_ELMER_REVISION TRUE CACHE BOOL "")
- MARK_AS_ADVANCED(RESET_ELMER_REVISION)
- ENDIF()
- IF(RESET_ELMER_REVISION)
- execute_process(
- COMMAND "git" "--no-pager" "log" "-1" "--pretty=format:%h"
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE ELMER_FEM_REVISION_
- RESULT_VARIABLE RUN_RETURN_VALUE)
- IF(RUN_RETURN_VALUE EQUAL 0)
- SET(ELMER_FEM_REVISION ${ELMER_FEM_REVISION_} CACHE STRING "" FORCE)
- MARK_AS_ADVANCED(ELMER_FEM_REVISION)
- ENDIF()
- ENDIF()
- SET(VERSION ${ELMER_FEM_VERSION})
- SET(REVISION ${ELMER_FEM_REVISION})
- SET(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
- STRING(TIMESTAMP ELMER_FEM_COMPILATIONDATE "%Y-%m-%d")
- SET(COMPILATIONDATE ${ELMER_FEM_COMPILATIONDATE})
- # Check that the gfortran version is >= 4.8
- IF(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU")
- INCLUDE(testGFortranVersion)
- IF(NOT CMAKE_Fortran_COMPILER_GNU_VERSION_OK)
- MESSAGE(FATAL_ERROR "GNU Fortran version is too old, should be at least 4.8")
- ENDIF()
- ENDIF()
- IF(WITH_LUA)
- IF(NOT(${USE_SYSTEM_LUA}))
- ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/contrib/lua-5.1.5/)
- set(LUA_LIBRARIES luaelmer CACHE STRING "")
- set(LUA_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/contrib/lua-5.1.5/src CACHE STRING "")
- ELSE()
- FIND_PACKAGE(Lua51 REQUIRED)
- ENDIF()
- SET(HAVE_LUA TRUE)
- MARK_AS_ADVANCED(HAVE_LUA)
- ENDIF()
- IF(WITH_EXTOPTIM)
- SET(HAVE_EXTOPTIM TRUE)
- ENDIF()
- IF(WITH_OpenMP)
- # Advanced properties
- MARK_AS_ADVANCED(
- OpenMP_C_FLAGS
- OpenMP_Fortran_FLAGS
- OpenMP_CXX_FLAGS
- )
- FIND_PACKAGE(OpenMP REQUIRED)
- # Add OpenMP flags to compilation flags
- # if(APPLE)
- # if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
- # set(OpenMP_C "${CMAKE_C_COMPILER}")
- # set(OpenMP_C_FLAGS "-fopenmp=libomp -Wno-unused-command-line-argument")
- # set(OpenMP_C_LIB_NAMES "libomp" "libgomp" "libiomp5")
- # set(OpenMP_libomp_LIBRARY ${OpenMP_C_LIB_NAMES})
- # set(OpenMP_libgomp_LIBRARY ${OpenMP_C_LIB_NAMES})
- # set(OpenMP_libiomp5_LIBRARY ${OpenMP_C_LIB_NAMES})
- # endif()
- # if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
- # set(OpenMP_CXX "${CMAKE_CXX_COMPILER}")
- # set(OpenMP_CXX_FLAGS "-fopenmp=libomp -Wno-unused-command-line-argument")
- # set(OpenMP_CXX_LIB_NAMES "libomp" "libgomp" "libiomp5")
- # set(OpenMP_libomp_LIBRARY ${OpenMP_CXX_LIB_NAMES})
- # set(OpenMP_libgomp_LIBRARY ${OpenMP_CXX_LIB_NAMES})
- # set(OpenMP_libiomp5_LIBRARY ${OpenMP_CXX_LIB_NAMES})
- # endif()
- # else()
- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
- SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
- # endif()
- # Test compiler support for OpenMP 4.0 features used
- INCLUDE(testOpenMP40)
- IF(CMAKE_Fortran_COMPILER_SUPPORTS_OPENMP40)
- SET(HAVE_OPENMP40 TRUE)
- MARK_AS_ADVANCED(HAVE_OPENMP40)
- # Test compiler support for advanced OpenMP 4.5 features used
- INCLUDE(testOpenMP45)
- IF(CMAKE_Fortran_COMPILER_SUPPORTS_OPENMP45)
- SET(HAVE_OPENMP45 TRUE)
- MARK_AS_ADVANCED(HAVE_OPENMP45)
- ENDIF()
- ENDIF()
- ENDIF()
- # Get rid of the annoying rank mismatch warning
- IF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
- IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.9)
- SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch")
- # SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy")
- ENDIF()
- ENDIF()
- # IF(WITH_MPI)
- # # Advanced properties
- # MARK_AS_ADVANCED(
- # MPI_EXTRA_LIBRARY
- # MPI_LIBRARY
- # )
- # FIND_PACKAGE(MPI REQUIRED)
- # # Workaround if MPI is found but MPI_FOUND is not set (windows+msmpi+findmpi)
- # SET(MPI_FOUND TRUE CACHE BOOL "")
- # MARK_AS_ADVANCED(MPI_FOUND)
- # INCLUDE_DIRECTORIES(${MPI_Fortran_INCLUDE_PATH})
- # # MPI libraries may be needed for testing
- # SET(CMAKE_C_REQUIRED_LIBRARIES ${MPI_C_LIBRARIES})
- # SET(CMAKE_CXX_REQUIRED_LIBRARIES ${MPI_CXX_LIBRARIES})
- # SET(CMAKE_Fortran_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES})
- # ENDIF(WITH_MPI)
- # if(APPLE)
- # # message(STATUS "Trying to find Accelerate library")
- # # find_library(BLAS_LIBRARIES Accelerate HINTS /System/Library/Frameworks/Accelerate.framework)
- # # MARK_AS_ADVANCED(BLAS_LIBRARIES)
- # # set(BLAS_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -framework accelerate")
- # # find_path(LAPACK_INCLUDE_DIRS
- # # NAMES clapack.h
- # # PATHS ${BLAS_INCLUDE_DIRS}
- # # NO_DEFAULT_PATH
- # # )
- # # set(LAPACK_HEADER ${LAPACK_INCLUDE_DIRS}/clapack.h)
- # # set(LAPACK_SUFFIX "_")
- # # set(LAPACK_PREFIX)
- # # message(STATUS "Using Accelerate framework on macOS")
- # message("using the local blas library")
- # # option(BLAS_VERBOSE "Print some additional information during BLAS libraries detection" ON)
- # set(BLAS_DIR "./mathlibs/src/blas/")
- # set(BLA_VENDOR "Generic")
- # set(ACCELERATE_LIBS "-framework Accelerate")
- # BLAS_Accelerate_LIBRARY:FILEPATH=/System/Library/Frameworks/Accelerate.framework
- # else()
- # IF(WITH_MKL)
- # # Find MKL
- # FIND_PACKAGE(MKL REQUIRED)
- # SET(HAVE_MKL TRUE)
- # MARK_AS_ADVANCED(HAVE_MKL)
- # # Set BLAS and LAPACK to point to MKL
- # SET(BLAS_LIBRARIES ${MKL_BLAS_LIBRARIES} CACHE FILEPATH "")
- # SET(LAPACK_LIBRARIES ${MKL_LAPACK_LIBRARIES} CACHE FILEPATH "")
- # IF(MKL_SCALAPACK_LIBRARIES_FOUND)
- # SET(SCALAPACK_LIBRARIES ${MKL_SCALAPACK_LIBRARIES})
- # # Versions >11.1 of MKL include Cluster PARDISO direct solver
- # IF(MKL_CPARDISO_FOUND)
- # SET(HAVE_CPARDISO TRUE)
- # MARK_AS_ADVANCED(HAVE_CPARDISO)
- # ENDIF()
- # ENDIF()
- # INCLUDE_DIRECTORIES(${MKL_INCLUDE_DIR})
- # SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${MKL_Fortran_FLAGS}")
- # ELSE()
- # IF (NOT BLAS_LIBRARIES OR NOT LAPACK_LIBRARIES)
- # # If BLAS/LAPACK not explicitly set, attempt to find MKL BLAS/LAPACK
- # FIND_PACKAGE(MKL QUIET)
- # IF (MKL_BLAS_LIBRARIES_FOUND AND MKL_LAPACK_LIBRARIES_FOUND)
- # # Set BLAS and LAPACK to point to MKL, in order to work around
- # # CMake FindBLAS finding wrong core library for GNU Fortran
- # SET(BLAS_LIBRARIES ${MKL_BLAS_LIBRARIES} CACHE FILEPATH "")
- # SET(LAPACK_LIBRARIES ${MKL_LAPACK_LIBRARIES} CACHE FILEPATH "")
- # INCLUDE_DIRECTORIES(${MKL_INCLUDE_DIR})
- # SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${MKL_Fortran_FLAGS}")
- # ENDIF()
- # ENDIF()
- # ENDIF()
- # endif(APPLE)
- # MARK_AS_ADVANCED(WITH_Trilinos)
- IF(WITH_Trilinos)
- FIND_PACKAGE(ML REQUIRED PATHS ${TRILINOS_PATH}/lib/cmake/ML ${TRILINOS_PATH})
- FIND_PACKAGE(Trilinos REQUIRED PATHS ${TRILINOS_PATH}/lib/cmake/Trilinos ${TRILINOS_PATH})
- FIND_PACKAGE(Belos REQUIRED PATHS ${TRILINOS_PATH}/lib/cmake/Belos ${TRILINOS_PATH})
- IF(ML_DIR)
- ADD_DEFINITIONS(-DHAVE_TRILINOS)
- ENDIF()
- ENDIF()
- IF(WITH_Zoltan)
- # ZOLTAN Remeshing
- MESSAGE(STATUS "------------------------------------------------")
- SET(USE_SYSTEM_ZOLTAN FALSE CACHE BOOL "Use system Zoltan library")
- IF(NOT ${USE_SYSTEM_ZOLTAN})
- MESSAGE(STATUS "Building Zoltan mesh repartitioner")
- ADD_SUBDIRECTORY(contrib/Zoltan_v3.83)
- SET(HAVE_ZOLTAN TRUE CACHE BOOL "Has Zoltan tools for mesh (re)partitioning" )
- MARK_AS_ADVANCED(HAVE_ZOLTAN)
- MESSAGE(STATUS " Zoltan_LIB: " "${ZOLTAN_LIBRARY}")
- MESSAGE(STATUS "------------------------------------------------")
- ELSE()
- FIND_PACKAGE(Zoltan)
- IF(ZOLTAN_FOUND)
- SET(HAVE_ZOLTAN TRUE CACHE BOOL "Has Zoltan tools for mesh (re)partitioning" )
- GET_FILENAME_COMPONENT(ZOLTAN_LIBDIR ${ZOLTAN_LIBRARY} DIRECTORY)
- MARK_AS_ADVANCED(HAVE_ZOLTAN)
- MESSAGE(STATUS " Zoltan: " "${ZOLTAN_FOUND}")
- MESSAGE(STATUS " Zoltan_INC: " "${ZOLTAN_INCLUDE_DIR}")
- MESSAGE(STATUS " Zoltan_LIB: " "${ZOLTAN_LIBRARY}")
- MESSAGE(STATUS " Zoltan_LIBDIR: " "${ZOLTAN_LIBDIR}")
- INCLUDE_DIRECTORIES(${ZOLTAN_INCLUDE_DIR})
- MESSAGE(STATUS "------------------------------------------------")
- ELSE()
- MESSAGE(STATUS " Library not found: >ZOLTAN_FOUND< ")
- MESSAGE(STATUS " Missing: >ZOLTAN_INCLUDE_DIR< , >ZOLTAN_LIBRARY< for mesh (re)partitioning")
- ENDIF(ZOLTAN_FOUND)
- MESSAGE(STATUS "------------------------------------------------")
- ENDIF()
- ENDIF(WITH_Zoltan)
- # # MMG Remeshing
- # MESSAGE(STATUS "------------------------------------------------")
- # MESSAGE(STATUS "Mesh adaptation 2D/3D looking for [Mmg] tools ")
- # FIND_PACKAGE(MMG)
- # # INCLUDE("cmake/Modules/FindMMG.cmake")
- # # INCLUDE_DIRECTORIES(${MMG_INCLUDE_DIR})
- # # TARGET_LINK_LIBRARIES( ${YOUR_TARGET} ${MMG_LIBRARY})
- # IF(MMG_FOUND)
- # SET(HAVE_MMG TRUE CACHE BOOL "Has Mmg tools for Elmer/Ice Mesh adaptation" )
- # GET_FILENAME_COMPONENT(MMG_LIBDIR ${MMG_LIBRARY} DIRECTORY)
- # MARK_AS_ADVANCED(HAVE_MMG)
- # MESSAGE(STATUS " Mmg: " "${MMG_FOUND}")
- # MESSAGE(STATUS " Mmg_INC: " "${MMG_INCLUDE_DIR}")
- # MESSAGE(STATUS " Mmg_LIB: " "${MMG_LIBRARY}")
- # MESSAGE(STATUS " Mmg_LIBDIR: " "${MMG_LIBDIR}")
- # MESSAGE(STATUS "Compile MMG2DSolver/MMG3DSolver")
- # ADD_DEFINITIONS(-DHAVE_MMG)
- # INCLUDE_DIRECTORIES(${MMG_INCLUDE_DIR})
- # MESSAGE(STATUS "------------------------------------------------")
- # ELSE()
- # MESSAGE(STATUS " Library not found: >MMG_FOUND< ")
- # MESSAGE(STATUS " Missing: >MMG_INCLUDE_DIR< , >MMG_LIBRARY<, to compile MMG3DSolver")
- # ENDIF(MMG_FOUND)
- MESSAGE(STATUS "------------------------------------------------")
- # MPI and LAPACK
- FIND_PACKAGE(BLAS REQUIRED)
- FIND_PACKAGE(LAPACK REQUIRED)
- # BLAS and LAPACK libraries may be needed for testing
- SET(CMAKE_REQUIRED_LIBRARIES
- ${CMAKE_REQUIRED_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})
- # IF(MPI_FOUND)
- # # Mumps
- # IF(WITH_Mumps)
- # FIND_PACKAGE(Mumps REQUIRED)
- # ENDIF()
- # # Hypre
- # IF(WITH_Hypre)
- # FIND_PACKAGE(Hypre REQUIRED OPTIONAL_COMPONENTS Euclid parcsr_ls ParaSails IJ_mv FEI core QUIET)
- # ENDIF()
- # # Permon
- # IF(WITH_FETI4I)
- # FIND_PACKAGE(FETI4I REQUIRED)
- # ENDIF()
- # ENDIF()
- IF(Mumps_FOUND)
- SET(HAVE_MUMPS TRUE)
- MARK_AS_ADVANCED(HAVE_MUMPS)
- # LINK_DIRECTORIES(${MUMPS_LIBRARIES})
- ENDIF()
- IF(Hypre_FOUND)
- SET(HAVE_HYPRE TRUE)
- MARK_AS_ADVANCED(HAVE_HYPRE)
- INCLUDE_DIRECTORIES(${Hypre_INCLUDE_DIR})
- # LINK_DIRECTORIES(${Hypre_LIBRARIES})
- ENDIF()
- IF(FETI4I_FOUND)
- SET(HAVE_FETI4I TRUE)
- MARK_AS_ADVANCED(HAVE_FETI4I)
- ADD_DEFINITIONS(-DHAVE_FETI4I)
- ENDIF()
- # Check if Fortran compiler supports procedure pointer
- INCLUDE(testProcedurePointer)
- IF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_PROCEDUREPOINTER)
- MESSAGE(FATAL_ERROR "Fortran compiler does not seem to support the PROCEDURE statement.")
- ENDIF()
- # Check if Fortran compiler supports contiguous keyword
- INCLUDE(testContiguous)
- IF(USE_CONTIGUOUS AND CMAKE_Fortran_COMPILER_SUPPORTS_CONTIGUOUS)
- ADD_DEFINITIONS(-DCONTIG=,CONTIGUOUS)
- ELSE()
- ADD_DEFINITIONS(-DCONTIG=)
- ENDIF()
- # Check if this is mingw toolchain.
- IF(MINGW)
- ADD_DEFINITIONS(-DMINGW32)
- ENDIF()
- IF(WIN32)
- ADD_DEFINITIONS(-DWIN32)
- ENDIF()
- # Check if Fortran compiler supports execute_command_line
- INCLUDE(testExecutecommand)
- IF(CMAKE_Fortran_COMPILER_SUPPORTS_EXECUTECOMMANDLINE)
- ADD_DEFINITIONS(-DHAVE_EXECUTECOMMANDLINE)
- ENDIF()
- ADD_DEFINITIONS(-DUSE_ISO_C_BINDINGS)
- SET(FC_STDCALLBULL " ")
- SET(ELMER_LINKTYP 1)
- #SET(FC_FUNC FC_GLOBAL)
- #SET(FC_FUNC_ FC_GLOBAL_)
- # Add support for arpack
- ADD_DEFINITIONS(-DUSE_ARPACK)
- #INCLUDE(FortranCInterface)
- #FortranCInterface_HEADER(FCMangle.h MACRO_NAMESPACE "FC_")
- #FortranCInterface_VERIFY(CXX)
- # Set up rpaths to point ELMER_INSTALL_LIB_DIR
- IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
- SET(ELMERSOLVER_RPATH_STRING "\$ORIGIN/../${ELMER_INSTALL_LIB_DIR}")
- SET(ELMERLIB_RPATH_STRING "\$ORIGIN/")
- ELSEIF(APPLE)
- SET(ELMERSOLVER_RPATH_STRING "@loader_path/../${ELMER_INSTALL_LIB_DIR}")
- SET(ELMERLIB_RPATH_STRING "@loader_path/")
- ENDIF()
- # Uncomment these to use rpath with linked libraries
- # SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
- # SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
- # Remove system directories (from the CMake guide)
- # LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
- # IF("${isSystemDir}" STREQUAL "-1")
- # SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
- # ENDIF("${isSystemDir}" STREQUAL "-1")
- ADD_SUBDIRECTORY(matc)
- IF(WITH_ElmerIce)
- MESSAGE(STATUS "Adding optional package ElmerIce")
- ADD_SUBDIRECTORY(elmerice)
- ENDIF(WITH_ElmerIce)
- ADD_SUBDIRECTORY(umfpack)
- ADD_SUBDIRECTORY(fhutiter)
- ADD_SUBDIRECTORY(meshgen2d)
- ADD_SUBDIRECTORY(fem)
- ADD_SUBDIRECTORY(mathlibs)
- ADD_SUBDIRECTORY(elmergrid)
- ADD_SUBDIRECTORY(license_texts)
- IF(WITH_ELMERGUI)
- MESSAGE(STATUS " Building ElmerGUI")
- MESSAGE(STATUS "------------------------------------------------")
- ADD_SUBDIRECTORY(ElmerGUI)
- ENDIF(WITH_ELMERGUI)
- IF(WITH_ELMERGUITESTER)
- ADD_SUBDIRECTORY(ElmerGUItester)
- ENDIF(WITH_ELMERGUITESTER)
- IF(WITH_ELMERGUILOGGER)
- ADD_SUBDIRECTORY(ElmerGUIlogger)
- ENDIF(WITH_ELMERGUILOGGER)
- #INCLUDE(FeatureSummary)
- #FEATURE_SUMMARY(WHAT ENABLED_FEATURES
- # INCLUDE_QUIET_PACKAGES
- # DESCRIPTION "Enabled Features:"
- # VAR enabledFeaturesText)
- #MESSAGE(STATUS "${enabledFeaturesText}")
- #
- IF(CMAKE_BUILD_TYPE)
- STRING(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPCASE)
- MARK_AS_ADVANCED(CMAKE_BUILD_TYPE_UPCASE)
- ENDIF(CMAKE_BUILD_TYPE)
- MESSAGE(STATUS "------------------------------------------------")
- MESSAGE(STATUS " BLAS library: " "${BLAS_LIBRARIES}")
- MESSAGE(STATUS " LAPACK library: " "${LAPACK_LIBRARIES}")
- MESSAGE(STATUS "------------------------------------------------")
- MESSAGE(STATUS " Fortran compiler: " "${CMAKE_Fortran_COMPILER}")
- MESSAGE(STATUS " Fortran flags: " "${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE_UPCASE}}")
- MESSAGE(STATUS "------------------------------------------------")
- MESSAGE(STATUS " C compiler: " "${CMAKE_C_COMPILER}")
- MESSAGE(STATUS " C flags: " "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPCASE}}")
- MESSAGE(STATUS "------------------------------------------------")
- MESSAGE(STATUS " CXX compiler: " "${CMAKE_CXX_COMPILER}")
- MESSAGE(STATUS " CXX flags: " "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPCASE}}")
- MESSAGE(STATUS "------------------------------------------------")
- # IF(WITH_MPI)
- # MESSAGE(STATUS " MPI Fortran: " "${MPI_Fortran_FOUND}")
- # MESSAGE(STATUS " MPI Fortran compiler: " "${MPI_Fortran_COMPILER}")
- # MESSAGE(STATUS " MPI Fortran flags: " "${MPI_Fortran_COMPILE_FLAGS}")
- # MESSAGE(STATUS " MPI Fortran include dir: " "${MPI_Fortran_INCLUDE_PATH}")
- # MESSAGE(STATUS " MPI Fortran libraries: " "${MPI_Fortran_LIBRARIES}")
- # MESSAGE(STATUS " MPI Fortran link flags: " "${MPI_Fortran_LINK_FLAGS}")
- # MESSAGE(STATUS "------------------------------------------------")
- # MESSAGE(STATUS " MPI C: " "${MPI_C_FOUND}")
- # MESSAGE(STATUS " MPI C compiler: " "${MPI_C_COMPILER}")
- # MESSAGE(STATUS " MPI C flags: " "${MPI_C_COMPILE_FLAGS}")
- # MESSAGE(STATUS " MPI C include dir: " "${MPI_C_INCLUDE_PATH}")
- # MESSAGE(STATUS " MPI C libraries: " "${MPI_C_LIBRARIES}")
- # MESSAGE(STATUS " MPI C flags: " "${MPI_C_LINK_FLAGS}")
- # MESSAGE(STATUS "------------------------------------------------")
- # IF(WITH_Mumps)
- # MESSAGE(STATUS " Mumps: " "${Mumps_FOUND}")
- # MESSAGE(STATUS " Mumps include: " "${Mumps_INCLUDE_DIR}")
- # MESSAGE(STATUS " Mumps libraries: " "${Mumps_LIBRARIES}")
- # MESSAGE(STATUS "------------------------------------------------")
- # ENDIF(WITH_Mumps)
- # IF(WITH_Hypre)
- # MESSAGE(STATUS " Hypre: " "${Hypre_FOUND}")
- # MESSAGE(STATUS " Hypre include: " "${Hypre_INCLUDE_DIR}")
- # MESSAGE(STATUS " Hypre libraries: " "${Hypre_LIBRARIES}")
- # MESSAGE(STATUS "------------------------------------------------")
- # ENDIF(WITH_Hypre)
- # ENDIF(WITH_MPI)
- IF(WITH_Trilinos)
- MESSAGE(STATUS " Trilinos: " "${Trilinos_FOUND}")
- MESSAGE(STATUS " Trilinos_DIR: " "${Trilinos_DIR}")
- MESSAGE(STATUS " Trilinos_LIBRARIES: " "${Trilinos_LIBRARIES}")
- MESSAGE(STATUS "------------------------------------------------")
- ENDIF(WITH_Trilinos)
- IF(WITH_CONTRIB)
- MESSAGE(STATUS " Building contributed solvers")
- MESSAGE(STATUS "------------------------------------------------")
- ENDIF(WITH_CONTRIB)
- IF(WITH_ELMERGUITESTER)
- MESSAGE(STATUS " Building ElmerGUI tester")
- MESSAGE(STATUS "------------------------------------------------")
- ENDIF(WITH_ELMERGUITESTER)
- IF(WITH_ELMERGUILOGGER)
- MESSAGE(STATUS " Building ElmerGUI logger")
- MESSAGE(STATUS "------------------------------------------------")
- ENDIF(WITH_ELMERGUILOGGER)
- IF(WITH_ELMERPOST)
- MESSAGE(WARNING " Building ElmerPost")
- MESSAGE(STATUS "------------------------------------------------")
- ADD_SUBDIRECTORY(post)
- ENDIF(WITH_ELMERPOST)
- IF(HAVE_LUA)
- MESSAGE(STATUS " Building Lua")
- MESSAGE(STATUS "------------------------------------------------")
- ENDIF(HAVE_LUA)
- IF(HAVE_EXTOPTIM)
- MESSAGE(STATUS " Building with external optimization routines")
- MESSAGE(STATUS "------------------------------------------------")
- ENDIF(HAVE_EXTOPTIM)
- # Packaging
- if(NOT BYPASS_CPACK)
- INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cpack/ElmerCPack.cmake)
- endif(NOT BYPASS_CPACK)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement