CMake improvements

This commit is contained in:
Olli Saarikivi
2023-05-05 19:11:33 +00:00
parent 051643b4c2
commit 86be901d98
7 changed files with 50 additions and 28 deletions

View File

@@ -1,41 +1,41 @@
cmake_minimum_required(VERSION 3.26)
project(mscclpp LANGUAGES CUDA CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CUDA_STANDARD 17)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules)
option(ENABLE_TRACE "Enable tracing" OFF)
option(USE_MPI_FOR_TESTS "Use MPI for tests" ON)
option(USE_NPKIT "Use NPKIT" ON)
option(ALLOW_GDRCOPY "Use GDRCopy, if available" OFF)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(CUDAToolkit REQUIRED)
find_package(IBVerbs REQUIRED)
find_package(NUMA REQUIRED)
find_package(GDRCopy)
option(USE_MPI_FOR_TESTS "Use MPI for tests" ON)
if(USE_MPI_FOR_TESTS)
find_package(MPI REQUIRED)
add_definitions(-DMSCCLPP_USE_MPI_FOR_TESTS)
endif()
if(ALLOW_GDRCOPY)
find_package(GDRCopy)
endif()
include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
set(CLANG_FORMAT_SOURCE_DIRS src tests)
include(${PROJECT_SOURCE_DIR}/cmake/AddClangFormatTargets.cmake)
add_library(mscclpp SHARED)
target_include_directories(mscclpp PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/include)
set_target_properties(mscclpp PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(mscclpp PRIVATE MSCCLPP::ibverbs MSCCLPP::numa CUDA::cudart CUDA::cuda_driver)
if(GDRCOPY_FOUND)
target_link_libraries(mscclpp PRIVATE MSCCLPP::gdrcopy)
if(ENABLE_TRACE)
target_compile_definitions(mscclpp PRIVATE ENABLE_TRACE)
endif()
find_program(CLANG_FORMAT clang-format)
if(CLANG_FORMAT)
message(STATUS "Found clang-format: ${CLANG_FORMAT}")
file(GLOB_RECURSE ALL_SOURCES *.h *.hpp *.cc *.cpp *.cu)
add_custom_target(check-format ALL COMMAND ${CLANG_FORMAT} --dry-run ${ALL_SOURCES})
add_custom_target(format COMMAND ${CLANG_FORMAT} -i ${ALL_SOURCES})
else()
message(STATUS "clang-format not found.")
if(USE_NPKIT)
target_compile_definitions(mscclpp PRIVATE ENABLE_NPKIT)
endif()
if(ALLOW_GDRCOPY AND GDRCOPY_FOUND)
target_compile_definitions(mscclpp PRIVATE MSCCLPP_USE_GDRCOPY)
target_link_libraries(mscclpp PRIVATE MSCCLPP::gdrcopy)
endif()
add_subdirectory(src) # This adds the sources to the mscclpp target

View File

@@ -0,0 +1,18 @@
# Add targets to run clang-format
find_program(CLANG_FORMAT clang-format)
if(CLANG_FORMAT)
message(STATUS "Found clang-format: ${CLANG_FORMAT}")
set(CLANG_FORMAT_FILE_TYPES *.h *.hpp *.c *.cc *.cpp *.cu)
# Produce combinations of source directories and file types
foreach(SOURCE_DIR ${CLANG_FORMAT_SOURCE_DIRS})
foreach(FILE_TYPE ${CLANG_FORMAT_FILE_TYPES})
list(APPEND CLANG_FORMAT_SOURCE_PATTERNS ${SOURCE_DIR}/${FILE_TYPE})
endforeach()
endforeach()
file(GLOB_RECURSE CLANG_FORMAT_SOURCES ${CLANG_FORMAT_SOURCE_PATTERNS})
add_custom_target(check-format ALL COMMAND ${CLANG_FORMAT} --dry-run ${CLANG_FORMAT_SOURCES})
add_custom_target(format COMMAND ${CLANG_FORMAT} -i ${CLANG_FORMAT_SOURCES})
else()
message(STATUS "clang-format not found.")
endif()

View File

@@ -1,10 +1,14 @@
add_executable(bootstrap_test_cpp bootstrap_test_cpp.cc)
target_link_libraries(bootstrap_test_cpp mscclpp MPI::MPI_CXX)
function(add_test_executable name sources)
add_executable(${name} ${sources})
target_link_libraries(${name} mscclpp)
if(USE_MPI_FOR_TESTS)
target_link_libraries(${name} MPI::MPI_CXX)
target_compile_definitions(${name} PRIVATE MSCCLPP_USE_MPI_FOR_TESTS)
endif()
endfunction()
add_executable(communicator_test_cpp communicator_test_cpp.cu)
target_link_libraries(communicator_test_cpp mscclpp MPI::MPI_CXX)
add_executable(allgather_test_cpp allgather_test_cpp.cu)
target_link_libraries(allgather_test_cpp mscclpp MPI::MPI_CXX)
add_test_executable(bootstrap_test_cpp bootstrap_test_cpp.cc)
add_test_executable(communicator_test_cpp communicator_test_cpp.cu)
add_test_executable(allgather_test_cpp allgather_test_cpp.cu)
add_subdirectory(unittests)

View File

@@ -1,2 +1,2 @@
add_executable(ib_test ib_test.cc)
target_link_libraries(ib_test mscclpp MPI::MPI_CXX CUDA::cudart)
add_test_executable(ib_test ib_test.cc)
target_link_libraries(ib_test CUDA::cudart)