From cd66f01149a48e98d480006590938b4c90b71c27 Mon Sep 17 00:00:00 2001 From: Thomas Klaehn Date: Mon, 15 Jul 2019 23:55:17 +0200 Subject: [PATCH] Add code coverage report generation --- .gitignore | 2 ++ .vscode/tasks.json | 17 +++++++++++++++++ Makefile | 26 ++++++++++++++++++++------ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index cd42ee3..caab209 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ bin/ obj/ +coverage/ +test.info diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 83891c9..3df34be 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -87,6 +87,23 @@ "kind": "build", "isDefault": true } + }, + { + "label": "coverage", + "type":"shell", + "command": "make coverage", + "problemMatcher": { + "base": "$gcc", + "owner": "gcc", + "fileLocation": [ + "relative", + "${workspaceFolder}" + ] + }, + "group": { + "kind": "build", + "isDefault": true + } } ], "presentation": { diff --git a/Makefile b/Makefile index 5cb3790..ac73f9c 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ TARGET_FILE ?= ftdi_gpio CC = $(CROSS_COMPILE)gcc CPP = $(CROSS_COMPILE)cpp CHECK = cppcheck +LCOV = lcov SRC_DIR = src OBJ_DIR = obj @@ -15,16 +16,17 @@ UNIT_TEST_OBJ_DIR = $(OBJ_DIR)/$(UNIT_TEST_SRC_DIR) INCLUDES := inc INCLUDES += /usr/include/libftdi1 -ifneq "$(findstring $(MAKECMDGOALS), build_unit_test exec_unit_test)" "" +ifneq "$(findstring $(MAKECMDGOALS), build_unit_test exec_unit_test coverage)" "" INCLUDES += test/inc +C_FLAGS += -fprofile-arcs -ftest-coverage +L_FLAGS += -fprofile-arcs -ftest-coverage else LIBS := ftdi1 endif -LD_FLAGS := -C_FLAGS := -O0 -g -Wall -Wextra -Werror -CPP_FLAGS := $(addprefix -I, $(INCLUDES)) -CHECK_CLAGS := --enable=all --template=gcc --error-exitcode=1 --suppress=missingIncludeSystem +C_FLAGS += -O0 -g -Wall -Wextra -Werror +CPP_FLAGS += $(addprefix -I, $(INCLUDES)) +CHECK_FLAGS = --enable=all --template=gcc --error-exitcode=1 --suppress=missingIncludeSystem C_SRCS = $(wildcard $(SRC_DIR)/*.c) C_OBJS = $(patsubst $(SRC_DIR)%,$(OBJ_DIR)%,$(patsubst %.c,%.o,$(C_SRCS))) @@ -42,6 +44,18 @@ THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST)) .PHONY: all all: $(TARGET) +.PHONY: coverage +coverage: $(UNIT_TEST_TARGET) + $(UNIT_TEST_TARGET) + @rm -f $(UNIT_TEST_OBJ_DIR)/*.gcda + @rm -f $(UNIT_TEST_OBJ_DIR)/*.gcno + $(LCOV) -c -d obj -d bin/test/unit/ -d src/ -d test/unit/ -o test.info --no-external + $(eval COVERAGE:=$(shell genhtml -o coverage/html test.info | grep 'lines' | egrep -o '[0-9]+.[0-9]+%')) + @echo + @echo Line coverage: $(COVERAGE) + @echo + + .PHONY: unit_test build_unit_test: $(UNIT_TEST_TARGET) @@ -51,7 +65,7 @@ exec_unit_test: $(UNIT_TEST_TARGET) .PHONY: check check: $(C_SRCS) - $(CHECK) $(CPP_FLAGS) $(CHECK_CLAGS) $(C_SRCS) + $(CHECK) $(CPP_FLAGS) $(CHECK_FLAGS) $(C_SRCS) $(UNIT_TEST_TARGET): $(UNIT_TEST_OBJS) $(THIS_MAKEFILE) @mkdir -p $(BIN_DIR)/$(UNIT_TEST_SRC_DIR)