Advertisement
foadsf

elmer MSYS2 CMAKE

Apr 1st, 2022
1,153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CMake 22.87 KB | None | 0 0
  1. #
  2. # CMake configuration script for Elmer
  3. #
  4. # Authors:
  5. #  Sami Ilvonen, CSC - IT Center for Science, Ltd.
  6. #  Phil Weir, NUMA Engineering Services, Ltd.
  7. #  Mikko Byckling, CSC - IT Center for Science Ltd.
  8. #  Juhani Kataja, CSC - IT Center for Science Ltd.
  9. #
  10. # First public beta release 11th of October, 2013
  11. #
  12.  
  13. if(APPLE)
  14.   # message("you need to have gcc-gfrotran installed using HomeBrew")
  15.   # set(CMAKE_C_COMPILER "/usr/bin/gcc")
  16.   # set(CMAKE_CXX_COMPILER "/usr/bin/g++")
  17.   set(CMAKE_C_COMPILER "/usr/local/bin/gcc-10")
  18.   set(CMAKE_CXX_COMPILER "/usr/local/bin/g++-10")
  19.   set(CMAKE_Fortran_COMPILER "/usr/local/bin/gfortran")
  20.   # set(BLA_VENDOR "OpenBLAS")
  21.   # option(HUNTER_ENABLED "Enable Hunter package manager support" OFF)
  22.   # set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)
  23.   # set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
  24. endif()
  25.  
  26.  
  27.  
  28.  
  29.  
  30. IF(NOT CMAKE_BUILD_TYPE)
  31.   SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Build type (Release, Debug, RelWithDebugInfo, MinSizeRel)")
  32. ENDIF()
  33.  
  34. PROJECT(Elmer Fortran C CXX)
  35.  
  36. # CMAKE_VERSION seems to require this in minimum
  37. CMAKE_MINIMUM_REQUIRED(VERSION 3.0.2)
  38.  
  39. IF(APPLE)
  40.   SET(CMAKE_MACOSX_RPATH 1)
  41.     # on OSX FindOpenGL uses framework version of OpenGL, but we need X11 version
  42.     FIND_PATH(GLX_INCLUDE_DIR GL/glx.h
  43.       PATHS /opt/X11/include /usr/X11/include /usr/X11R6/include)
  44.     find_library(X11_GL_LIB GL
  45.       PATH /opt/X11/lib /usr/X11/lib /usr/X11R6/lib)
  46. # FIND_LIBRARY(OPENGL_gl_LIBRARY GL
  47. #        PATHS /opt/X11/lib /usr/X11/lib /usr/X11R6/lib)
  48. # FIND_LIBRARY(OPENGL_glu_LIBRARY GLU
  49. #        PATHS /opt/X11/lib /usr/X11/lib /usr/X11R6/lib)
  50. # LIST(APPEND LIBS ${OPENGL_gl_LIBRARY})
  51. INCLUDE_DIRECTORIES(${GLX_INCLUDE_DIR})
  52. ENDIF()
  53.  
  54. #shamelessly borrowed from FreeCAD project: https://github.com/FreeCAD/FreeCAD/blob/master/cMake/FreeCAD_Helpers/SetupPython.cmake
  55. # For building on OS X
  56. if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
  57.  
  58.   # If the user doesn't tell us which package manager they're using
  59.   if(NOT DEFINED MACPORTS_PREFIX AND NOT DEFINED HOMEBREW_PREFIX)
  60.  
  61.     # Try to find MacPorts path
  62.     find_program(MACPORTS_EXECUTABLE port)
  63.     if(EXISTS ${MACPORTS_EXECUTABLE})
  64.       string(REPLACE "/bin/port" ""
  65.       MACPORTS_PREFIX ${MACPORTS_EXECUTABLE})
  66.       message(STATUS "Detected MacPorts install at ${MACPORTS_PREFIX}")
  67.     endif(EXISTS ${MACPORTS_EXECUTABLE})
  68.  
  69.     # Try to find Homebrew path
  70.     find_program(HOMEBREW_EXECUTABLE brew)
  71.     if(EXISTS ${HOMEBREW_EXECUTABLE})
  72.       string(REPLACE "/bin/brew" ""
  73.       HOMEBREW_PREFIX ${HOMEBREW_EXECUTABLE})
  74.       message(STATUS "Detected Homebrew install at ${HOMEBREW_PREFIX}")
  75.     endif()
  76.  
  77.   endif(NOT DEFINED MACPORTS_PREFIX AND NOT DEFINED HOMEBREW_PREFIX)
  78.  
  79.   # In case someone tries to shoot themselves in the foot
  80.   if(DEFINED MACPORTS_PREFIX AND DEFINED HOMEBREW_PREFIX)
  81.     message(SEND_ERROR "Multiple package management systems detected - ")
  82.     message(SEND_ERROR "define either MACPORTS_PREFIX or HOMEBREW_PREFIX")
  83.  
  84.   # No package manager
  85.   elseif(NOT DEFINED MACPORTS_PREFIX AND NOT DEFINED HOMEBREW_PREFIX)
  86.     message(SEND_ERROR "No package manager detected - install MacPorts or Homebrew")
  87.   endif()
  88. endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
  89.  
  90.  
  91. # SET(CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules;${PROJECT_SOURCE_DIR}/cmake/Modules")
  92. SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules;${CMAKE_ROOT}/Modules")
  93.  
  94. SET(CMAKE_Fortran_MODULE_DIRECTORY
  95.   ${PROJECT_BINARY_DIR}/fmodules CACHE PATH "Directory for Fortran modules")
  96.  
  97. # Defaults to cache variables
  98. # SET(WITH_MPI TRUE CACHE BOOL "Use MPI parallelization")
  99. # SET(MPI_TEST_MAXPROC 8 CACHE STRING "Maximum number of tasks used in parallel tests")
  100. # SET(MPI_TEST_MINPROC 1 CACHE STRING "Minimum number of tasks used in parallel tests")
  101. SET(WITH_OpenMP FALSE CACHE BOOL "Use OpenMP thread and SIMD (if available) parallelization")
  102. SET(WITH_MKL FALSE CACHE BOOL "Use Intel Math Kernel library")
  103. SET(WITH_Mumps FALSE CACHE BOOL "Use Mumps sparse direct solver")
  104. SET(WITH_Hypre FALSE CACHE BOOL "Use Hypre linear algebra library")
  105. SET(WITH_ELMERGUI FALSE CACHE BOOL "Include ElmerGUI")
  106. SET(WITH_ElmerIce FALSE CACHE BOOL "Include ElmerIce")
  107. SET(WITH_ELMERGUITESTER FALSE CACHE BOOL "Include ElmerGUI tester")
  108. SET(WITH_ELMERGUILOGGER FALSE CACHE BOOL "Include ElmerGUI logger")
  109. SET(ELMER_INSTALL_LIB_DIR "lib/elmersolver" CACHE PATH "Location of elmer shared libraries relative to prefix.")
  110. SET(WITH_Trilinos FALSE CACHE BOOL "Use Trilinos")
  111. SET(WITH_FETI4I FALSE CACHE BOOL "Use FETI4I")
  112. SET(WITH_ELMERPOST FALSE CACHE BOOL "Include ElmerPost (DEPRECATED)")
  113. SET(WITH_CONTRIB FALSE CACHE BOOL "Include contributed solvers")
  114.  
  115. SET(WITH_LUA FALSE CACHE BOOL "Include LUA extensions.")
  116.  
  117. SET(WITH_Zoltan FALSE CACHE BOOL "Link in Zoltan mesh repartitioning library.")
  118.  
  119. # Let user select if the contiguous attribute is used or not
  120. SET(USE_CONTIGUOUS FALSE CACHE BOOL "Use contiguous attribute")
  121.  
  122. MARK_AS_ADVANCED(WITH_ELMERPOST)
  123.  
  124. # if("${CMAKE_VERSION}" VERSION_GREATER 2.8.12)
  125. #   CMAKE_POLICY(SET CMP0022 OLD)
  126. # ENDIF()
  127.  
  128. MARK_AS_ADVANCED(ELMER_INSTALL_LIB_DIR)
  129.  
  130. ENABLE_TESTING()
  131.  
  132. SET(ELMER_FEM_MAJOR_VERSION 9)
  133. SET(ELMER_FEM_MINOR_VERSION 0)
  134.  
  135. SET(ELMER_FEM_VERSION
  136.   ${ELMER_FEM_MAJOR_VERSION}.${ELMER_FEM_MINOR_VERSION})
  137.  
  138. IF(NOT(ELMER_FEM_REVISION))
  139.   SET(RESET_ELMER_REVISION TRUE CACHE BOOL "")
  140.   MARK_AS_ADVANCED(RESET_ELMER_REVISION)
  141. ENDIF()
  142.  
  143. IF(RESET_ELMER_REVISION)
  144.   execute_process(
  145.     COMMAND "git" "--no-pager" "log" "-1" "--pretty=format:%h"
  146.     WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  147.     OUTPUT_VARIABLE ELMER_FEM_REVISION_
  148.     RESULT_VARIABLE RUN_RETURN_VALUE)
  149.   IF(RUN_RETURN_VALUE EQUAL 0)
  150.     SET(ELMER_FEM_REVISION ${ELMER_FEM_REVISION_} CACHE STRING "" FORCE)
  151.     MARK_AS_ADVANCED(ELMER_FEM_REVISION)
  152.   ENDIF()
  153. ENDIF()
  154.    
  155. SET(VERSION ${ELMER_FEM_VERSION})
  156. SET(REVISION ${ELMER_FEM_REVISION})
  157. SET(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
  158. STRING(TIMESTAMP ELMER_FEM_COMPILATIONDATE "%Y-%m-%d")
  159. SET(COMPILATIONDATE ${ELMER_FEM_COMPILATIONDATE})
  160.  
  161. # Check that the gfortran version is >= 4.8
  162. IF(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU")
  163.   INCLUDE(testGFortranVersion)
  164.   IF(NOT CMAKE_Fortran_COMPILER_GNU_VERSION_OK)
  165.     MESSAGE(FATAL_ERROR "GNU Fortran version is too old, should be at least 4.8")
  166.   ENDIF()
  167. ENDIF()
  168.  
  169. IF(WITH_LUA)
  170.   IF(NOT(${USE_SYSTEM_LUA}))
  171.     ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/contrib/lua-5.1.5/)
  172.     set(LUA_LIBRARIES luaelmer CACHE STRING "")
  173.     set(LUA_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/contrib/lua-5.1.5/src CACHE STRING "")
  174.   ELSE()
  175.     FIND_PACKAGE(Lua51 REQUIRED)
  176.   ENDIF()
  177.   SET(HAVE_LUA TRUE)
  178.   MARK_AS_ADVANCED(HAVE_LUA)
  179. ENDIF()
  180.  
  181. IF(WITH_EXTOPTIM)
  182.   SET(HAVE_EXTOPTIM TRUE)
  183. ENDIF()
  184.  
  185. IF(WITH_OpenMP)
  186.   # Advanced properties
  187.   MARK_AS_ADVANCED(
  188.     OpenMP_C_FLAGS
  189.     OpenMP_Fortran_FLAGS
  190.     OpenMP_CXX_FLAGS
  191.     )
  192.   FIND_PACKAGE(OpenMP REQUIRED)
  193.  
  194.   # Add OpenMP flags to compilation flags
  195.   # if(APPLE)
  196.   #   if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
  197.   #     set(OpenMP_C "${CMAKE_C_COMPILER}")
  198.   #     set(OpenMP_C_FLAGS "-fopenmp=libomp -Wno-unused-command-line-argument")
  199.   #     set(OpenMP_C_LIB_NAMES "libomp" "libgomp" "libiomp5")
  200.   #     set(OpenMP_libomp_LIBRARY ${OpenMP_C_LIB_NAMES})
  201.   #     set(OpenMP_libgomp_LIBRARY ${OpenMP_C_LIB_NAMES})
  202.   #     set(OpenMP_libiomp5_LIBRARY ${OpenMP_C_LIB_NAMES})
  203.   #   endif()
  204.   #   if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
  205.   #     set(OpenMP_CXX "${CMAKE_CXX_COMPILER}")
  206.   #     set(OpenMP_CXX_FLAGS "-fopenmp=libomp -Wno-unused-command-line-argument")
  207.   #     set(OpenMP_CXX_LIB_NAMES "libomp" "libgomp" "libiomp5")
  208.   #     set(OpenMP_libomp_LIBRARY ${OpenMP_CXX_LIB_NAMES})
  209.   #     set(OpenMP_libgomp_LIBRARY ${OpenMP_CXX_LIB_NAMES})
  210.   #     set(OpenMP_libiomp5_LIBRARY ${OpenMP_CXX_LIB_NAMES})
  211.   #   endif()
  212.   # else()
  213.     SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
  214.     SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}")
  215.     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  216.   # endif()
  217.  
  218.  
  219.  
  220.   # Test compiler support for OpenMP 4.0 features used
  221.   INCLUDE(testOpenMP40)
  222.   IF(CMAKE_Fortran_COMPILER_SUPPORTS_OPENMP40)
  223.     SET(HAVE_OPENMP40 TRUE)
  224.     MARK_AS_ADVANCED(HAVE_OPENMP40)
  225.     # Test compiler support for advanced OpenMP 4.5 features used
  226.     INCLUDE(testOpenMP45)
  227.     IF(CMAKE_Fortran_COMPILER_SUPPORTS_OPENMP45)
  228.       SET(HAVE_OPENMP45 TRUE)
  229.       MARK_AS_ADVANCED(HAVE_OPENMP45)
  230.     ENDIF()
  231.   ENDIF()
  232. ENDIF()
  233.  
  234. # Get rid of the annoying rank mismatch warning
  235. IF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
  236.   IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.9)
  237.     SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch")
  238. #    SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -std=legacy")
  239.   ENDIF()
  240. ENDIF()
  241.  
  242.  
  243. # IF(WITH_MPI)
  244. #   # Advanced properties
  245. #   MARK_AS_ADVANCED(
  246. #     MPI_EXTRA_LIBRARY
  247. #     MPI_LIBRARY
  248. #     )
  249.  
  250. #   FIND_PACKAGE(MPI REQUIRED)
  251. #   # Workaround if MPI is found but MPI_FOUND is not set (windows+msmpi+findmpi)
  252. #   SET(MPI_FOUND TRUE CACHE BOOL "")
  253. #   MARK_AS_ADVANCED(MPI_FOUND)
  254. #   INCLUDE_DIRECTORIES(${MPI_Fortran_INCLUDE_PATH})
  255. #   # MPI libraries may be needed for testing
  256. #   SET(CMAKE_C_REQUIRED_LIBRARIES ${MPI_C_LIBRARIES})
  257. #   SET(CMAKE_CXX_REQUIRED_LIBRARIES ${MPI_CXX_LIBRARIES})
  258. #   SET(CMAKE_Fortran_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES})
  259. # ENDIF(WITH_MPI)
  260.  
  261. # if(APPLE)
  262. #   # message(STATUS "Trying to find Accelerate library")
  263. #   # find_library(BLAS_LIBRARIES Accelerate HINTS /System/Library/Frameworks/Accelerate.framework)
  264. #   # MARK_AS_ADVANCED(BLAS_LIBRARIES)
  265. #   # set(BLAS_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -framework accelerate")
  266. #   # find_path(LAPACK_INCLUDE_DIRS
  267. #   #   NAMES clapack.h
  268. #   #   PATHS ${BLAS_INCLUDE_DIRS}
  269. #   #   NO_DEFAULT_PATH
  270. #   # )
  271. #   # set(LAPACK_HEADER ${LAPACK_INCLUDE_DIRS}/clapack.h)
  272. #   # set(LAPACK_SUFFIX "_")
  273. #   # set(LAPACK_PREFIX)
  274.  
  275. #   # message(STATUS "Using Accelerate framework on macOS")
  276. #   message("using the local blas library")
  277. #   # option(BLAS_VERBOSE "Print some additional information during BLAS libraries detection" ON)
  278. #   set(BLAS_DIR "./mathlibs/src/blas/")
  279. # set(BLA_VENDOR "Generic")
  280.  
  281.   # set(ACCELERATE_LIBS "-framework Accelerate")
  282.   # BLAS_Accelerate_LIBRARY:FILEPATH=/System/Library/Frameworks/Accelerate.framework
  283.  
  284.  
  285. # else()
  286.   # IF(WITH_MKL)
  287.   #   # Find MKL
  288.   #   FIND_PACKAGE(MKL REQUIRED)
  289.   #   SET(HAVE_MKL TRUE)
  290.   #   MARK_AS_ADVANCED(HAVE_MKL)
  291.   #   # Set BLAS and LAPACK to point to MKL
  292.   #   SET(BLAS_LIBRARIES ${MKL_BLAS_LIBRARIES} CACHE FILEPATH "")
  293.   #   SET(LAPACK_LIBRARIES ${MKL_LAPACK_LIBRARIES} CACHE FILEPATH "")
  294.   #   IF(MKL_SCALAPACK_LIBRARIES_FOUND)
  295.   #     SET(SCALAPACK_LIBRARIES ${MKL_SCALAPACK_LIBRARIES})
  296.   #     # Versions >11.1 of MKL include Cluster PARDISO direct solver
  297.   #     IF(MKL_CPARDISO_FOUND)
  298.   #       SET(HAVE_CPARDISO TRUE)
  299.   #       MARK_AS_ADVANCED(HAVE_CPARDISO)
  300.   #     ENDIF()
  301.   #   ENDIF()
  302.   #   INCLUDE_DIRECTORIES(${MKL_INCLUDE_DIR})
  303.   #   SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${MKL_Fortran_FLAGS}")
  304.   # ELSE()
  305.   #   IF (NOT BLAS_LIBRARIES OR NOT LAPACK_LIBRARIES)
  306.   #     # If BLAS/LAPACK not explicitly set, attempt to find MKL BLAS/LAPACK
  307.   #     FIND_PACKAGE(MKL QUIET)
  308.   #     IF (MKL_BLAS_LIBRARIES_FOUND AND MKL_LAPACK_LIBRARIES_FOUND)
  309.   #       # Set BLAS and LAPACK to point to MKL, in order to work around
  310.   #       # CMake FindBLAS finding wrong core library for GNU Fortran
  311.   #       SET(BLAS_LIBRARIES ${MKL_BLAS_LIBRARIES} CACHE FILEPATH "")
  312.   #       SET(LAPACK_LIBRARIES ${MKL_LAPACK_LIBRARIES} CACHE FILEPATH "")
  313.   #       INCLUDE_DIRECTORIES(${MKL_INCLUDE_DIR})
  314.   #       SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${MKL_Fortran_FLAGS}")
  315.   #     ENDIF()
  316.   #   ENDIF()
  317.   # ENDIF()
  318. # endif(APPLE)
  319.  
  320. # MARK_AS_ADVANCED(WITH_Trilinos)
  321. IF(WITH_Trilinos)
  322.   FIND_PACKAGE(ML REQUIRED PATHS ${TRILINOS_PATH}/lib/cmake/ML ${TRILINOS_PATH})
  323.   FIND_PACKAGE(Trilinos REQUIRED PATHS ${TRILINOS_PATH}/lib/cmake/Trilinos ${TRILINOS_PATH})
  324.   FIND_PACKAGE(Belos REQUIRED PATHS ${TRILINOS_PATH}/lib/cmake/Belos ${TRILINOS_PATH})
  325.   IF(ML_DIR)
  326.     ADD_DEFINITIONS(-DHAVE_TRILINOS)
  327.   ENDIF()
  328. ENDIF()
  329.  
  330. IF(WITH_Zoltan)
  331.   # ZOLTAN Remeshing
  332.   MESSAGE(STATUS "------------------------------------------------")
  333.  
  334.   SET(USE_SYSTEM_ZOLTAN FALSE CACHE BOOL "Use system Zoltan library")
  335.   IF(NOT ${USE_SYSTEM_ZOLTAN})
  336.     MESSAGE(STATUS "Building Zoltan mesh repartitioner")
  337.     ADD_SUBDIRECTORY(contrib/Zoltan_v3.83)
  338.     SET(HAVE_ZOLTAN TRUE CACHE BOOL "Has Zoltan tools for mesh (re)partitioning" )
  339.     MARK_AS_ADVANCED(HAVE_ZOLTAN)
  340.     MESSAGE(STATUS "  Zoltan_LIB:      " "${ZOLTAN_LIBRARY}")
  341.     MESSAGE(STATUS "------------------------------------------------")
  342.   ELSE()
  343.     FIND_PACKAGE(Zoltan)
  344.  
  345.     IF(ZOLTAN_FOUND)
  346.  
  347.       SET(HAVE_ZOLTAN TRUE CACHE BOOL "Has Zoltan tools for mesh (re)partitioning" )
  348.       GET_FILENAME_COMPONENT(ZOLTAN_LIBDIR ${ZOLTAN_LIBRARY} DIRECTORY)
  349.  
  350.       MARK_AS_ADVANCED(HAVE_ZOLTAN)
  351.       MESSAGE(STATUS "  Zoltan:           " "${ZOLTAN_FOUND}")
  352.       MESSAGE(STATUS "  Zoltan_INC:       " "${ZOLTAN_INCLUDE_DIR}")
  353.       MESSAGE(STATUS "  Zoltan_LIB:      " "${ZOLTAN_LIBRARY}")
  354.       MESSAGE(STATUS "  Zoltan_LIBDIR:      " "${ZOLTAN_LIBDIR}")
  355.  
  356.       INCLUDE_DIRECTORIES(${ZOLTAN_INCLUDE_DIR})
  357.       MESSAGE(STATUS "------------------------------------------------")
  358.  
  359.     ELSE()
  360.       MESSAGE(STATUS "  Library not found: >ZOLTAN_FOUND< ")
  361.       MESSAGE(STATUS "    Missing: >ZOLTAN_INCLUDE_DIR< , >ZOLTAN_LIBRARY< for mesh (re)partitioning")
  362.     ENDIF(ZOLTAN_FOUND)
  363.  
  364.     MESSAGE(STATUS "------------------------------------------------")
  365.   ENDIF()
  366. ENDIF(WITH_Zoltan)
  367.  
  368. # # MMG Remeshing
  369. # MESSAGE(STATUS "------------------------------------------------")
  370. # MESSAGE(STATUS "Mesh adaptation 2D/3D looking for [Mmg] tools ")
  371.  
  372. # FIND_PACKAGE(MMG)
  373. # # INCLUDE("cmake/Modules/FindMMG.cmake")
  374. # # INCLUDE_DIRECTORIES(${MMG_INCLUDE_DIR})
  375. # # TARGET_LINK_LIBRARIES( ${YOUR_TARGET} ${MMG_LIBRARY})
  376.  
  377.  
  378. # IF(MMG_FOUND)
  379.  
  380. #   SET(HAVE_MMG TRUE CACHE BOOL "Has Mmg tools for Elmer/Ice Mesh adaptation" )
  381. #   GET_FILENAME_COMPONENT(MMG_LIBDIR ${MMG_LIBRARY} DIRECTORY)
  382.  
  383. #   MARK_AS_ADVANCED(HAVE_MMG)
  384. #   MESSAGE(STATUS "  Mmg:           " "${MMG_FOUND}")
  385. #   MESSAGE(STATUS "  Mmg_INC:       " "${MMG_INCLUDE_DIR}")
  386. #   MESSAGE(STATUS "  Mmg_LIB:      " "${MMG_LIBRARY}")
  387. #   MESSAGE(STATUS "  Mmg_LIBDIR:      " "${MMG_LIBDIR}")
  388. #   MESSAGE(STATUS "Compile MMG2DSolver/MMG3DSolver")
  389. #   ADD_DEFINITIONS(-DHAVE_MMG)
  390.  
  391. #   INCLUDE_DIRECTORIES(${MMG_INCLUDE_DIR})
  392. #   MESSAGE(STATUS "------------------------------------------------")
  393.  
  394. # ELSE()
  395. #   MESSAGE(STATUS "  Library not found: >MMG_FOUND< ")
  396. #   MESSAGE(STATUS "    Missing: >MMG_INCLUDE_DIR< , >MMG_LIBRARY<, to compile MMG3DSolver")
  397. # ENDIF(MMG_FOUND)
  398.  
  399. MESSAGE(STATUS "------------------------------------------------")
  400.  
  401.  
  402. # MPI and LAPACK
  403. FIND_PACKAGE(BLAS REQUIRED)
  404. FIND_PACKAGE(LAPACK REQUIRED)
  405. # BLAS and LAPACK libraries may be needed for testing
  406. SET(CMAKE_REQUIRED_LIBRARIES
  407.   ${CMAKE_REQUIRED_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})
  408.  
  409. # IF(MPI_FOUND)
  410. #   # Mumps
  411. #   IF(WITH_Mumps)
  412. #     FIND_PACKAGE(Mumps REQUIRED)
  413. #   ENDIF()
  414. #   # Hypre
  415. #   IF(WITH_Hypre)
  416. #     FIND_PACKAGE(Hypre REQUIRED OPTIONAL_COMPONENTS Euclid parcsr_ls ParaSails IJ_mv FEI core QUIET)
  417. #   ENDIF()
  418.  
  419. #   # Permon
  420. #   IF(WITH_FETI4I)
  421. #     FIND_PACKAGE(FETI4I REQUIRED)
  422. #   ENDIF()
  423. # ENDIF()
  424.  
  425. IF(Mumps_FOUND)
  426.   SET(HAVE_MUMPS TRUE)
  427.   MARK_AS_ADVANCED(HAVE_MUMPS)
  428.   # LINK_DIRECTORIES(${MUMPS_LIBRARIES})
  429. ENDIF()
  430.  
  431. IF(Hypre_FOUND)
  432.   SET(HAVE_HYPRE TRUE)
  433.   MARK_AS_ADVANCED(HAVE_HYPRE)
  434.   INCLUDE_DIRECTORIES(${Hypre_INCLUDE_DIR})
  435.   # LINK_DIRECTORIES(${Hypre_LIBRARIES})
  436. ENDIF()
  437.  
  438. IF(FETI4I_FOUND)
  439.   SET(HAVE_FETI4I TRUE)
  440.   MARK_AS_ADVANCED(HAVE_FETI4I)
  441.   ADD_DEFINITIONS(-DHAVE_FETI4I)
  442. ENDIF()
  443.  
  444. # Check if Fortran compiler supports procedure pointer
  445. INCLUDE(testProcedurePointer)
  446. IF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_PROCEDUREPOINTER)
  447.   MESSAGE(FATAL_ERROR "Fortran compiler does not seem to support the PROCEDURE statement.")
  448. ENDIF()
  449.  
  450. # Check if Fortran compiler supports contiguous keyword
  451. INCLUDE(testContiguous)
  452. IF(USE_CONTIGUOUS AND CMAKE_Fortran_COMPILER_SUPPORTS_CONTIGUOUS)
  453.   ADD_DEFINITIONS(-DCONTIG=,CONTIGUOUS)
  454. ELSE()
  455.   ADD_DEFINITIONS(-DCONTIG=)
  456. ENDIF()
  457.  
  458. # Check if this is mingw toolchain.
  459. IF(MINGW)
  460.   ADD_DEFINITIONS(-DMINGW32)
  461. ENDIF()
  462.  
  463. IF(WIN32)
  464.   ADD_DEFINITIONS(-DWIN32)
  465. ENDIF()
  466.  
  467. # Check if Fortran compiler supports execute_command_line
  468. INCLUDE(testExecutecommand)
  469. IF(CMAKE_Fortran_COMPILER_SUPPORTS_EXECUTECOMMANDLINE)
  470.   ADD_DEFINITIONS(-DHAVE_EXECUTECOMMANDLINE)
  471. ENDIF()
  472.  
  473. ADD_DEFINITIONS(-DUSE_ISO_C_BINDINGS)
  474. SET(FC_STDCALLBULL " ")
  475. SET(ELMER_LINKTYP 1)
  476. #SET(FC_FUNC FC_GLOBAL)
  477. #SET(FC_FUNC_ FC_GLOBAL_)
  478.  
  479. # Add support for arpack
  480. ADD_DEFINITIONS(-DUSE_ARPACK)
  481.  
  482. #INCLUDE(FortranCInterface)
  483. #FortranCInterface_HEADER(FCMangle.h MACRO_NAMESPACE "FC_")
  484. #FortranCInterface_VERIFY(CXX)
  485.  
  486. # Set up rpaths to point ELMER_INSTALL_LIB_DIR
  487. IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")  
  488.   SET(ELMERSOLVER_RPATH_STRING "\$ORIGIN/../${ELMER_INSTALL_LIB_DIR}")
  489.   SET(ELMERLIB_RPATH_STRING "\$ORIGIN/")
  490. ELSEIF(APPLE)                              
  491.   SET(ELMERSOLVER_RPATH_STRING "@loader_path/../${ELMER_INSTALL_LIB_DIR}")
  492.   SET(ELMERLIB_RPATH_STRING "@loader_path/")
  493. ENDIF()
  494.  
  495. # Uncomment these to use rpath with linked libraries
  496. # SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
  497. # SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
  498. # Remove system directories (from the CMake guide)
  499. # LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
  500. # IF("${isSystemDir}" STREQUAL "-1")
  501. #    SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
  502. # ENDIF("${isSystemDir}" STREQUAL "-1")
  503.  
  504. ADD_SUBDIRECTORY(matc)
  505.  
  506. IF(WITH_ElmerIce)
  507.   MESSAGE(STATUS "Adding optional package ElmerIce")
  508.   ADD_SUBDIRECTORY(elmerice)
  509. ENDIF(WITH_ElmerIce)
  510.  
  511. ADD_SUBDIRECTORY(umfpack)
  512. ADD_SUBDIRECTORY(fhutiter)
  513. ADD_SUBDIRECTORY(meshgen2d)
  514. ADD_SUBDIRECTORY(fem)
  515. ADD_SUBDIRECTORY(mathlibs)
  516. ADD_SUBDIRECTORY(elmergrid)
  517. ADD_SUBDIRECTORY(license_texts)
  518.  
  519. IF(WITH_ELMERGUI)
  520.     MESSAGE(STATUS "  Building ElmerGUI")
  521.     MESSAGE(STATUS "------------------------------------------------")
  522.     ADD_SUBDIRECTORY(ElmerGUI)
  523. ENDIF(WITH_ELMERGUI)
  524.  
  525. IF(WITH_ELMERGUITESTER)
  526.   ADD_SUBDIRECTORY(ElmerGUItester)
  527. ENDIF(WITH_ELMERGUITESTER)
  528.  
  529. IF(WITH_ELMERGUILOGGER)
  530.   ADD_SUBDIRECTORY(ElmerGUIlogger)
  531. ENDIF(WITH_ELMERGUILOGGER)
  532.  
  533. #INCLUDE(FeatureSummary)
  534. #FEATURE_SUMMARY(WHAT ENABLED_FEATURES
  535. #  INCLUDE_QUIET_PACKAGES
  536. #  DESCRIPTION "Enabled Features:"
  537. #  VAR enabledFeaturesText)
  538. #MESSAGE(STATUS "${enabledFeaturesText}")
  539.  
  540. #
  541. IF(CMAKE_BUILD_TYPE)
  542.   STRING(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPCASE)
  543.   MARK_AS_ADVANCED(CMAKE_BUILD_TYPE_UPCASE)
  544. ENDIF(CMAKE_BUILD_TYPE)
  545.  
  546. MESSAGE(STATUS "------------------------------------------------")
  547. MESSAGE(STATUS "  BLAS library:   " "${BLAS_LIBRARIES}")
  548. MESSAGE(STATUS "  LAPACK library: " "${LAPACK_LIBRARIES}")
  549. MESSAGE(STATUS "------------------------------------------------")
  550. MESSAGE(STATUS "  Fortran compiler:        " "${CMAKE_Fortran_COMPILER}")
  551. MESSAGE(STATUS "  Fortran flags:           " "${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE_UPCASE}}")
  552. MESSAGE(STATUS "------------------------------------------------")
  553. MESSAGE(STATUS "  C compiler:              " "${CMAKE_C_COMPILER}")
  554. MESSAGE(STATUS "  C flags:                 " "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPCASE}}")
  555. MESSAGE(STATUS "------------------------------------------------")
  556. MESSAGE(STATUS "  CXX compiler:            " "${CMAKE_CXX_COMPILER}")
  557. MESSAGE(STATUS "  CXX flags:               " "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPCASE}}")
  558. MESSAGE(STATUS "------------------------------------------------")
  559. # IF(WITH_MPI)
  560. #   MESSAGE(STATUS "  MPI Fortran:             " "${MPI_Fortran_FOUND}")
  561. #   MESSAGE(STATUS "  MPI Fortran compiler:    " "${MPI_Fortran_COMPILER}")
  562. #   MESSAGE(STATUS "  MPI Fortran flags:       " "${MPI_Fortran_COMPILE_FLAGS}")
  563. #   MESSAGE(STATUS "  MPI Fortran include dir: " "${MPI_Fortran_INCLUDE_PATH}")
  564. #   MESSAGE(STATUS "  MPI Fortran libraries:   " "${MPI_Fortran_LIBRARIES}")
  565. #   MESSAGE(STATUS "  MPI Fortran link flags:  " "${MPI_Fortran_LINK_FLAGS}")
  566. #   MESSAGE(STATUS "------------------------------------------------")
  567. #   MESSAGE(STATUS "  MPI C:             " "${MPI_C_FOUND}")
  568. #   MESSAGE(STATUS "  MPI C compiler:    " "${MPI_C_COMPILER}")
  569. #   MESSAGE(STATUS "  MPI C flags:       " "${MPI_C_COMPILE_FLAGS}")
  570. #   MESSAGE(STATUS "  MPI C include dir: " "${MPI_C_INCLUDE_PATH}")
  571. #   MESSAGE(STATUS "  MPI C libraries:   " "${MPI_C_LIBRARIES}")
  572. #   MESSAGE(STATUS "  MPI C flags:       " "${MPI_C_LINK_FLAGS}")
  573. #   MESSAGE(STATUS "------------------------------------------------")
  574. #   IF(WITH_Mumps)
  575. #     MESSAGE(STATUS "  Mumps:             " "${Mumps_FOUND}")
  576. #     MESSAGE(STATUS "  Mumps include:     " "${Mumps_INCLUDE_DIR}")
  577. #     MESSAGE(STATUS "  Mumps libraries:   " "${Mumps_LIBRARIES}")
  578. #     MESSAGE(STATUS "------------------------------------------------")
  579. #   ENDIF(WITH_Mumps)
  580. #   IF(WITH_Hypre)
  581. #     MESSAGE(STATUS "  Hypre:             " "${Hypre_FOUND}")
  582. #     MESSAGE(STATUS "  Hypre include:     " "${Hypre_INCLUDE_DIR}")
  583. #     MESSAGE(STATUS "  Hypre libraries:   " "${Hypre_LIBRARIES}")
  584. #     MESSAGE(STATUS "------------------------------------------------")
  585. #   ENDIF(WITH_Hypre)
  586. # ENDIF(WITH_MPI)
  587.  
  588. IF(WITH_Trilinos)
  589.   MESSAGE(STATUS "  Trilinos:           " "${Trilinos_FOUND}")
  590.   MESSAGE(STATUS "  Trilinos_DIR:       " "${Trilinos_DIR}")
  591.   MESSAGE(STATUS "  Trilinos_LIBRARIES: " "${Trilinos_LIBRARIES}")
  592.   MESSAGE(STATUS "------------------------------------------------")
  593. ENDIF(WITH_Trilinos)
  594.  
  595. IF(WITH_CONTRIB)
  596.   MESSAGE(STATUS "  Building contributed solvers")
  597.   MESSAGE(STATUS "------------------------------------------------")
  598. ENDIF(WITH_CONTRIB)
  599.  
  600. IF(WITH_ELMERGUITESTER)
  601.   MESSAGE(STATUS "  Building ElmerGUI tester")
  602.   MESSAGE(STATUS "------------------------------------------------")
  603. ENDIF(WITH_ELMERGUITESTER)
  604.  
  605. IF(WITH_ELMERGUILOGGER)
  606.   MESSAGE(STATUS "  Building ElmerGUI logger")
  607.   MESSAGE(STATUS "------------------------------------------------")
  608. ENDIF(WITH_ELMERGUILOGGER)
  609.  
  610. IF(WITH_ELMERPOST)
  611.   MESSAGE(WARNING "  Building ElmerPost")
  612.   MESSAGE(STATUS "------------------------------------------------")
  613.   ADD_SUBDIRECTORY(post)
  614. ENDIF(WITH_ELMERPOST)
  615.  
  616. IF(HAVE_LUA)
  617.   MESSAGE(STATUS "  Building Lua")
  618.   MESSAGE(STATUS "------------------------------------------------")
  619. ENDIF(HAVE_LUA)
  620.  
  621. IF(HAVE_EXTOPTIM)
  622.   MESSAGE(STATUS "  Building with external optimization routines")
  623.   MESSAGE(STATUS "------------------------------------------------")
  624. ENDIF(HAVE_EXTOPTIM)
  625.  
  626.  
  627.  
  628. # Packaging
  629. if(NOT BYPASS_CPACK)
  630.   INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cpack/ElmerCPack.cmake)
  631. endif(NOT BYPASS_CPACK)
  632.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement