From 86be901d98141188b36d19cc8ddee82f1f95cf45 Mon Sep 17 00:00:00 2001 From: Olli Saarikivi Date: Fri, 5 May 2023 19:11:33 +0000 Subject: [PATCH] CMake improvements --- CMakeLists.txt | 38 +++++++++++++-------------- cmake/AddClangFormatTargets.cmake | 18 +++++++++++++ cmake/{modules => }/FindGDRCopy.cmake | 0 cmake/{modules => }/FindIBVerbs.cmake | 0 cmake/{modules => }/FindNUMA.cmake | 0 tests/CMakeLists.txt | 18 ++++++++----- tests/unittests/CMakeLists.txt | 4 +-- 7 files changed, 50 insertions(+), 28 deletions(-) create mode 100644 cmake/AddClangFormatTargets.cmake rename cmake/{modules => }/FindGDRCopy.cmake (100%) rename cmake/{modules => }/FindIBVerbs.cmake (100%) rename cmake/{modules => }/FindNUMA.cmake (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 106b605c..ad71de86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/cmake/AddClangFormatTargets.cmake b/cmake/AddClangFormatTargets.cmake new file mode 100644 index 00000000..3bb3f73e --- /dev/null +++ b/cmake/AddClangFormatTargets.cmake @@ -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() diff --git a/cmake/modules/FindGDRCopy.cmake b/cmake/FindGDRCopy.cmake similarity index 100% rename from cmake/modules/FindGDRCopy.cmake rename to cmake/FindGDRCopy.cmake diff --git a/cmake/modules/FindIBVerbs.cmake b/cmake/FindIBVerbs.cmake similarity index 100% rename from cmake/modules/FindIBVerbs.cmake rename to cmake/FindIBVerbs.cmake diff --git a/cmake/modules/FindNUMA.cmake b/cmake/FindNUMA.cmake similarity index 100% rename from cmake/modules/FindNUMA.cmake rename to cmake/FindNUMA.cmake diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b6ee63c7..17875d69 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -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) diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 85f87f52..44e405ad 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -1,2 +1,2 @@ -add_executable(ib_test ib_test.cc) -target_link_libraries(ib_test mscclpp MPI::MPI_CXX CUDA::cudart) \ No newline at end of file +add_test_executable(ib_test ib_test.cc) +target_link_libraries(ib_test CUDA::cudart) \ No newline at end of file