-
Benjamin Cumming authored
added flags for GNU and Intel compilers to the cmake build rules that generate KNL-specific instructions when the TARGET_KNL cmake flag is set.
b4c5b75f
CMakeLists.txt 3.10 KiB
cmake_minimum_required(VERSION 2.8)
# project info
project(cell_algorithms)
enable_language(CXX)
# save incoming CXX flags for forwarding to modparser external project
set(SAVED_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
# compilation flags
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include("CompilerOptions")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_DEBUG} ${CXXOPT_CXX11} ${CXXOPT_PTHREAD} ${CXXOPT_WALL}")
# this generates a .json file with full compilation command for each file
set(CMAKE_EXPORT_COMPILE_COMMANDS "YES")
# generated .a and .so go into /lib
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# enable assertions?
set(WITH_ASSERTIONS OFF CACHE BOOL "enable EXPECTS() assertions in code")
if(WITH_ASSERTIONS)
add_definitions("-DWITH_ASSERTIONS")
endif()
# enable traces?
set(WITH_TRACE OFF CACHE BOOL "enable TRACE() macros in code")
if(WITH_TRACE)
add_definitions("-DWITH_TRACE")
endif()
# TBB support
set(WITH_TBB OFF CACHE BOOL "use TBB for on-node threading" )
if(WITH_TBB)
find_package(TBB REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TBB_DEFINITIONS}")
add_definitions(-DWITH_TBB)
endif()
# MPI support
set(WITH_MPI OFF CACHE BOOL "use MPI for distrubuted parallelism")
if(WITH_MPI)
find_package(MPI REQUIRED)
include_directories(SYSTEM ${MPI_C_INCLUDE_PATH})
add_definitions(-DWITH_MPI)
# unfortunate workaround for C++ detection in system mpi.h
add_definitions(-DMPICH_SKIP_MPICXX=1 -DOMPI_SKIP_MPICXX=1)
set_property(DIRECTORY APPEND_STRING PROPERTY COMPILE_OPTIONS "${MPI_C_COMPILE_FLAGS}")
endif()
# Profiler support
set(WITH_PROFILING OFF CACHE BOOL "use built in profiling of miniapp" )
if(WITH_PROFILING)
add_definitions(-DWITH_PROFILING)
endif()
# Cray systems
set(SYSTEM_CRAY OFF CACHE BOOL "add flags for compilation on Cray systems")
if(SYSTEM_CRAY)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -dynamic")
endif()
# Cray systems
set(TARGET_KNL OFF CACHE BOOL "target Intel KNL architecture")
if(TARGET_KNL)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_KNL}")
endif()
# targets for extermal dependencies
include(ExternalProject)
externalproject_add(modparser
PREFIX ${CMAKE_BINARY_DIR}/external
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external"
"-DCMAKE_CXX_FLAGS=${SAVED_CXX_FLAGS}"
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
BINARY_DIR "${CMAKE_BINARY_DIR}/external/modparser"
STAMP_DIR "${CMAKE_BINARY_DIR}/external/"
TMP_DIR "${CMAKE_BINARY_DIR}/external/tmp"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/external/modparser"
)
include_directories(${CMAKE_SOURCE_DIR}/external)
include_directories(${CMAKE_SOURCE_DIR}/external/tclap/include)
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/src)
include_directories(${CMAKE_SOURCE_DIR}/miniapp)
include_directories(${CMAKE_SOURCE_DIR})
if( "${WITH_TBB}" STREQUAL "ON" )
include_directories(${TBB_INCLUDE_DIRS})
endif()
add_subdirectory(mechanisms)
add_subdirectory(src)
add_subdirectory(tests)
add_subdirectory(miniapp)