From 77c662abdd66b35e8c2b41e95e9ee99037e1b2d0 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 13 Jan 2019 01:41:25 +0000 Subject: [PATCH] Add coverage to makefile --- .gitignore | 3 ++- Makefile | 22 ++++++++++++++++++++-- llarp/ev/ev_kqueue.hpp | 10 +++++----- readme.md | 15 ++++++++------- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 8103521d0..1be4c5204 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,5 @@ rapidjson/ .idea .vscode build64/ -build2/ \ No newline at end of file +build2/ +default.profraw diff --git a/Makefile b/Makefile index d80a62fc6..5e670c314 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,8 @@ CROSS ?= OFF # build liblokinet-shared.so SHARED_LIB ?= ON # enable generating coverage -COVERAGE =? OFF +COVERAGE ?= OFF +COVERAGE_OUTDIR ?= "$(TMPDIR)/lokinet-coverage" # cmake generator type CMAKE_GEN ?= Unix Makefiles @@ -69,10 +70,12 @@ BUILD_ROOT = $(REPO)/build SCAN_BUILD ?= scan-build -CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSING_CLANG=$(CLANG) -DSTATIC_LINK=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=$(COVERAGE) '$(REPO)'") +CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSING_CLANG=$(CLANG) -DSTATIC_LINK=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) '$(REPO)'") ANALYZE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "$(SCAN_BUILD) cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSING_CLANG=$(CLANG) -DSTATIC_LINK=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) '$(REPO)'") +COVERAGE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSING_CLANG=$(CLANG) -DSTATIC_LINK=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=yes '$(REPO)'") + TARGETS = $(REPO)/lokinet SIGS = $(TARGETS:=.sig) EXE = $(BUILD_ROOT)/lokinet @@ -194,6 +197,21 @@ analyze-config: clean analyze: analyze-config cd '$(BUILD_ROOT)' && $(SCAN_BUILD) $(MAKE) +coverage-config: clean + mkdir -p '$(BUILD_ROOT)' + $(COVERAGE_CONFIG_CMD) + +coverage: coverage-config + $(MAKE) -C $(BUILD_ROOT) -j 12 + $(TEST_EXE) || true # continue even if tests fail + mkdir -p "$(COVERAGE_OUTDIR)" +ifeq ($(CLANG),OFF) + gcovr -r . --branches --html --html-details -o "$(COVERAGE_OUTDIR)/lokinet.html" +else + llvm-profdata merge default.profraw -output $(BUILD_ROOT)/profdata + llvm-cov show -format=html -output-dir="$(COVERAGE_OUTDIR)" -instr-profile "$(BUILD_ROOT)/profdata" "$(BUILD_ROOT)/testAll" $(shell find ./llarp -type f) +endif + lint: $(LINT_CHECK) %.cpp-check: %.cpp diff --git a/llarp/ev/ev_kqueue.hpp b/llarp/ev/ev_kqueue.hpp index 8edd93382..ba3adfcf6 100644 --- a/llarp/ev/ev_kqueue.hpp +++ b/llarp/ev/ev_kqueue.hpp @@ -21,7 +21,7 @@ namespace llarp { - int + inline int tcp_conn::read(byte_t* buf, size_t sz) { if(sz == 0) @@ -53,14 +53,14 @@ namespace llarp return 0; } - void + inline void tcp_conn::flush_write() { connected(); ev_io::flush_write(); } - ssize_t + inline ssize_t tcp_conn::do_write(void* buf, size_t sz) { if(_shouldClose) @@ -74,7 +74,7 @@ namespace llarp #endif } - void + inline void tcp_conn::connect() { socklen_t slen = sizeof(sockaddr_in); @@ -100,7 +100,7 @@ namespace llarp } } - int + inline int tcp_serv::read(byte_t*, size_t) { int new_fd = ::accept(fd, nullptr, nullptr); diff --git a/readme.md b/readme.md index 914360a26..044c370b2 100644 --- a/readme.md +++ b/readme.md @@ -16,6 +16,7 @@ Build requirements: * CMake * C++ 17 capable C++ compiler * rapidjson (if enabling jsonrpc server) +* gcovr (if generating test coverage with gcc) ### Linux @@ -27,22 +28,22 @@ build: $ make -j8 install: - + $ sudo make install ### FreeBSD -build: +build: $ pkg install wget cmake git $ git clone https://github.com/loki-project/loki-network $ cd loki-network $ gmake -j8 - + install (root): - - # gmake install + + # gmake install ## Windows @@ -55,10 +56,10 @@ build (where `$ARCH` is your platform - `i686` or `x86_64`): $ cmake .. -DCMAKE_BUILD_TYPE=[Debug|Release] -DSTATIC_LINK=ON -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DDNS_PORT=53 -G 'Unix Makefiles' install (elevated) to `$PROGRAMFILES/lokinet` or `$ProgramFiles(x86)/lokinet`: - + $ make install -if cross-compiling, install mingw-w64 from your distro's package manager, or [build from source](https://sourceforge.net/p/mingw-w64/wiki2/Cross%20Win32%20and%20Win64%20compiler/), then: +if cross-compiling, install mingw-w64 from your distro's package manager, or [build from source](https://sourceforge.net/p/mingw-w64/wiki2/Cross%20Win32%20and%20Win64%20compiler/), then: $ mkdir -p build; cd build $ export COMPILER=clang # if using clang for windows