# Copyright 2023 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(BLASTER) # ---------------------------------------------------------------------------- CMAKE_MINIMUM_REQUIRED(VERSION 3.14) # -- I/O # Lib/Exe dir 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) # Build type 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) # Additional modules and macros LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake") # -- C/C++ # Set specific languages flags SET(CMAKE_CXX_STANDARD 11) # newer way to set C++11 (requires cmake>=3.1) SET(CMAKE_CXX_STANDARD_REQUIRED ON) 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 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() # -- DEPENDENCIES # Python # use Python3_ROOT_DIR if wrong python found (e.g. anaconda) FIND_PACKAGE(Python3 COMPONENTS Interpreter Development) SET(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) SET(PYTHON_LIBRARIES ${Python3_LIBRARIES}) SET(PYTHON_INCLUDE_PATH ${Python3_INCLUDE_DIRS}) SET(PYTHONLIBS_VERSION_STRING ${Python3_VERSION}) # 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() # -- DEFINE (for SWIG to detect definitions) INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) # to find "amfe_def.h" # -- CTest ENABLE_TESTING() # -- INSTALL IF(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -m site --user-site OUTPUT_VARIABLE PY_SITE OUTPUT_STRIP_TRAILING_WHITESPACE) STRING(REGEX REPLACE "\\\\" "/" PY_SITE ${PY_SITE}) SET(CMAKE_INSTALL_PREFIX "${PY_SITE}/blaster" CACHE STRING "Install location" FORCE) SET(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT FALSE) ENDIF() ENDIF() IF(UNIX) IF(APPLE) SET(CMAKE_INSTALL_RPATH "@loader_path") ELSE() SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") ENDIF() ENDIF() # -- Sub directories ADD_SUBDIRECTORY( modules ) ADD_SUBDIRECTORY( blast ) # -- FINAL MESSAGE(STATUS "PROJECT: ${PROJECT_NAME}") MESSAGE(STATUS "* SYSTEM NAME=\"${CMAKE_SYSTEM_NAME}\"") MESSAGE(STATUS "* CXX COMPILER: ${CMAKE_CXX_COMPILER_ID}") MESSAGE(STATUS "* CXX STANDARD: ${CMAKE_CXX_STANDARD}") MESSAGE(STATUS "* INSTALL DIR: ${CMAKE_INSTALL_PREFIX}") MESSAGE(STATUS "* BUILD TYPE: ${CMAKE_BUILD_TYPE}") MESSAGE(STATUS "* VTK SUPPORT: ${USE_VTK}") MESSAGE(STATUS "* MKL SUPPORT: ${USE_MKL}") MESSAGE(STATUS "* MUMPS SUPPORT: ${USE_MUMPS}")