195 lines
5.4 KiB
CMake
195 lines
5.4 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
cmake_policy(SET CMP0074 NEW)
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
|
|
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules")
|
|
|
|
IF(DEFINED ARES_PREFIX_PATH)
|
|
SET(ENV{CMAKE_PREFIX_PATH} "${ARES_PREFIX_PATH}")
|
|
SET(CMAKE_PREFIX_PATH "${ARES_PREFIX_PATH}")
|
|
ENDIF()
|
|
|
|
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
|
|
option(BUILD_JULIA "Activate the Julia support" OFF)
|
|
|
|
PROJECT(ARES CXX C)
|
|
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo)
|
|
|
|
# Import required cmake modules
|
|
include(color_msg)
|
|
include(GetGitRevisionDescription)
|
|
include(ExternalProject)
|
|
include(CTest)
|
|
# Not used anymore
|
|
#include(GenOptMacro)
|
|
include(CheckCXXCompilerFlag)
|
|
include(CheckCCompilerFlag)
|
|
#include(FortranCInterface)
|
|
include(FindOpenMP)
|
|
include(FindPkgConfig)
|
|
include(clang-format)
|
|
include(FetchContent)
|
|
|
|
|
|
IF (CMAKE_C_COMPILER_ID MATCHES "AppleClang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
|
|
IF (NOT ${CMAKE_C_COMPILER_ID} STREQUAL ${CMAKE_CXX_COMPILER_ID})
|
|
message(WARNING "C and C++ compiler have different IDs: ${CMAKE_C_COMPILER_ID} != ${CMAKE_CXX_COMPILER_ID}")
|
|
ENDIF()
|
|
message(WARNING "AppleClang does not support OpenMP. Please use something else for more performance.")
|
|
SET(DEFAULT_ENABLE_OPENMP OFF)
|
|
ELSE()
|
|
SET(DEFAULT_ENABLE_OPENMP ON)
|
|
ENDIF()
|
|
|
|
# Options
|
|
OPTION(ENABLE_OPENMP "Activate OpenMP support" ${DEFAULT_ENABLE_OPENMP})
|
|
OPTION(DISABLE_DEBUG_OUTPUT "No debug output support (faster)" OFF)
|
|
OPTION(ENABLE_MPI "MPI support" OFF)
|
|
OPTION(CONTEXT_TIMER "Activate profiling of LibLSS contexts" OFF)
|
|
OPTION(USE_NATIVE_ARCH "Activate instruction set supported by the running system" OFF)
|
|
OPTION(ENABLE_FULL_WARNINGS "Ask the compiler to produce lots of warnings" OFF)
|
|
OPTION(BUILD_PYTHON_EXTENSION "Build the Python BORG extension" OFF)
|
|
|
|
IF(ENABLE_MPI)
|
|
find_package(MPI)
|
|
set(EXTRA_LIB ${MPI_C_LIBRARIES})
|
|
ELSE(ENABLE_MPI)
|
|
SET(EXTRA_LIB)
|
|
SET(MPI_C_INCLUDE_PATH)
|
|
ENDIF(ENABLE_MPI)
|
|
|
|
IF(USE_NATIVE_ARCH)
|
|
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
|
|
if(COMPILER_SUPPORTS_MARCH_NATIVE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
|
endif()
|
|
endif()
|
|
|
|
|
|
include(${CMAKE_SOURCE_DIR}/external/external_build.cmake)
|
|
|
|
find_program(PYTHON_EXECUTABLE NAMES python3)
|
|
IF (NOT PYTHON_EXECUTABLE)
|
|
cmessage(FATAL_ERROR "Python3 interpreter to compile ARES")
|
|
ENDIF()
|
|
|
|
IF (BUILD_JULIA)
|
|
find_package(Julia)
|
|
if (NOT JULIA_EXECUTABLE)
|
|
cmessage(CWARNING "Julia not found, will not be built")
|
|
set(BUILD_JULIA OFF)
|
|
endif()
|
|
ENDIF()
|
|
|
|
IF(BUILD_PYTHON_EXTENSION)
|
|
FetchContent_MakeAvailable(pybind11)
|
|
ENDIF()
|
|
|
|
FetchContent_MakeAvailable(r3d)
|
|
|
|
# Retrieve current git revision
|
|
git_describe(GIT_VER)
|
|
|
|
IF (DEFINED CMAKE_C_COMPILER_VERSION)
|
|
cmessage(STATUS "C compiler version: ${CMAKE_C_COMPILER_VERSION}")
|
|
cmessage(STATUS "C++ compiler Version: ${CMAKE_CXX_COMPILER_VERSION}")
|
|
if (NOT ${CMAKE_C_COMPILER_VERSION} EQUAL ${CMAKE_CXX_COMPILER_VERSION})
|
|
cmessage(FATAL_ERROR "C and C++ compilers are different. Please fix parameters.")
|
|
ENDIF()
|
|
ELSE()
|
|
cmessage(WARNING "Cannot check compiler versions. Proceed with cautions.")
|
|
ENDIF()
|
|
|
|
SET(CMAKE_CXX_FLAGS_PROFILE "-O3 -pg" CACHE STRING "Flags to turn on profiling for C++ compiler")
|
|
SET(CMAKE_C_FLAGS_PROFILE "-O3 -pg" CACHE STRING "Flags to turn on profiling for C compiler" )
|
|
SET(CMAKE_EXE_LINKER_FLAGS_PROFILE "-pg" CACHE STRING "Flags to turn on profiling in linker")
|
|
mark_as_advanced(CMAKE_CXX_FLAGS_PROFILE CMAKE_C_FLAGS_PROFILE CMAKE_EXE_LINKER_FLAGS_PROFILE)
|
|
|
|
find_library(ZLIB_LIBRARY z)
|
|
find_library(_pre_RT_LIBRARY rt)
|
|
if(_pre_RT_LIBRARY)
|
|
SET(RT_LIBRARY ${_pre_RT_LIBRARY})
|
|
ENDIF()
|
|
find_library(DL_LIBRARY dl)
|
|
|
|
|
|
include_directories(
|
|
${Boost_INCLUDE_DIRS}
|
|
${GSL_INCLUDE}
|
|
${CMAKE_SOURCE_DIR}
|
|
${EIGEN_INCLUDE_DIRS}
|
|
${EXT_INSTALL}/include
|
|
${COSMOTOOL_INCLUDE}
|
|
${HDF5_INCLUDE_DIR}
|
|
${FFTW_INCLUDE_DIR}
|
|
${MPI_C_INCLUDE_PATH}
|
|
)
|
|
|
|
#
|
|
# OpenMP handling
|
|
#
|
|
|
|
|
|
IF(ENABLE_OPENMP)
|
|
|
|
IF (NOT OPENMP_FOUND)
|
|
MESSAGE(ERROR "No known compiler option for enabling OpenMP")
|
|
ENDIF(NOT OPENMP_FOUND)
|
|
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}")
|
|
|
|
ENDIF(ENABLE_OPENMP)
|
|
|
|
IF (DISABLE_DEBUG_OUTPUT)
|
|
add_definitions(-DLIBLSS_CONSOLE_NO_DEBUG_SUPPORT)
|
|
ENDIF (DISABLE_DEBUG_OUTPUT)
|
|
|
|
IF(ENABLE_MPI)
|
|
add_definitions(-DARES_MPI_FFTW)
|
|
ENDIF (ENABLE_MPI)
|
|
|
|
IF (CONTEXT_TIMER)
|
|
add_definitions(-DLIBLSS_TIMED_CONTEXT)
|
|
ENDIF (CONTEXT_TIMER)
|
|
|
|
add_definitions(-DBOOST_ENABLE_ASSERT_DEBUG_HANDLER)
|
|
|
|
SET(ARES_INCLUDE_PATH)
|
|
|
|
|
|
# Detect extra modules
|
|
#
|
|
#
|
|
file(GLOB ARES_MODULES `LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR}/extra ${CMAKE_SOURCE_DIR}/extra/*)
|
|
|
|
# Remove spurious contaminating OSX directories
|
|
list(REMOVE_ITEM ARES_MODULES .DS_Store)
|
|
|
|
message(STATUS "ARES modules found:")
|
|
foreach(module IN LISTS ARES_MODULES)
|
|
if (EXISTS ${CMAKE_SOURCE_DIR}/extra/${module}/DO_NOT_BUILD)
|
|
list(REMOVE_ITEM ARES_MODULES ${module})
|
|
cmessage(CWARNING " ${module} (do not build)")
|
|
else()
|
|
message(STATUS " ${module}")
|
|
endif()
|
|
endforeach()
|
|
|
|
add_subdirectory(libLSS)
|
|
add_subdirectory(src)
|
|
|
|
foreach(module IN LISTS ARES_MODULES)
|
|
if (EXISTS ${CMAKE_SOURCE_DIR}/extra/${module}/${module}.cmake)
|
|
include(${CMAKE_SOURCE_DIR}/extra/${module}/${module}.cmake)
|
|
endif()
|
|
endforeach()
|
|
|
|
setup_formatter(ARES_MODULES)
|