Add git-based build information for better issue tracking

This commit is contained in:
Danny Daemonic 2023-04-29 05:55:22 -07:00
parent 7ff0dcd320
commit 8272f4aed8
5 changed files with 81 additions and 2 deletions

1
.gitignore vendored
View file

@ -32,6 +32,7 @@ models/*
/vdot
/Pipfile
build-info.h
arm_neon.h
compile_commands.json

View file

@ -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
#

View file

@ -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. ===='

View file

@ -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)

View file

@ -5,6 +5,7 @@
#include "common.h"
#include "llama.h"
#include "build-info.h"
#include <cassert>
#include <cinttypes>
@ -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) {