CMakeLists.txt 5.33 KB
Newer Older
1 2 3
# A minimum version for cmake command is required.
cmake_minimum_required(VERSION 3.8)

4
# TODO Add check whether the provided value is valid.
5 6 7 8 9 10 11 12 13 14 15 16


# ===================================================================================================================
# Include a file with default setting. Some of them might be overriden by command line, such as the C or C++ compiler.
# ===================================================================================================================
if(NOT PATH_FILE)
    message(FATAL_ERROR "-DPATH_FILE must be present in the command line and point to a file that specify the paths and settings to use in the build. A default one is defined in cmake/Paths.cmake; feel free to copy and adapt it to your needs.")
endif()

include(${PATH_FILE})


17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
if(MOREFEM_CHECK_UPDATE_GHOSTS_CALL_RELEVANCE)
    message("ADDING FLAG MOREFEM_CHECK_UPDATE_GHOSTS_CALL_RELEVANCE")
    add_definitions(-DMOREFEM_CHECK_UPDATE_GHOSTS_CALL_RELEVANCE)
endif()

if(MOREFEM_EXTENDED_TIME_KEEP)
    message("ADDING FLAG MOREFEM_EXTENDED_TIME_KEEP")
    add_definitions(-DMOREFEM_EXTENDED_TIME_KEEP)
endif()

if(MOREFEM_CHECK_NAN_AND_INF)
    message("ADDING FLAG MOREFEM_CHECK_NAN_AND_INF")
    add_definitions(-DMOREFEM_CHECK_NAN_AND_INF)
endif()


33 34 35 36 37
# ===================================================================================================================
# Set some values in the path file that night be overridden by cache variables.
# WARNING: all those calls must occur BEFORE the call to project, so that overriding remains possible.
# ===================================================================================================================

38
# From https://cmake.org/pipermail/cmake/2008-September/023808.html
39
# Ensure if the user doesn't specify arenything in command line debug is chosen (CMake default is no optimization and no debug symbol, which is rather useless).
40 41 42 43 44 45 46 47 48
if(DEFINED CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose the type of
build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug
Release RelWithDebInfo MinSizeRel.")
else()
   set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build,
options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release
RelWithDebInfo MinSizeRel.")
endif()
49

50
# Set C and CXX compilers from the values read in the setting file. Might be overridden in command line.
51 52 53 54 55 56 57 58

if (NOT DEFINED CMAKE_C_COMPILER)
    set(CMAKE_C_COMPILER ${MPI_CC})
endif()

if (NOT DEFINED CMAKE_CXX_COMPILER)
    set(CMAKE_CXX_COMPILER ${MPI_CXX})
endif()
59

60 61 62 63

# ===================================================================================================================
# Set project.
# ===================================================================================================================
64
project( "MoReFEM_CMAKE")
65

66 67 68 69
MESSAGE("CC: " ${CC})
MESSAGE("CMAKE_C_COMPILER: " ${CMAKE_C_COMPILER})


70
set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
71

72

73 74 75
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
76 77 78

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

79
MESSAGE("Module path: ${CMAKE_MODULE_PATH}")
80 81

include(CustomCommands)
82 83


84

85 86 87 88 89 90 91 92 93 94
# All --all_load in target_link_libraries of executables if STATIC library are chose.
    
if(LIBRARY_TYPE MATCHES STATIC)
    set(ALL_LOAD_FLAG "-all_load")
else()
    set(ALL_LOAD_FLAG "")
endif()

#MESSAGE("ALL_LOAD_FLAG: ${ALL_LOAD_FLAG}")

95 96
MESSAGE("Generated with config types: ${CMAKE_CONFIGURATION_TYPES}")

97 98
include(compiler)

99 100 101 102 103 104
# Add LTO support in non debug mode.
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
    set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE)
else()
    set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()        
105

106
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Sources /
107
                    ${CMAKE_CURRENT_SOURCE_DIR}/Sources/ThirdParty/Source/Tclap/include /
108 109 110 111 112 113 114 115 116 117
                    ${OPS_DIR} /
                    ${SELDON_DIR} /
                    ${OPEN_MPI_INCL_DIR} /
                    ${PETSC_GENERAL_INCL_DIR} /
                    ${PETSC_DEBUG_INCL_DIR} /
                    ${PARMETIS_INCL_DIR} /
                    ${LUA_INCL_DIR} /
                    ${BOOST_INCL_DIR}                    
                    )

118 119 120
# TO complete for release mode! (see SCons)
add_definitions(-DOPS_WITH_EXCEPTION)
add_definitions(-DSELDON_WITH_LAPACK -DSELDON_WITH_LAPACK  -DSELDON_WITH_BLAS -DSELDON_WITH_COMPILED_LIBRARY -DSELDON_CHECK_BOUNDS -DSELDON_CHECK_DIMENSIONS)
121

122 123 124 125 126 127 128 129

morefem_find_library(LIB_OPEN_MPI "mpi" ${OPEN_MPI_LIB_DIR} "Openmpi")
morefem_find_library(LIB_OPEN_MPI_CXX "mpi_cxx" ${OPEN_MPI_LIB_DIR} "Openmpi (C++)")
morefem_find_library(LIB_PETSC "petsc" ${PETSC_DEBUG_LIB_DIR} "Petsc")
morefem_find_library(LIB_PARMETIS "parmetis" ${PARMETIS_LIB_DIR} "Parmetis")
morefem_find_library(LIB_LUA "lua" ${LUA_LIB_DIR} "Lua")
morefem_find_library(LIB_BOOST_FILESYSTEM "boost_filesystem" ${BOOST_LIB_DIR} "Boost filesystem")
morefem_find_library(LIB_BOOST_SYSTEM "boost_system" ${BOOST_LIB_DIR} "Boost system")
130

131 132 133 134 135 136 137
if(BLAS_CUSTOM_LINKER)
    set(LIB_BLAS ${BLAS_LIB})    
else()
    morefem_find_library(LIB_BLAS ${BLAS_LIB} ${BLAS_LIB_DIR} "Blas library.")
endif()


138 139 140 141 142 143 144 145
set(MOREFEM_COMMON_DEP
    ${LIB_OPEN_MPI}
    ${LIB_OPEN_MPI_CXX}
    ${LIB_PETSC} 
    ${LIB_PARMETIS} 
    ${LIB_LUA} 
    ${LIB_BOOST_FILESYSTEM} 
    ${LIB_BOOST_SYSTEM}                      
146
    ${LIB_BLAS}
147 148 149
)


150 151
add_subdirectory(Sources)
      
152 153