--- /dev/null
+name: Code Coverage
+on: [push, pull_request]
+
+env:
+ GGML_NLOOP: 3
+ GGML_N_THREADS: 1
+
+jobs:
+ run:
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install build-essential gcc-8 lcov
+
+ - name: Build
+ run: CC=gcc-8 make -j LLAMA_CODE_COVERAGE=1 tests
+
+ - name: Run tests
+ run: CC=gcc-8 make test
+
+ - name: Generate coverage report
+ run: |
+ make coverage
+ make lcov-report
+
+ - name: Upload coverage to Codecov
+ uses: codecov/codecov-action@v3
+ env:
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
+ with:
+ files: lcov-report/coverage.info
# Binaries only useful for tests
TEST_TARGETS = tests/test-llama-grammar tests/test-grammar-parser tests/test-double-float tests/test-grad0 tests/test-opt tests/test-quantize-fns tests/test-quantize-perf tests/test-sampling tests/test-tokenizer-0-llama tests/test-tokenizer-0-falcon tests/test-tokenizer-1
+# Code coverage output files
+COV_TARGETS = *.gcno tests/*.gcno *.gcda tests/*.gcda *.gcov tests/*.gcov lcov-report gcovr-report
+
default: $(BUILD_TARGETS)
test:
all: $(BUILD_TARGETS) $(TEST_TARGETS)
+coverage: ## Run code coverage
+ gcov -pb tests/*.cpp
+
+lcov-report: coverage ## Generate lcov report
+ mkdir -p lcov-report
+ lcov --capture --directory . --output-file lcov-report/coverage.info
+ genhtml lcov-report/coverage.info --output-directory lcov-report
+
+gcovr-report: coverage ## Generate gcovr report
+ mkdir -p gcovr-report
+ gcovr --root . --html --html-details --output gcovr-report/coverage.html
+
ifndef UNAME_S
UNAME_S := $(shell uname -s)
endif
MK_CPPFLAGS += -DSERVER_VERBOSE=$(LLAMA_SERVER_VERBOSE)
endif
+
+ifdef LLAMA_CODE_COVERAGE
+ CXXFLAGS += -fprofile-arcs -ftest-coverage -dumpbase ''
+endif
+
ifdef LLAMA_DISABLE_LOGS
CFLAGS += -DLOG_DISABLE_LOGS
CXXFLAGS += -DLOG_DISABLE_LOGS
$(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS)
clean:
- rm -vf *.o tests/*.o *.so *.dll benchmark-matmult build-info.h $(BUILD_TARGETS) $(TEST_TARGETS)
+ rm -vrf *.o tests/*.o *.so *.dll benchmark-matmult build-info.h *.dot $(COV_TARGETS) $(BUILD_TARGETS) $(TEST_TARGETS)
#
# Examples