summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon <alonfaraj@gmail.com>2023-09-03 11:48:49 +0300
committerGitHub <noreply@github.com>2023-09-03 11:48:49 +0300
commitafc43d5f82588d2ed71ea104e8262f5e5da13980 (patch)
tree821fe53832417af49caf59f3ea0643a77b425f15
parent6460f758dbd472653296044d36bed8c4554988f5 (diff)
cov : add Code Coverage and codecov.io integration (#2928)
* update .gitignore * makefile: add coverage support (lcov, gcovr) * add code-coverage workflow * update code coverage workflow * wun on ubuntu 20.04 * use gcc-8 * check why the job hang * add env vars * add LLAMA_CODE_COVERAGE=1 again * - add CODECOV_TOKEN - add missing make lcov-report * install lcov * update make file -pb flag * remove unused GGML_NITER from workflows * wrap coverage output files in COV_TARGETS
-rw-r--r--.github/workflows/build.yml1
-rw-r--r--.github/workflows/code-coverage.yml36
-rw-r--r--.gitignore7
-rw-r--r--Makefile22
4 files changed, 64 insertions, 2 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 20fd8c2b..9d0a6c22 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -18,7 +18,6 @@ on:
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
GGML_NLOOP: 3
- GGML_NITER: 1
GGML_N_THREADS: 1
jobs:
diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml
new file mode 100644
index 00000000..392db8a0
--- /dev/null
+++ b/.github/workflows/code-coverage.yml
@@ -0,0 +1,36 @@
+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
diff --git a/.gitignore b/.gitignore
index 8b5f45a2..f9244fad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,10 @@
*.exe
*.dll
*.log
+*.gcov
+*.gcno
+*.gcda
+*.dot
.DS_Store
.build/
.cache/
@@ -17,6 +21,9 @@
.vs/
.vscode/
+lcov-report/
+gcovr-report/
+
build*/
out/
tmp/
diff --git a/Makefile b/Makefile
index e214970f..c042bf0e 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,9 @@ BUILD_TARGETS = main quantize quantize-stats perplexity embedding vdot train-tex
# 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:
@@ -23,6 +26,18 @@ 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
@@ -84,6 +99,11 @@ ifdef LLAMA_SERVER_VERBOSE
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
@@ -399,7 +419,7 @@ libllama.so: llama.o ggml.o $(OBJS)
$(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