From 8272f4aed803eb3caa794e8d2d01431727004026 Mon Sep 17 00:00:00 2001 From: Danny Daemonic Date: Sat, 29 Apr 2023 05:55:22 -0700 Subject: [PATCH] Add git-based build information for better issue tracking --- .gitignore | 1 + CMakeLists.txt | 52 ++++++++++++++++++++++++++++++++++++ Makefile | 20 +++++++++++++- examples/main/CMakeLists.txt | 1 + examples/main/main.cpp | 9 ++++++- 5 files changed, 81 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 565866fd4..e479c6180 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ models/* /vdot /Pipfile +build-info.h arm_neon.h compile_commands.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 098306126..771bd180d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,58 @@ option(LLAMA_CLBLAST "llama: use CLBlast" option(LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE}) option(LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE}) +# +# Build info header +# + +file(WRITE ${CMAKE_BINARY_DIR}/BUILD_INFO.cmake "\ +set(HEAD \"unknown\") +set(COUNT 0) + +find_package(Git) +if(Git_FOUND) + execute_process( + COMMAND \${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE TEMP_HEAD + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_HEAD_RESULT + ) + execute_process( + COMMAND \${GIT_EXECUTABLE} rev-list --count HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE TEMP_COUNT + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_COUNT_RESULT + ) + if(GIT_HEAD_RESULT EQUAL 0 AND GIT_COUNT_RESULT EQUAL 0) + set(HEAD \${TEMP_HEAD}) + set(COUNT \${TEMP_COUNT}) + endif() +endif() + +file(WRITE \"${CMAKE_SOURCE_DIR}/build-info.h\" \"#pragma once\\n#define BUILD_NUMBER \${COUNT}\\n#define BUILD_BRANCH \\\"\${HEAD}\\\"\\n\") +") + +# Call the script to generate build-info.h initially +execute_process( + COMMAND ${CMAKE_COMMAND} -DGIT_EXECUTABLE=${GIT_EXECUTABLE} -P ${CMAKE_BINARY_DIR}/BUILD_INFO.cmake +) + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + # Add a custom target to regenerate build-info.h when .git/index changes + add_custom_target(BUILD_INFO ALL DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h") + + # Add a custom command to generate build-info.h when .git/index changes + add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h" + COMMENT "Updating build-info.h" + COMMAND ${CMAKE_COMMAND} -DGIT_EXECUTABLE=${GIT_EXECUTABLE} -P ${CMAKE_BINARY_DIR}/BUILD_INFO.cmake + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/.git/index" + VERBATIM + ) +endif() + # # Compile flags # diff --git a/Makefile b/Makefile index 1d62a4438..2d3cb67b7 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,8 @@ endif CCV := $(shell $(CC) --version | head -n 1) CXXV := $(shell $(CXX) --version | head -n 1) +GIT_INDEX = $(wildcard .git/index) + # Mac OS + Arm can report x86_64 # ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789 ifeq ($(UNAME_S),Darwin) @@ -184,7 +186,23 @@ common.o: examples/common.cpp examples/common.h clean: rm -vf *.o main quantize quantize-stats perplexity embedding benchmark-matmult -main: examples/main/main.cpp ggml.o llama.o common.o $(OBJS) +build-info.h: $(GIT_INDEX) + @BUILD_NUMBER=`git rev-list HEAD --count 2>/dev/null`;\ + BUILD_BRANCH=`git rev-parse --abbrev-ref HEAD 2>/dev/null`;\ + if [ -z "$$BUILD_NUMBER" ] || [ -z "$$BUILD_BRANCH" ]; then\ + BUILD_NUMBER="0";\ + BUILD_BRANCH="unknown";\ + fi;\ + echo "#ifndef BUILD_INFO_H" > $@;\ + echo "#define BUILD_INFO_H" >> $@;\ + echo "" >> $@;\ + echo "#define BUILD_NUMBER $$BUILD_NUMBER" >> $@;\ + echo "#define BUILD_BRANCH \"$$BUILD_BRANCH\"" >> $@;\ + echo "" >> $@;\ + echo "#endif // BUILD_INFO_H" >> $@; + + +main: examples/main/main.cpp build-info.h ggml.o llama.o common.o $(OBJS) $(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) @echo @echo '==== Run ./main -h for help. ====' diff --git a/examples/main/CMakeLists.txt b/examples/main/CMakeLists.txt index b2dcc2910..e696468ef 100644 --- a/examples/main/CMakeLists.txt +++ b/examples/main/CMakeLists.txt @@ -2,3 +2,4 @@ set(TARGET main) add_executable(${TARGET} main.cpp) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) +add_dependencies(${TARGET} BUILD_INFO) diff --git a/examples/main/main.cpp b/examples/main/main.cpp index 990d0fa02..11f7fb646 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -5,6 +5,7 @@ #include "common.h" #include "llama.h" +#include "build-info.h" #include #include @@ -81,11 +82,17 @@ int main(int argc, char ** argv) { "expect poor results\n", __func__, params.n_ctx); } + if (strcmp(BUILD_BRANCH, "master") == 0) { + fprintf(stderr, "%s: build = %d\n", __func__, BUILD_NUMBER); + } else { + fprintf(stderr, "%s: build = %s-%d\n", __func__, BUILD_BRANCH, BUILD_NUMBER); + } + if (params.seed <= 0) { params.seed = time(NULL); } - fprintf(stderr, "%s: seed = %d\n", __func__, params.seed); + fprintf(stderr, "%s: seed = %d\n", __func__, params.seed); std::mt19937 rng(params.seed); if (params.random_prompt) {