From 59d7508c2261a8371715b28f663b8b2efbb5a895 Mon Sep 17 00:00:00 2001 From: Randall Spangler Date: Wed, 23 Jan 2013 09:29:54 -0800 Subject: Clean up building code coverage Now 'COV=1 make' will make coverage automagically. Coverage stats are reported separately for the firmware subdirectory, for easier tracking. BUG=chromium-os:38139 BRANCH=none TEST='COV=1 make' then browse to build/coverage/index.html Change-Id: Ie671a82b402beeb17882536f89b9230821fc4d13 Signed-off-by: Randall Spangler Reviewed-on: https://gerrit.chromium.org/gerrit/41824 --- Makefile | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 8f4b9f8a..bb5b91c3 100644 --- a/Makefile +++ b/Makefile @@ -103,11 +103,12 @@ endif # Create / use dependency files CFLAGS += -MMD -MF $@.d -# Code coverage. Run like this: COV=1 make runtests coverage +# Code coverage ifneq (${COV},) -COV_FLAGS = -O0 --coverage -CFLAGS += ${COV_FLAGS} -LDFLAGS += ${COV_FLAGS} + COV_FLAGS = -O0 --coverage + CFLAGS += ${COV_FLAGS} + LDFLAGS += ${COV_FLAGS} + COV_INFO = ${BUILD}/coverage.info endif # And a few more default utilities @@ -505,7 +506,7 @@ _dir_create := $(foreach d, \ # Default target. .PHONY: all -all: fwlib $(if ${FIRMWARE_ARCH},,host_stuff) +all: fwlib $(if ${FIRMWARE_ARCH},,host_stuff) $(if ${COV},coverage) # Host targets .PHONY: host_stuff @@ -522,17 +523,6 @@ clean: .PHONY: install install: cgpt_install utils_install futil_install -# Coverage -# TODO: only if COV=1 -# HEY - depend on runtests? -COV_INFO = ${BUILD}/coverage.info -.PHONY: coverage -coverage: - rm -f ${COV_INFO}* - lcov --capture --directory . --base-directory . -o ${COV_INFO}.1 - lcov --remove ${COV_INFO}.1 '/usr/*' -o ${COV_INFO} - genhtml ${COV_INFO} --output-directory ${BUILD}/coverage - # Don't delete intermediate object files .SECONDARY: @@ -978,3 +968,29 @@ runlongtests: test_setup genkeys genfuzztestcases # ${BUILD}/tests/firmware_rollback_tests # ${BUILD}/tests/kernel_rollback_tests +# Code coverage +.PHONY: coverage_init +coverage_init: test_setup + rm -f ${COV_INFO}* + lcov -c -i -d . -b . -o ${COV_INFO}.initial + +.PHONY: coverage_html +coverage_html: + lcov -c -d . -b . -o ${COV_INFO}.tests + lcov -a ${COV_INFO}.initial -a ${COV_INFO}.tests -o ${COV_INFO}.total + lcov -r ${COV_INFO}.total '/usr/*' '*/linktest/*' -o ${COV_INFO}.local + genhtml ${COV_INFO}.local -o ${BUILD}/coverage + +# Generate addtional coverage stats just for firmware subdir, because the +# per-directory stats for the whole project don't include their own subdirs. + lcov -e ${COV_INFO}.local '${SRCDIR}/firmware/*' \ + -o ${COV_INFO}.firmware + +.PHONY: coverage +ifeq (${COV},) +coverage: + $(error Build coverage like this: make clean && COV=1 make) +else +coverage: coverage_init runtests coverage_html +endif + -- cgit v1.2.1