https://github.com/feelpp/feelpp
Raw File
Tip revision: 083b417f8e82e0789fd79a759e17bcba5619e831 authored by METIVET Thibaut on 11 December 2019, 09:54:25 UTC
Rename options reinit*->redist*
Tip revision: 083b417
CMakeLists.txt
# -*- mode: cmake; coding: utf-8 -*-
#
#  Author(s): Christophe Prud'homme <christophe.prudhomme@feelpp.org>
#       Date: 2009-11-29
#
#  Copyright (C) 2009-2014 Feel++ Consortium
#
# Distributed under the GPL(GNU Public License):
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
cmake_minimum_required (VERSION 3.7.2)
if ( ${CMAKE_VERSION} VERSION_GREATER 2.8.12 )
  message(STATUS "[feelpp] use new policy CMP0022" )
  cmake_policy(SET CMP0022 NEW)
endif()
if ( ${CMAKE_MAJOR_VERSION} EQUAL 3 )
	message(STATUS "[feelpp] use NEW policy CMP0038" )
	cmake_policy(SET CMP0038 NEW)
	message(STATUS "[feelpp] use NEW policy CMP0042" )
	cmake_policy(SET CMP0042 NEW)
    # if ( ${CMAKE_MAJOR_VERSION} EQUAL 3 AND ${CMAKE_MINOR_VERSION} GREATER 3 )
    #   message(STATUS "[feelpp] use OLD policy CMP0064" )
    #   cmake_policy(SET CMP0064 OLD)
    # endif()
	#message(STATUS "[feelpp] use NEW policy CMP0046" )
	#cmake_policy(SET CMP0046 NEW)
endif()
# CMake 3.5.2 warns about this policy introduced in 3.1
# Use the old behavior for now to suppress warnings
# for more info : cmake --help-policy CMP0053
if ( ${CMAKE_VERSION} VERSION_GREATER 3.1 AND ${CMAKE_VERSION} VERSION_LESS 3.6 )
    message(STATUS "[feelpp] use old policy CMP0053" )
    cmake_policy(SET CMP0053 OLD)
endif()
#
# Bug in cmake that delete destroy library path if LIBRARY_PATH is not empty
# Ugly hack that disable the environement variable
# Waiting for cmake to fix it
OPTION(FEELPP_RESET_ENV_LIBRARY_PATH "apply SET(ENV{LIBRARY_PATH} )" ON )
if (FEELPP_RESET_ENV_LIBRARY_PATH)
  SET(ENV{LIBRARY_PATH} "")
endif()

# guard against in-source builds

if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
  message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ")
endif()

# guard against bad build-type strings

if (NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE "Release")
endif()

string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_tolower)
if(     NOT cmake_build_type_tolower STREQUAL "debug"
    AND NOT cmake_build_type_tolower STREQUAL "release"
    AND NOT cmake_build_type_tolower STREQUAL "minsizerel"
    AND NOT cmake_build_type_tolower STREQUAL "none"
    AND NOT cmake_build_type_tolower STREQUAL "relwithdebinfo")
  message(FATAL_ERROR "Unknown build type \"${CMAKE_BUILD_TYPE}\". Allowed values are None, Debug, Release, MinSizeRel, RelWithDebInfo (case-insensitive).")
endif()


#SET( CMAKE_CXX_FLAGS "-pipe -Wall -O2 ")
#SET( CMAKE_C_FLAGS "-pipe -Wall -O2")

if ( ${CMAKE_MAJOR_VERSION} EQUAL 3 )
  project (Feel++ C CXX )
else()
  project (Feel++ C CXX Fortran)
endif()


macro(set_config_option VARNAME STRING)
  set(${VARNAME} TRUE)
  list(APPEND CONFIG_OPTIONS ${STRING})
  message(STATUS "[feelpp] Found " ${STRING})
endmacro(set_config_option)

# this variable controls the default value of the "FEELPP_ENABLE_XXX" options which are
# normally set to ON (useful if you want to configure a minimal version of feel++:
# e.g. "cmake -DFEELPP_DEFAULT=0 -DFEELPP_ENABLE_TESTS=1 -DFEELPP_ENABLE_=1")
set(FEELPP_DEFAULT ON CACHE INTERNAL "Default value for enabled-by-default options")

OPTION(FEELPP_ENABLE_VERBOSE_CMAKE "enable Feel++ verbose cmake" OFF)
OPTION(FEELPP_ENABLE_BUILD_STATIC "Enable Feel++ library statically built" OFF )
if ( NOT FEELPP_ENABLE_BUILD_STATIC )
  set(BUILD_SHARED_LIBS ON)
endif()
OPTION(FEELPP_BENCHMARK_FLAGS "enable benchmarks flags" OFF)
OPTION(FEELPP_ENABLE_DOCUMENTATION "enable Feel++ documentation (aka examples)" ${FEELPP_DEFAULT})
OPTION(FEELPP_ENABLE_BENCHMARKS "enable Feel++ benchmarks" ${FEELPP_DEFAULT})
OPTION(FEELPP_ENABLE_TOOLBOXES "enable Feel++ toolboxes" OFF)
option(FEELPP_ENABLE_MOR "Enable MOR(Model Order Reduction) Applications in Feel++" OFF)

# enable PCH only for GCC as for now
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
	OPTION(FEELPP_ENABLE_PCH_FOR_APPLICATIONS "enable Pre-Compiled Headers (PCH) for Feel++ applications" OFF)
else()
	set(FEELPP_ENABLE_PCH_FOR_APPLICATIONS OFF)
endif()
OPTION(FEELPP_ENABLE_RESEARCH "enable Feel++ research" ${FEELPP_DEFAULT})
OPTION(FEELPP_ENABLE_TESTS "enable Feel++ tests" ${FEELPP_DEFAULT})
# default TimeOut for Feel++ testsuite 
SET(FEELPP_DEFAULT_TEST_TIMEOUT "300")
OPTION(FEELPP_ENABLE_DOXYGEN "enable Feel++ doxygen documentation generation" OFF)
OPTION(FEELPP_MINIMAL_CONFIGURATION "enable feel minimal configuration" OFF)
OPTION(FEELPP_MINIMAL_BUILD "Enable Feel++ minimal build" OFF)

OPTION(FEELPP_USE_GMSH_PACKAGE "Use system installed package" ON)

SET(FEELPP_HOME_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
SET(FEELPP_HOME_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
SET(FEELPP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
SET(FEELPP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
SET(FEELPP_ROOT ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "Root directory for Feel++ sources")
SET(FEELPP_SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "Root directory for Feel++ sources")
SET(FEELPP_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "")
SET(FEELPP_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "")

if ( NOT DEFINED FEELPP_INSTANTIATION_ORDER_MAX)
  # max order to instantiate
  set(FEELPP_INSTANTIATION_ORDER_MAX 3)
endif()

# if (APPLE)
#   list(REMOVE_ITEM FEELPP_LIBRARIES /usr/lib/libstdc++.dylib)
# endif()

include(ProcessorCount)
ProcessorCount(NProcs)
IF(NOT CMAKE_NPROCS)
  ##if(N GREATER 1)
  math (EXPR NProcs2 "${NProcs}/2")
  if(NProcs2 EQUAL 0)
    set(NProcs2 1)
  endif()
  if(NProcs2 GREATER 6)
    set(NProcs2 6)
  endif()
else()
  set(NProcs2 "${CMAKE_NPROCS}")
endif()
message(STATUS "[feelpp] using ${NProcs2} cores out of ${NProcs} cores" )


SET( CMAKE_MODULE_PATH  ${FEELPP_HOME_DIR}/feelpp/cmake/modules ${FEELPP_HOME_DIR}/feelpp/cmake/machines )

include(feelpp.dirs)
include(feelpp.version)

#
# Enable testing
#
INCLUDE(CTest)
ENABLE_TESTING()

add_custom_target(check)
add_custom_target(install-testcase
  COMMAND ${CMAKE_COMMAND}
  -D COMPONENT=install-testcase
  -P cmake_install.cmake
  )

add_custom_target(check-full COMMAND "ctest")


################################################################################
# Feel
################################################################################
ADD_SUBDIRECTORY ( feelpp )

IF( FEELPP_MINIMAL_CONFIGURATION )
  set( FEELPP_ENABLE_MOR OFF )
  set( FEELPP_ENABLE_TOOLBOXES OFF )
  set( FEELPP_ENABLE_BENCHMARKS OFF )
  set( FEELPP_ENABLE_TESTS OFF )
  set( FEELPP_ENABLE_RESEARCH OFF )
  set( FEELPP_ENABLE_APPLICATIONS OFF )
  set( FEELPP_ENABLE_DOCUMENTATION ON )
  set( FEELPP_ENABLE_INSTANTIATION_MODE OFF )
  UNSET( FEELPP_INSTANTIATION_MODE CACHE )
  SET(FEELPP_MESH_MAX_ORDER "1" CACHE STRING "maximum geometrical order in templates to instantiate" FORCE )
ENDIF( FEELPP_MINIMAL_CONFIGURATION )

include(feelpp.module.toolboxes)
if ( FEELPP_HAS_TOOLBOXES )
  add_custom_target(toolboxes)
  add_subdirectory(toolboxes)
endif()

include(feelpp.module.mor)
if ( FEELPP_HAS_MOR )
  add_subdirectory(mor)
endif()

#
# Enable testing
#
IF(FEELPP_ENABLE_TESTS AND EXISTS  ${CMAKE_CURRENT_SOURCE_DIR}/testsuite)
  add_subdirectory( testsuite )
  add_dependencies(check-full testsuite)
endif()



if ( FEELPP_ENABLE_DOCUMENTATION OR FEELPP_ENABLE_DOXYGEN )
  add_dependencies(check-full doc)
  set(FEELPP_DOC_ENABLE_CAVITY_CRB off)
  ADD_SUBDIRECTORY ( doc )
endif()

if ( FEELPP_ENABLE_BENCHMARKS AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks )
  ADD_SUBDIRECTORY ( benchmarks )
endif()



################################################################################
# data
################################################################################
IF(EXISTS "${CMAKE_SOURCE_DIR}/data")
  ADD_SUBDIRECTORY ( data )
ENDIF()



# Load documented project for Doxygen
# it assumes that a project is valid if :
#   there is README.{md,adoc} file in the directory
#   that the directory path include "research"
# for each detected project it creates an FEELPP_ENABLE_RESEARCH_${PROJECT} and FEELPP_ENABLE_RESEARCH_${PROJECT}_DOCUMENTATION
# option which are set to OFF by default
MESSAGE(STATUS "[feelpp] Feel++ projects :")
feelpp_list_subdir(projects ${CMAKE_CURRENT_SOURCE_DIR}/research)
foreach(project ${projects})
  if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/research/${project}/README.md OR 
      EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/research/${project}/README.adoc  )
    string(TOUPPER ${project} PROJECT)
    if ( ${PROJECT} STREQUAL "EYE2BRAIN" OR ${PROJECT} STREQUAL "HYDROMORPHO" OR ${PROJECT} STREQUAL "SIVIBIRPP"  )
      option(FEELPP_ENABLE_RESEARCH_${PROJECT} "Enable/Disable research/${project} " ON)
    else()
      option(FEELPP_ENABLE_RESEARCH_${PROJECT} "Enable/Disable research/${project} " ON)
    endif()
    option(FEELPP_ENABLE_RESEARCH_${PROJECT}_DOCUMENTATION "Enable/Disable documentation in research/${project}" OFF)
		SET(FEELPP_ENABLED_PROJECTS "${FEELPP_ENABLED_PROJECTS} ${project}" )
		MESSAGE(STATUS "[feelpp] ${project}\t-- Compile : ${FEELPP_ENABLE_RESEARCH_${PROJECT}} ")
		MESSAGE(STATUS "        \t\t-- Doc :     ${FEELPP_ENABLE_RESEARCH_${PROJECT}_DOCUMENTATION}" )
  endif()
endforeach()

if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/research AND FEELPP_ENABLE_RESEARCH )
  ADD_SUBDIRECTORY ( research )
endif()

################################################################################
# generate configuration header
################################################################################
if ( CONFIG_OPTIONS )
  list(SORT CONFIG_OPTIONS)
endif()
set(FEELPP_CONFIG_OPTIONS "")
foreach(OPT ${CONFIG_OPTIONS})
  set(FEELPP_CONFIG_OPTIONS "${FEELPP_CONFIG_OPTIONS} ${OPT}")
endforeach(OPT)

################################################################################
# Installation procedure
################################################################################
include(feelpp.install)

################################################################################
# Packaging procedure
################################################################################
include(feelpp.package)

################################################################################
# Post-config message
################################################################################
include(feelpp.directive)


feelpp_message( INFO ${FEELPP_MESSAGE_INFO_END} )
back to top