forked from mooncake-track/Mooncake
313 lines
10 KiB
CMake
313 lines
10 KiB
CMake
set(CMAKE_C_STANDARD 99)
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -Wno-unused-parameter -fPIC")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra -Wno-unused-parameter -fPIC")
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcoroutines")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-tree-slp-vectorize")
|
|
endif()
|
|
|
|
set(CMAKE_C_FLAGS_RELEASE "-O3")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
|
|
|
|
set(CMAKE_C_FLAGS_DEBUG "-O0")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-O0")
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=thread-safety")
|
|
endif()
|
|
|
|
option(ENABLE_ASAN "enable address sanitizer" OFF)
|
|
|
|
if (ENABLE_ASAN)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=leak")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
|
endif()
|
|
|
|
# keep debuginfo by default
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
|
|
endif()
|
|
|
|
message(CMAKE_BUILD_TYPE ": ${CMAKE_BUILD_TYPE}")
|
|
|
|
# Necessary if you are using Alibaba Cloud eRDMA
|
|
add_definitions(-DCONFIG_ERDMA)
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
# Memory-aware build parallelism (compile vs. link job pools)
|
|
include(${CMAKE_CURRENT_LIST_DIR}/limit_jobs.cmake)
|
|
|
|
option(ENABLE_SCCACHE "Whether to open sccache" OFF)
|
|
if (ENABLE_SCCACHE)
|
|
find_program(SCCACHE sccache REQUIRED)
|
|
endif()
|
|
if(SCCACHE AND ENABLE_SCCACHE)
|
|
message(STATUS "Building with SCCACHE enabled")
|
|
set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE})
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE})
|
|
endif()
|
|
|
|
add_compile_definitions(GLOG_USE_GLOG_EXPORT)
|
|
add_compile_options(-fno-tree-slp-vectorize)
|
|
|
|
option(BUILD_EXAMPLES "Build examples" ON)
|
|
|
|
option(BUILD_UNIT_TESTS "Build unit tests" ON)
|
|
option(USE_CUDA "option for enabling gpu features for NVIDIA GPU" OFF)
|
|
option(USE_MUSA "option for enabling gpu features for MTHREADS GPU" OFF)
|
|
option(USE_MACA "option for enabling gpu features for MUXI GPU with MACA" OFF)
|
|
option(USE_HIP "option for enabling gpu features for AMD GPU" OFF)
|
|
option(USE_NVMEOF "option for using NVMe over Fabric" OFF)
|
|
option(USE_TCP "option for using TCP transport" ON)
|
|
option(USE_BAREX "option for using accl-barex transport" OFF)
|
|
option(USE_ASCEND "option for using npu with HCCL" OFF)
|
|
option(USE_ASCEND_DIRECT "option for using ascend npu with adxl engine" OFF)
|
|
option(USE_UBSHMEM "option for using ascend npu with shmem" OFF)
|
|
option(USE_ASCEND_HETEROGENEOUS "option for transferring between ascend npu and gpu" OFF)
|
|
option(USE_MNNVL "option for using Multi-Node NVLink transport" OFF)
|
|
option(USE_CXL "option for using CXL protocol" OFF)
|
|
option(USE_EFA "option for using AWS EFA transport" OFF)
|
|
|
|
if (USE_EFA)
|
|
# Find libfabric headers and library; default to AWS EFA installer path
|
|
find_path(LIBFABRIC_INCLUDE_DIR rdma/fabric.h
|
|
HINTS /opt/amazon/efa/include
|
|
PATH_SUFFIXES include)
|
|
find_library(LIBFABRIC_LIBRARY fabric
|
|
HINTS /opt/amazon/efa/lib
|
|
PATH_SUFFIXES lib lib64)
|
|
|
|
if (NOT LIBFABRIC_INCLUDE_DIR OR NOT LIBFABRIC_LIBRARY)
|
|
message(FATAL_ERROR "libfabric not found. Install AWS EFA or set LIBFABRIC_INCLUDE_DIR/LIBFABRIC_LIBRARY.")
|
|
endif()
|
|
|
|
get_filename_component(LIBFABRIC_LIB_DIR ${LIBFABRIC_LIBRARY} DIRECTORY)
|
|
include_directories(${LIBFABRIC_INCLUDE_DIR})
|
|
link_directories(${LIBFABRIC_LIB_DIR})
|
|
add_compile_definitions(USE_EFA)
|
|
message(STATUS "AWS EFA (libfabric) transport is enabled")
|
|
message(STATUS " libfabric include: ${LIBFABRIC_INCLUDE_DIR}")
|
|
message(STATUS " libfabric library: ${LIBFABRIC_LIBRARY}")
|
|
endif()
|
|
option(USE_ETCD "option for enable etcd as metadata server" OFF)
|
|
option(USE_ETCD_LEGACY "option for enable etcd based on etcd-cpp-api-v3" OFF)
|
|
option(USE_REDIS "option for enable redis as metadata server" OFF)
|
|
option(USE_HTTP "option for enable http as metadata server" ON)
|
|
option(WITH_RUST_EXAMPLE "build the Rust interface and sample code for the transfer engine" OFF)
|
|
option(WITH_METRICS "enable metrics and metrics reporting thread" ON)
|
|
option(USE_3FS "option for using 3FS storage backend" OFF)
|
|
option(WITH_NVIDIA_PEERMEM "disable to support RDMA without nvidia-peermem. If WITH_NVIDIA_PEERMEM=OFF then USE_CUDA=ON is required." ON)
|
|
option(USE_EVENT_DRIVEN_COMPLETION "option for using event-driven completion (store & transfer engine)" OFF)
|
|
|
|
option(USE_TENT "option for building Mooncake TENT" OFF)
|
|
|
|
option(USE_LRU_MASTER "option for using LRU in master service" OFF)
|
|
option(USE_INTRA_NVLINK "option for using IntraNode nvlink transport" OFF)
|
|
set(LRU_MAX_CAPACITY 1000)
|
|
|
|
if (USE_LRU_MASTER)
|
|
add_compile_definitions(USE_LRU_MASTER)
|
|
add_compile_definitions(LRU_MAX_CAPACITY)
|
|
endif()
|
|
|
|
if (USE_EVENT_DRIVEN_COMPLETION)
|
|
add_compile_definitions(USE_EVENT_DRIVEN_COMPLETION)
|
|
message(STATUS "Event-driven completion is enabled")
|
|
else()
|
|
message(STATUS "Event-driven completion is disabled")
|
|
endif()
|
|
|
|
if (USE_NVMEOF)
|
|
set(USE_CUDA ON)
|
|
add_compile_definitions(USE_NVMEOF)
|
|
message(STATUS "NVMe-oF support is enabled")
|
|
endif()
|
|
|
|
if (USE_MNNVL)
|
|
if (NOT USE_HIP AND NOT USE_MUSA)
|
|
set(USE_CUDA ON)
|
|
endif()
|
|
add_compile_definitions(USE_MNNVL)
|
|
message(STATUS "Multi-Node NVLink support is enabled")
|
|
endif()
|
|
|
|
if (USE_CUDA)
|
|
add_compile_definitions(USE_CUDA)
|
|
message(STATUS "CUDA support is enabled")
|
|
include_directories(/usr/local/cuda/include)
|
|
link_directories(
|
|
/usr/local/cuda/lib
|
|
/usr/local/cuda/lib64
|
|
)
|
|
endif()
|
|
|
|
if (USE_MACA)
|
|
# MACA toolchain is CUDA-compatible in first-stage porting.
|
|
# Reuse CUDA code paths to get a runnable baseline quickly.
|
|
add_compile_definitions(USE_MACA)
|
|
message(STATUS "MACA support is enabled")
|
|
if(DEFINED ENV{MACA_HOME})
|
|
set(MACA_HOME $ENV{MACA_HOME})
|
|
else()
|
|
set(MACA_HOME /opt/maca)
|
|
endif()
|
|
include_directories(${MACA_HOME}/include)
|
|
link_directories(
|
|
${MACA_HOME}/lib
|
|
${MACA_HOME}/lib64
|
|
)
|
|
endif()
|
|
|
|
if (USE_MUSA)
|
|
add_compile_definitions(USE_MUSA)
|
|
message(STATUS "MUSA support is enabled")
|
|
include_directories(/usr/local/musa/include)
|
|
link_directories(
|
|
/usr/local/musa/lib
|
|
)
|
|
endif()
|
|
|
|
if (USE_HIP)
|
|
list(APPEND CMAKE_PREFIX_PATH "/opt/rocm/lib/cmake")
|
|
find_package(HIP REQUIRED)
|
|
include_directories(${HIP_INCLUDE_DIRS})
|
|
add_compile_definitions(USE_HIP __HIP_PLATFORM_AMD__)
|
|
message(STATUS "HIP support is enabled")
|
|
|
|
find_program(HIPIFY_PERL_EXECUTABLE hipify-perl)
|
|
if(NOT HIPIFY_PERL_EXECUTABLE)
|
|
message(FATAL_ERROR
|
|
"hipify-perl not found.\n"
|
|
"Please ensure the ROCm or HIP SDK is installed and in your PATH.")
|
|
endif()
|
|
endif()
|
|
|
|
# This function converts given CUDA source files into HIP-compatible
|
|
# files using hipify-perl, placing the outputs in the build directory for use in
|
|
# project compilation. The file path changes to a new location after hipify.
|
|
function(hipify_files input_var_name)
|
|
set(result_files)
|
|
|
|
foreach(input_file IN LISTS ${input_var_name})
|
|
file(RELATIVE_PATH rel_path ${CMAKE_SOURCE_DIR} ${input_file})
|
|
set(output_file "${CMAKE_BINARY_DIR}/${rel_path}")
|
|
|
|
get_filename_component(output_dir ${output_file} DIRECTORY)
|
|
file(MAKE_DIRECTORY ${output_dir})
|
|
|
|
add_custom_command(
|
|
OUTPUT ${output_file}
|
|
COMMAND ${HIPIFY_PERL_EXECUTABLE} ${input_file} > ${output_file}
|
|
DEPENDS ${input_file}
|
|
COMMENT "HIPifying ${input_file} → ${output_file}"
|
|
)
|
|
|
|
list(APPEND result_files ${output_file})
|
|
endforeach()
|
|
|
|
set(${input_var_name} ${result_files} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
if (USE_CXL)
|
|
add_compile_definitions(USE_CXL)
|
|
message(STATUS "CXL support is enabled")
|
|
endif()
|
|
|
|
if (USE_TCP)
|
|
add_compile_definitions(USE_TCP)
|
|
endif()
|
|
|
|
if (USE_BAREX)
|
|
add_compile_definitions(USE_BAREX)
|
|
endif()
|
|
|
|
if (USE_ASCEND OR USE_ASCEND_DIRECT OR USE_UBSHMEM)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DOPEN_BUILD_PROJECT ")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DOPEN_BUILD_PROJECT ")
|
|
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" CURRENT_CPU)
|
|
set(CPU_ARCH "unknown")
|
|
if(CURRENT_CPU MATCHES "^(aarch64|arm64)$")
|
|
set(CPU_ARCH "aarch64")
|
|
elseif(CURRENT_CPU MATCHES "^(x86_64|amd64)$")
|
|
set(CPU_ARCH "x86_64")
|
|
else()
|
|
message(WARNING "Unsupported cpu arch.")
|
|
endif()
|
|
if(DEFINED ENV{ASCEND_HOME_PATH})
|
|
message(STATUS "Use env ASCEND_HOME_PATH")
|
|
file(GLOB ASCEND_TOOLKIT_ROOT "$ENV{ASCEND_HOME_PATH}/${CPU_ARCH}-linux")
|
|
else()
|
|
file(GLOB ASCEND_TOOLKIT_ROOT "/usr/local/Ascend/ascend-toolkit/latest/${CPU_ARCH}-linux")
|
|
endif()
|
|
set(ASCEND_LIB_DIR "${ASCEND_TOOLKIT_ROOT}/lib64")
|
|
set(ASCEND_INCLUDE_DIR "${ASCEND_TOOLKIT_ROOT}/include")
|
|
add_compile_options(-Wno-ignored-qualifiers)
|
|
include_directories(/usr/local/include /usr/include ${ASCEND_INCLUDE_DIR})
|
|
link_directories(${ASCEND_LIB_DIR})
|
|
endif()
|
|
|
|
if (USE_ASCEND)
|
|
set(ASCEND_DEVLIB_DIR "${ASCEND_TOOLKIT_ROOT}/devlib")
|
|
link_directories(${ASCEND_DEVLIB_DIR})
|
|
add_compile_definitions(USE_ASCEND)
|
|
endif()
|
|
|
|
if (USE_ASCEND_DIRECT)
|
|
set(BUILD_SHARED_LIBS ON)
|
|
add_compile_definitions(USE_ASCEND_DIRECT)
|
|
endif()
|
|
|
|
if (USE_UBSHMEM)
|
|
set(BUILD_SHARED_LIBS ON)
|
|
add_compile_definitions(USE_UBSHMEM)
|
|
endif()
|
|
|
|
if (USE_ASCEND_HETEROGENEOUS)
|
|
file(GLOB ASCEND_TOOLKIT_ROOT "/usr/local/Ascend/ascend-toolkit/latest/*-linux")
|
|
set(ASCEND_LIB_DIR "${ASCEND_TOOLKIT_ROOT}/lib64")
|
|
set(ASCEND_INCLUDE_DIR "${ASCEND_TOOLKIT_ROOT}/include")
|
|
add_compile_definitions(USE_ASCEND_HETEROGENEOUS)
|
|
include_directories(/usr/local/include /usr/include ${ASCEND_INCLUDE_DIR})
|
|
link_directories(${ASCEND_LIB_DIR})
|
|
endif()
|
|
|
|
if (USE_REDIS)
|
|
add_compile_definitions(USE_REDIS)
|
|
message(STATUS "Redis as metadata server support is enabled")
|
|
endif()
|
|
|
|
if (USE_HTTP)
|
|
add_compile_definitions(USE_HTTP)
|
|
message(STATUS "Http as metadata server support is enabled")
|
|
endif()
|
|
|
|
if (NOT USE_ETCD AND NOT USE_REDIS AND NOT USE_HTTP)
|
|
message(STATUS "None of USE_ETCD, USE_REDIS, USE_HTTP is selected, only \"P2PHANDSHAKE\" is supported as metadata server")
|
|
endif()
|
|
|
|
if (WITH_METRICS)
|
|
add_compile_definitions(WITH_METRICS)
|
|
message(STATUS "metrics is enabled")
|
|
endif()
|
|
|
|
if(USE_3FS)
|
|
add_compile_definitions(USE_3FS)
|
|
message(STATUS "3FS storage backend is enabled")
|
|
endif()
|
|
|
|
if(WITH_NVIDIA_PEERMEM)
|
|
add_compile_definitions(WITH_NVIDIA_PEERMEM)
|
|
endif()
|
|
|
|
set(GFLAGS_USE_TARGET_NAMESPACE "true")
|
|
find_package(yaml-cpp REQUIRED)
|
|
find_package(gflags REQUIRED)
|
|
find_package(yalantinglibs CONFIG REQUIRED)
|
|
add_compile_definitions(YLT_ENABLE_IBV)
|