summaryrefslogtreecommitdiff
path: root/Makefile.rules
diff options
context:
space:
mode:
authorPaul Fagerburg <pfagerburg@google.com>2020-06-11 10:51:19 -0600
committerCommit Bot <commit-bot@chromium.org>2020-06-12 21:20:29 +0000
commit776fe3f999e637f6ae00a52aba88d4c2df0f25dc (patch)
tree61377ee064eaeb6faf8c98a3585d0a61981cb5c3 /Makefile.rules
parentabf6b6e1d502101ccae25b500811d87925feaa2c (diff)
downloadchrome-ec-776fe3f999e637f6ae00a52aba88d4c2df0f25dc.tar.gz
makefile: use separate directory for code coverage
When building host-based unit tests for code coverage, put the build outputs in a different directory. Because the code coverage build has calls into gcov library functions, a partial rebuild without code coverage will result in undefined linker errors. The previous solution was an inefficient cycle of `make clobber` and full rebuild when switching between building with and without code coverage. BUG=b:157091606 BRANCH=None TEST=`make buildall -j ; make coverage -j` Verify that build/host and build/coverage both exist, and that code coverage data (*.gcno, *.gcda, *.info) is only in build/coverage. Signed-off-by: Paul Fagerburg <pfagerburg@google.com> Change-Id: Iac0b18068082d34546aa15b174f86efb6a7f41a7 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2242351 Tested-by: Paul Fagerburg <pfagerburg@chromium.org> Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Commit-Queue: Paul Fagerburg <pfagerburg@chromium.org>
Diffstat (limited to 'Makefile.rules')
-rw-r--r--Makefile.rules22
1 files changed, 18 insertions, 4 deletions
diff --git a/Makefile.rules b/Makefile.rules
index c40b6623a4..074564f051 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -112,7 +112,9 @@ cmd_host_test = $(MAKE) BOARD=host PROJECT=$* \
V=$(V) out=build/host/$* TEST_BUILD=y EMU_BUILD=y CROSS_COMPILE= \
$(if $(TEST_SCRIPT),TEST_SCRIPT=$(TEST_SCRIPT)) $(TEST_FLAG) \
build/host/$*/$*.exe
+cmd_coverage_test = $(subst build/host,build/coverage,$(cmd_host_test))
cmd_run_host_test = ./util/run_host_test $* $(silent)
+cmd_run_coverage_test = ./util/run_host_test --coverage $* $(silent)
# generate new version.h, compare if it changed and replace if so
cmd_version = ./util/getversion.sh > $@.tmp && \
cmp -s $@.tmp $@ && rm -f $@.tmp || mv $@.tmp $@
@@ -303,6 +305,18 @@ $(run-test-targets): run-%: host-%
$(call quiet,run_host_test,TEST )
@rm -f $(FAILED_BOARDS_DIR)/test-$*
+host-coverage-targets=$(foreach t,$(test-list-host),host-coverage-$(t))
+run-coverage-targets=$(foreach t,$(test-list-host),run-coverage-$(t))
+.PHONY: $(host-coverage-targets) $(run-coverage-targets)
+
+$(host-coverage-targets): host-coverage-%: | $(FAILED_BOARDS_DIR)
+ @touch $(FAILED_BOARDS_DIR)/test-$*
+ +$(call quiet,coverage_test,BUILD )
+
+$(run-coverage-targets): run-coverage-%: host-coverage-%
+ $(call quiet,run_coverage_test,TEST )
+ @rm -f $(FAILED_BOARDS_DIR)/test-$*
+
.PHONY: print-host-tests
print-host-tests:
$(call cmd_pretty_print_list, \
@@ -377,13 +391,13 @@ $(foreach b, $(cts_boards), \
) \
)
-cov-test-targets=$(foreach t,$(cov-test-list-host),build/host/$(t).info)
+cov-test-targets=$(foreach t,$(cov-test-list-host),build/coverage/$(t).info)
bldversion=$(shell (./util/getversion.sh ; echo VERSION) | $(CPP) -P -)
# lcov fails when multiple instances run at the same time.
# We need to run them sequentially by using flock
-cmd_lcov=flock /tmp/ec-lcov-lock -c "lcov -q -o $@ -c -d build/host/$*"
-cmd_report_cov=genhtml -q -o build/host/coverage_rpt -t \
+cmd_lcov=flock /tmp/ec-lcov-lock -c "lcov -q -o $@ -c -d build/coverage/$*"
+cmd_report_cov=genhtml -q -o build/coverage/coverage_rpt -t \
"EC Unittest "$(bldversion) $^
# Unless V is set to 0 we always want the 'size:' target to report its output,
@@ -420,7 +434,7 @@ cmd_stats= \
printf "%-10s: %6d\n" $$board $$size; \
done
-build/host/%.info: run-%
+build/coverage/%.info: run-coverage-%
$(call quiet,lcov,COV )
.PHONY: coverage