cmake_minimum_required (VERSION 3.4) # CMake utils list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") # Forbids in-source builds include(CheckNotInSources) #------------------------------------------------------ #----------------- Main configuration ----------------- #------------------------------------------------------ project (Pastis VERSION 0.0.4) #------------------------------------------------------ set(PASTIS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(PASTIS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") # Default build type is RelWIthDebInfo if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) endif(NOT CMAKE_BUILD_TYPE) #------------------------------------------------------ # Checks if compiler version is compatible with Pastis sources set(GNU_CXX_MIN_VERSION "7.0.0") set(CLANG_CXX_MIN_VERSION "5.0.0") # Pastis default compiler flags set(PASTIS_CXX_FLAGS "${PASTIS_CXX_FLAGS} -Wall") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${GNU_CXX_MIN_VERSION}") message(FATAL_ERROR "Pastis build requires at least g++-${GNU_CXX_MIN_VERSION}") endif() elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${CLANG_CXX_MIN_VERSION}") message(FATAL_ERROR "Pastis build requires at least llvm/clang ++-${CLANG_CXX_MIN_VERSION}") endif() set(PASTIS_CXX_FLAGS "${PASTIS_CXX_FLAGS} -Wsign-compare -Wunused -Wunused-member-function -Wunused-private-field") endif() #------------------------------------------------------ # setting Kokkos defaults to OpenMP when available include(FindOpenMP) if(${OPENMP_FOUND}) set(KOKKOS_ENABLE_OPENMP ON CACHE BOOL "") endif() # Kokkso compiler flags add_subdirectory(${PASTIS_SOURCE_DIR}/packages/kokkos) include_directories(${Kokkos_INCLUDE_DIRS_RET}) include(GetKokkosCompilerFlags) # sets Kokkos debug flags when non release build if (CMAKE_BUILD_TYPE MATCHES "Release") set (KOKKOS_ENABLE_DEBUG OFF) else() set (KOKKOS_ENABLE_DEBUG ON) endif() # C++ 17 flags if(${CMAKE_VERSION} VERSION_LESS "3.8.0") message(WARNING "Please consider to switch to CMake >= 3.8") set(PASTIS_CXX_FLAGS "${PASTIS_CXX_FLAGS} -std=gnu++1z") if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(PASTIS_CXX_FLAGS "${PASTIS_CXX_FLAGS} -Wno-c++17-extensions") endif() else() set(CMAKE_CXX_STANDARD "17") endif() # Compiler flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PASTIS_CXX_FLAGS}") # Add debug mode for Standard C++ library set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1 ${PASTIS_CXX_FLAGS}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1 ${PASTIS_CXX_FLAGS}") #------------------------------------------------------ # Rang (colors? Useless thus necessary!) include_directories(${PASTIS_SOURCE_DIR}/packages/rang/include) # CLI11 include_directories(${PASTIS_SOURCE_DIR}/packages/CLI11/include) # Pastis src add_subdirectory(src) include_directories(src) include_directories(src/algebra) include_directories(src/mesh) include_directories(src/output) include_directories(src/utils) include_directories(src/scheme) include_directories(src/experimental) # Pastis tests set(CATCH_MODULE_PATH "${PASTIS_SOURCE_DIR}/packages/Catch2") set(CATCH_INCLUDE_PATH "${CATCH_MODULE_PATH}/single_include") include("${CATCH_MODULE_PATH}/contrib/ParseAndAddCatchTests.cmake") add_subdirectory("${CATCH_MODULE_PATH}") add_subdirectory(tests) enable_testing() # ----------------------------------------------------- link_libraries("-rdynamic") # ------------------- Source files -------------------- # Pastis binary add_executable( pastis src/main.cpp) # Libraries target_link_libraries( pastis kokkos PastisUtils PastisMesh PastisExperimental)