cmake_minimum_required(VERSION 3.14.1)
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
endif()
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
project(Datasystem DESCRIPTION "DataSystem for Distributed Data Cache" LANGUAGES CXX C)
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" DATASYSTEM_VERSION)
add_compile_definitions(DATASYSTEM_VERSION="${DATASYSTEM_VERSION}")
message(STATUS "Datasystem version is ${DATASYSTEM_VERSION}")
include(CMakePackageConfigHelpers)
include(cmake/options.cmake)
include(cmake/util.cmake)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
if (USE_SANITIZER)
string(TOUPPER ${USE_SANITIZER} USE_SANITIZER)
if (${USE_SANITIZER} STREQUAL "ADDRESS")
set(SANITIZER_FLAGS "-fsanitize=address -fno-omit-frame-pointer -g3")
elseif (${USE_SANITIZER} STREQUAL "THREAD")
set(SANITIZER_FLAGS "-fsanitize=thread -g3")
elseif (${USE_SANITIZER} STREQUAL "UNDEFINED")
set(SANITIZER_FLAGS "-fsanitize=undefined -fno-sanitize=alignment -fsanitize=float-cast-overflow -fno-sanitize-recover=all -O0")
else ()
message(FATAL_ERROR "Unrecognized google sanitizers mode: ${USE_SANITIZER}")
endif ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_FLAGS}")
endif ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfloat-equal")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic")
add_definitions(-fPIC)
set(CMAKE_CXX_FLAGS_DEBUG "-ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ftrapv")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fstack-check")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fstack-protector-strong")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wl,-z,relro")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wl,-z,now")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wl,-z,noexecstack")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_FORTIFY_SOURCE=2")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fPIE -pie")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wl,--build-id=none")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CMAKE_COMMAND} -E time")
find_program(CCACHE "ccache")
if (CCACHE)
message(STATUS "Use ccache to accelerate compilation")
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE})
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
endif ()
if (BUILD_COVERAGE)
message(STATUS "Build code with coverage mode.")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage -lgcov")
add_compile_definitions(BUILD_COVERAGE)
endif ()
if (ENABLE_PERF)
add_compile_definitions(ENABLE_PERF)
message(STATUS "Enable perf point log")
endif ()
if (BUILD_HETERO)
add_compile_definitions(BUILD_HETERO)
message(STATUS "Enable hetero")
if (BUILD_HETERO_NPU)
add_compile_definitions(USE_NPU)
message(STATUS " - NPU (Ascend) backend enabled")
endif()
if (BUILD_HETERO_GPU)
add_compile_definitions(USE_GPU)
message(STATUS " - GPU (CUDA) backend enabled")
endif()
endif ()
if (BUILD_PIPLN_H2D)
add_compile_definitions(BUILD_PIPLN_H2D)
message(STATUS "Enable pipeline h2d")
endif ()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/module")
set(GIT_HASH "Unknown")
set(GIT_BRANCH "Unknown")
get_git_hash(GIT_HASH)
get_git_branch(GIT_BRANCH)
message(STATUS "GIT COMMIT: ${GIT_HASH}; BRANCH: ${GIT_BRANCH}")
include(cmake/dependency.cmake)
include_directories(include)
include_directories(src)
if (BUILD_TRANSFER_ENGINE AND BUILD_HETERO AND BUILD_HETERO_NPU)
set(TRANSFER_ENGINE_BUILD_PYTHON ${BUILD_PYTHON_API} CACHE BOOL "" FORCE)
set(TRANSFER_ENGINE_BUILD_TESTS ${WITH_TESTS} CACHE BOOL "" FORCE)
add_subdirectory(transfer_engine)
endif()
include_directories(${CMAKE_BINARY_DIR}/src)
if (WITH_TESTS)
add_compile_definitions(WITH_TESTS)
endif ()
add_subdirectory(src/datasystem)
add_subdirectory(dsbench)
if (WITH_TESTS)
enable_testing()
add_subdirectory(tests)
endif ()
if (BUILD_JAVA_API)
add_subdirectory(java)
endif ()
include(cmake/package.cmake)
file(GLOB_RECURSE PROJECT_SOURCES "src/*.cpp" "include/*.h" "src/*.h")
foreach(SOURCE_FILE ${PROJECT_SOURCES})
file(READ ${SOURCE_FILE} FILE_CONTENTS)
string(FIND "${FILE_CONTENTS}" "#include <regex>" FOUND_REGEX)
if (NOT ${FOUND_REGEX} EQUAL -1)
message(FATAL_ERROR "${SOURCE_FILE} include <regex>, std::regex is not avaliale, use re2 to replace")
endif()
endforeach()