# Copyright 2020 University of Liège # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ---------------------------------------------------------------------------- PROJECT(fpm) # ---------------------------------------------------------------------------- CMAKE_MINIMUM_REQUIRED(VERSION 3.1) IF(${CMAKE_VERSION} VERSION_GREATER "3.14.0") # we might want to update the project and use the NEW behavior here cmake_policy(SET CMP0078 OLD) cmake_policy(SET CMP0086 OLD) ENDIF() SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.") SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.") MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH) IF(NOT CMAKE_BUILD_TYPE) SET( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) ENDIF(NOT CMAKE_BUILD_TYPE) MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}") LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake") # -- GENERAL OPTIONS # print OS MESSAGE(STATUS "CMAKE_SYSTEM_NAME=\"${CMAKE_SYSTEM_NAME}\"") MESSAGE(STATUS "CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}") # -- macros/fcts INCLUDE(fpmMacros) # -- C++11 SET(CMAKE_CXX_STANDARD 11) # newer way to set C++11 (requires cmake>=3.1) SET(CMAKE_CXX_STANDARD_REQUIRED ON) # Set specific compiler flags IF((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Intel")) IF(NOT APPLE) SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-as-needed") ENDIF() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") # add verbosity SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -Wno-unknown-pragmas -Wno-sign-compare") # merge trilinos ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE) ADD_DEFINITIONS(-D_USE_MATH_DEFINES) # otherwise M_PI is undefined SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") # parallel build with MSVC #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") # add verbosity ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-register") #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything") # add verbosity ENDIF() # -- Search for Python IF (CMAKE_VERSION VERSION_LESS 3.12.0) FIND_PACKAGE(PythonInterp 3.6 REQUIRED) FIND_PACKAGE(PythonLibs 3.6 REQUIRED) ELSE() find_package (Python3 COMPONENTS Interpreter Development) # use Python3_ROOT_DIR if wrong python found (e.g. anaconda) SET(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) SET(PYTHON_LIBRARIES ${Python3_LIBRARIES}) SET(PYTHON_INCLUDE_PATH ${Python3_INCLUDE_DIRS}) SET(PYTHONLIBS_VERSION_STRING ${Python3_VERSION}) ENDIF() MESSAGE(STATUS "PYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}") MESSAGE(STATUS "PYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}") MESSAGE(STATUS "PYTHON_INCLUDE_DIR:FILEPATH=${PYTHON_INCLUDE_DIR}") MESSAGE(STATUS "PYTHON_FRAMEWORK_INCLUDES=${PYTHON_FRAMEWORK_INCLUDES}") MESSAGE(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}") MESSAGE(STATUS "Python_FRAMEWORKS=${Python_FRAMEWORKS}") # -- Search for SWIG FIND_PACKAGE(SWIG REQUIRED) IF(CMAKE_GENERATOR MATCHES "Visual Studio") # not MSVC because of nmake & jom SET(CMAKE_SWIG_OUTDIR "${EXECUTABLE_OUTPUT_PATH}/$(Configuration)/") ELSE() SET(CMAKE_SWIG_OUTDIR "${EXECUTABLE_OUTPUT_PATH}") ENDIF() # -- Doxygen (https://vicrucann.github.io/tutorials/quick-cmake-doxygen/) # check if Doxygen is installed FIND_PACKAGE(Doxygen) IF(DOXYGEN_FOUND) # set input and output files SET(DOXYGEN_IN ${PROJECT_SOURCE_DIR}/Doxyfile.in) SET(DOXYGEN_OUT ${PROJECT_BINARY_DIR}/Doxyfile) # request to configure the file CONFIGURE_FILE(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY) #message("Doxygen build started") # note the option ALL which allows to build the docs together with the application # "make dox" rebuilds the doc ADD_CUSTOM_TARGET( dox #ALL COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) ELSE() MESSAGE("Doxygen need to be installed to generate the doxygen documentation") ENDIF() # -- CTest ENABLE_TESTING() # -- Modules ADD_SUBDIRECTORY( fpm )