From 7dffb0da73cdf3fa70226b10bf5b1688057a7d43 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Wed, 3 May 2023 01:17:11 +0200 Subject: [PATCH] make git build info work with submodules --- CMakeLists.txt | 30 +++++++++++++++++++----------- scripts/build-info.cmake | 2 +- scripts/build-info.h.in | 7 +++++++ 3 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 scripts/build-info.h.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 7194f5ba5..48e3238df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,23 +76,31 @@ option(LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE}) # Build info header # -# Write header template to binary dir to keep source directory clean -file(WRITE "${CMAKE_BINARY_DIR}/BUILD_INFO.h.in" "\ -#ifndef BUILD_INFO_H\n\ -#define BUILD_INFO_H\n\ -\n\ -#define BUILD_NUMBER @BUILD_NUMBER@\n\ -#define BUILD_COMMIT \"@BUILD_COMMIT@\"\n\ -\n\ -#endif // BUILD_INFO_H\n\ -") - # Generate initial build-info.h include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.cmake) if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.git") + + # Is git submodule + if(NOT IS_DIRECTORY "${GIT_DIR}") + file(READ ${GIT_DIR} REAL_GIT_DIR_LINK) + string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${REAL_GIT_DIR_LINK}) + set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${REAL_GIT_DIR}") + endif() + # Add a custom target for build-info.h add_custom_target(BUILD_INFO ALL DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h") + + # Add a custom command to rebuild build-info.h when .git/index changes + add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h" + COMMENT "Generating build details from Git" + COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.cmake" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS "${GIT_DIR}/index" + VERBATIM + ) else() message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.") endif() diff --git a/scripts/build-info.cmake b/scripts/build-info.cmake index fb46ed2b5..5023b77ab 100644 --- a/scripts/build-info.cmake +++ b/scripts/build-info.cmake @@ -1,4 +1,4 @@ -set(TEMPLATE_FILE "${CMAKE_BINARY_DIR}/BUILD_INFO.h.in") +set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.h.in") set(HEADER_FILE "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h") set(BUILD_NUMBER 0) set(BUILD_COMMIT "unknown") diff --git a/scripts/build-info.h.in b/scripts/build-info.h.in new file mode 100644 index 000000000..75d1e16fd --- /dev/null +++ b/scripts/build-info.h.in @@ -0,0 +1,7 @@ +#ifndef BUILD_INFO_H +#define BUILD_INFO_H + +#define BUILD_NUMBER @BUILD_NUMBER@ +#define BUILD_COMMIT "@BUILD_COMMIT@" + +#endif // BUILD_INFO_H