From 9ed9cd0e3114bcb00764f961047218c2c6d12917 Mon Sep 17 00:00:00 2001 From: gilbertlee-amd <44450918+gilbertlee-amd@users.noreply.github.com> Date: Thu, 4 Aug 2022 18:03:59 -0600 Subject: [PATCH] Fixing CMake to avoid unnecessary git_version relinking (#594) --- CMakeLists.txt | 22 ++++++++++++++-------- cmake/git_version.cmake | 25 +++++++++++++++---------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fd911c9e1..7de3a6fefc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,14 +124,6 @@ include_directories(src/include) include_directories(src/collectives) include_directories(src/collectives/device) -# Create git version file -# _git_version.cpp is a dummy output to force re-run prior to build -ADD_CUSTOM_COMMAND( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/git_version.cpp - ${CMAKE_CURRENT_BINARY_DIR}/_git_version.cpp - COMMAND ${CMAKE_COMMAND} -P - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/git_version.cmake) - if (BUILD_ALLREDUCE_ONLY) add_definitions(-DBUILD_ALLREDUCE_ONLY) set(CU_SOURCES @@ -223,6 +215,20 @@ endforeach(filename) add_library(rccl ${CPP_SOURCES}) +# Create a custom target that creates/updates git_version.cpp +# that executes whenever rccl is built +add_custom_target(git_version_check + COMMENT "Updating git_version.cpp if necessary" + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/git_version.cmake + VERBATIM +) + +# Create a dummy git_version.cpp file in case it doesn't exist +configure_file(src/nccl.h.in ${CMAKE_CURRENT_BINARY_DIR}/git_version.cpp) + +# Execute git_version_check whenever rccl library is built +add_dependencies(rccl git_version_check) + if(TRACE) add_definitions(-DENABLE_TRACE) endif() diff --git a/cmake/git_version.cmake b/cmake/git_version.cmake index 64615af463..10b1af5e3b 100644 --- a/cmake/git_version.cmake +++ b/cmake/git_version.cmake @@ -21,17 +21,22 @@ else() string(STRIP "${GIT_DIFF}" GIT_DIFF) string(STRIP "${GIT_BRANCH}" GIT_BRANCH) - set(GIT_VERSION "const char *rcclGitHash =\"${GIT_BRANCH}:${GIT_REV}${GIT_DIFF}\";") + set(CURR_GIT_VERSION "const char *rcclGitHash =\"${GIT_BRANCH}:${GIT_REV}${GIT_DIFF}\";") endif() -# Compare file with existing file (if any) -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/git_version.cpp) - file(READ ${CMAKE_CURRENT_SOURCE_DIR}/git_version.cpp GIT_VERSION_) +# Compare file with older git version file (git_version.cpp) +if (EXISTS ${CMAKE_CURRENT_BINARY_DIR}/git_version.cpp) + #MESSAGE(STATUS "Found ${CMAKE_CURRENT_BINARY_DIR}/git_version.cpp") + file(READ ${CMAKE_CURRENT_BINARY_DIR}/git_version.cpp PREV_GIT_VERSION) + #message(STATUS "CURR GIT version: ${CURR_GIT_VERSION}") + #message(STATUS "PREV GIT version: ${PREV_GIT_VERSION}") + if (NOT "${CURR_GIT_VERSION}" STREQUAL "${PREV_GIT_VERSION}") + message(STATUS "Updating git_version.cpp") + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/git_version.cpp "${CURR_GIT_VERSION}") + else() + message(STATUS "No changes to git_version.cpp required") + endif() else() - set(GIT_VERSION_ "") -endif() - -# Write updated file -if (NOT "${GIT_VERSION}" STREQUAL "${GIT_VERSION_}") - file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/git_version.cpp "${GIT_VERSION}") + # Create git_version.cpp if it doesn't exist yet + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/git_version.cpp "${GIT_VERSION}") endif()