sglang.0.4.8.post1/nvshmem_src/CMakeLists.txt

164 lines
5.3 KiB
CMake

cmake_minimum_required(VERSION 3.19)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_config")
include(NVSHMEMEnv)
include(CMakePackageConfigHelpers)
enable_testing()
if (NVSHMEM_DEBUG)
message(STATUS "Setting build type to Debug as requested by the environment.")
set(CMAKE_BUILD_TYPE "debug" CACHE STRING "Choose the type of build." FORCE)
endif()
set(default_build_type "release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
endif()
# Set the possible values of build type
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "debug" "release"
"MinSizeRel" "RelWithDebInfo")
## CUDA Selection Start
# Allow users to set the CUDA toolkit through the env.
if(NOT CUDAToolkit_Root AND NOT CMAKE_CUDA_COMPILER)
message(STATUS "CUDA_HOME: ${CUDA_HOME}")
set(CUDAToolkit_Root ${CUDA_HOME} CACHE PATH "Root of Cuda Toolkit." FORCE)
set(CMAKE_CUDA_COMPILER "${CUDA_HOME}/bin/nvcc" CACHE PATH "Root of Cuda Toolkit." FORCE)
endif()
# Save value of CMAKE_CUDA_ARCHITECTURES before calling project()
# This is to solve a chicken-egg problem. It seems FIND_CUDA doesn't
# work without project(), but project() overwrites CMAKE_CUDA_ARCHITECTURES.
# We need to know the version of the CUDA Toolkit before we can set the project
# defaults. So this lets us know beforehand if the user has specified a preference.
if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
set(CMAKE_CUDA_ARCHITECTURES_UNDEFINED 1)
endif()
if (NOT DEFINED CUDA_ARCHITECTURES)
set(CUDA_ARCHITECTURES_UNDEFINED 1)
endif()
project(
NVSHMEM
LANGUAGES CUDA CXX C
VERSION 3.2.5.1
)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${NVSHMEM_PREFIX}")
endif()
find_package(CUDAToolkit)
if(DEFINED CMAKE_CUDA_ARCHITECTURES_UNDEFINED)
if(NOT DEFINED CUDA_ARCHITECTURES_UNDEFINED)
set(CMAKE_CUDA_ARCHITECTURES ${CUDA_ARCHITECTURES} CACHE STRING "CUDA ARCHITECTURES" FORCE)
else()
if(CUDAToolkit_VERSION_MAJOR LESS 11)
set(CMAKE_CUDA_ARCHITECTURES "70" CACHE STRING "CUDA ARCHITECTURES" FORCE)
elseif(CUDAToolkit_VERSION_MAJOR EQUAL 11 AND CUDAToolkit_VERSION_MINOR LESS 8)
set(CMAKE_CUDA_ARCHITECTURES "70-real;80" CACHE STRING "CUDA ARCHITECTURES" FORCE)
elseif(CUDAToolkit_VERSION_MAJOR EQUAL 11 OR (CUDAToolkit_VERSION_MAJOR EQUAL 12 AND CUDAToolkit_VERSION_MINOR LESS 8))
set(CMAKE_CUDA_ARCHITECTURES "70-real;80-real;90" CACHE STRING "CUDA ARCHITECTURES" FORCE)
else()
set(CMAKE_CUDA_ARCHITECTURES "70-real;80-real;90-real;100" CACHE STRING "CUDA ARCHITECTURES" FORCE)
endif()
endif()
endif()
message(STATUS "CMAKE_CUDA_ARCHITECTURES: ${CMAKE_CUDA_ARCHITECTURES}")
## CUDA Selection End
## Find Packages Start
if(NVSHMEM_UCX_SUPPORT)
find_package(UCX PATHS ${UCX_HOME} REQUIRED)
endif()
if(NVSHMEM_BUILD_BITCODE_LIBRARY)
if(NVSHMEM_CLANG_DIR)
find_package(Clang CONFIG PATHS ${NVSHMEM_CLANG_DIR} NO_DEFAULT_PATH REQUIRED)
else()
find_package(Clang CONFIG REQUIRED)
endif()
endif()
if(NVSHMEM_MPI_SUPPORT)
find_package(MPI REQUIRED)
endif()
# Find the internal nccl.h file first.
if(NVSHMEM_USE_NCCL)
find_path(
NCCL_INCLUDE nccl.h
HINTS ${CMAKE_SOURCE_DIR} ${NCCL_HOME}
PATH_SUFFIXES include_nccl include lib64
)
endif()
if(NVSHMEM_USE_GDRCOPY)
find_path(
GDRCOPY_INCLUDE gdrapi.h
PATHS /usr/local/gdrcopy /usr/local/gdrdrv ${CMAKE_SOURCE_DIR}
HINTS ${CMAKE_SOURCE_DIR} /usr/local/gdrcopy /usr/local/gdrdrv ${GDRCOPY_HOME}
PATH_SUFFIXES include_gdrcopy include
)
endif()
if(NVSHMEM_SHMEM_SUPPORT)
find_library(
SHMEM_LIB
NAMES oshmem
HINTS ${SHMEM_HOME}
PATH_SUFFIXES lib lib64)
find_path(SHMEM_INCLUDE NAME shmem.h HINTS ${SHMEM_HOME}
PATH_SUFFIXES include
)
add_library(shmem IMPORTED INTERFACE)
target_link_libraries(shmem INTERFACE ${SHMEM_LIB})
target_include_directories(shmem INTERFACE ${SHMEM_INCLUDE})
if(NVSHMEM_MPI_SUPPORT)
separate_arguments(SHMEM_C_LINK_FLAGS NATIVE_COMMAND "${MPI_C_LINK_FLAGS}")
target_link_options(shmem INTERFACE ${SHMEM_C_LINK_FLAGS})
target_compile_definitions(shmem INTERFACE ${MPI_C_COMPILE_DEFINITIONS})
target_compile_options(shmem INTERFACE ${MPI_C_COMPILE_OPTIONS})
endif()
endif()
## Find Packages End
# set these flags to add a RUNPATH entry to the libraries that points at the lib dir in a portable way.
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "$\{ORIGIN\}")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags")
cmake_policy(SET CMP0105 NEW)
set(CMAKE_CUDA_DEVICE_COMPILER_WRAPPER_FLAG "")
configure_file(License.txt License.txt COPYONLY)
set(INCLUDE_INSTALL_DIR include/)
set(LIB_INSTALL_DIR lib/)
set(BIN_INSTALL_DIR bin/)
configure_package_config_file(
${CMAKE_SOURCE_DIR}/cmake_config/NVSHMEMConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/NVSHMEMConfig.cmake
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/cmake/nvshmem
PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR BIN_INSTALL_DIR)
write_basic_package_version_file(
NVSHMEMVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion)
add_subdirectory(src)