# A minimum version for cmake command is required. cmake_minimum_required(VERSION 3.8) # TODO Add check whether the provided value is valid. # =================================================================================================================== # 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}) 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() # =================================================================================================================== # 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. # =================================================================================================================== # From https://cmake.org/pipermail/cmake/2008-September/023808.html # 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). 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() # Set C and CXX compilers from the values read in the setting file. Might be overridden in command line. 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() # =================================================================================================================== # Set project. # =================================================================================================================== project( "MoReFEM_CMAKE") MESSAGE("CC: " ${CC}) MESSAGE("CMAKE_C_COMPILER: " ${CMAKE_C_COMPILER}) set_property(GLOBAL PROPERTY USE_FOLDERS OFF) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) MESSAGE("Module path: ${CMAKE_MODULE_PATH}") include(CustomCommands) # 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}") MESSAGE("Generated with config types: ${CMAKE_CONFIGURATION_TYPES}") include(compiler) # 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() include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Sources / ${CMAKE_CURRENT_SOURCE_DIR}/Sources/ThirdParty/Source/Tclap/include / ${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} ) # 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) 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") set(MOREFEM_COMMON_DEP ${LIB_OPEN_MPI} ${LIB_OPEN_MPI_CXX} ${LIB_PETSC} ${LIB_PARMETIS} ${LIB_LUA} ${LIB_BOOST_FILESYSTEM} ${LIB_BOOST_SYSTEM} "-framework Accelerate" ) add_subdirectory(Sources)