make: clean up coverage builds

Clean up the coverage build output, and add a "config" target for
doing a coverage build.

Signed-off-by: Max Regan <mgregan2@gmail.com>
This commit is contained in:
2017-04-07 15:51:54 -07:00
parent d25d2d8549
commit 681b8e3233

View File

@@ -17,9 +17,13 @@ CONFIG = $(OUT)/.config.mk
ifeq ($(DEBUG), 1) ifeq ($(DEBUG), 1)
CCFLAGS += -DLOG_LEVEL=5 -DDEBUG CCFLAGS += -DLOG_LEVEL=5 -DDEBUG
CCFLAGS += -fprofile-arcs -ftest-coverage
CCFLAGS += -O0 -ggdb CCFLAGS += -O0 -ggdb
endif
ifeq ($(COVERAGE), 1)
LDFLAGS += -lgcov --coverage LDFLAGS += -lgcov --coverage
CCFLAGS += -O0 --coverage
CCFLAGS += -fprofile-arcs -ftest-coverage
endif endif
ifeq ($(RELEASE), 1) ifeq ($(RELEASE), 1)
@@ -38,17 +42,23 @@ APPS = $(patsubst %.o, %, $(APP_OBJS))
.PHONY: all .PHONY: all
all: gbdb gbasm tests all: gbdb gbasm tests
.PHONY: config-debug config-release config-default .PHONY: config-debug config-release config-default config-coverage
$(CONFIG): $(CONFIG):
@mkdir -p $(OUT) @mkdir -p $(OUT)
config-debug: $(CONFIG) config-debug: $(CONFIG)
@echo "DEBUG=1" > $(CONFIG) @echo "DEBUG=1" > $(CONFIG)
config-release: $(CONFIG) config-release: $(CONFIG)
@echo "RELEASE=1" > $(CONFIG) @echo "RELEASE=1" > $(CONFIG)
config-coverage: $(CONFIG)
@echo "COVERAGE=1" > $(CONFIG)
config-default: $(CONFIG) config-default: $(CONFIG)
@echo "" > $(CONFIG) @echo "" > $(CONFIG)
.PHONY: gbdb gbasm .PHONY: gbdb gbasm
gbdb: $(OUT)/apps/gbdb gbdb: $(OUT)/apps/gbdb
@@ -56,19 +66,19 @@ gbasm: $(OUT)/apps/gbasm
.PHONY: gbasm-test sample-test tests .PHONY: gbasm-test sample-test tests
TESTS=$(OUT)/apps/gbasm-test $(OUT)/apps/tri-test TESTS=$(OUT)/apps/gbasm_test $(OUT)/apps/tri_test $(OUT)/apps/cpu_integ_test
tests: $(TESTS) tests: $(TESTS)
$(ALL_APPS) $(ALL_OBJS): $(CONFIG) $(ALL_APPS) $(ALL_OBJS): $(CONFIG)
$(OUT)/%.o: $(SRC_DIR)/%.c $(OUT)/%.o: $(SRC_DIR)/%.c
@echo " CC $@" @echo " CC $@"
@$(shell mkdir -p $(@D)) @$(shell mkdir -p $(@D))
@$(CC) -c $(CCFLAGS) -o $@ $< @$(CC) -c $(CCFLAGS) -o $@ $<
.SECONDEXPANSION: .SECONDEXPANSION:
$(APPS): $(OBJS) $$@.o $(APPS): $(OBJS) $$@.o
@echo " LD $@" @echo " LD $@"
@$(shell mkdir -p $(@D)) @$(shell mkdir -p $(@D))
@$(CC) $^ $(LDFLAGS) -o $@ @$(CC) $^ $(LDFLAGS) -o $@
@@ -77,6 +87,7 @@ $(APPS): $(OBJS) $$@.o
define run_tests = define run_tests =
@for i in $(TESTS); do \ @for i in $(TESTS); do \
echo " TEST $$i"; \
$$i; \ $$i; \
if [ $$? -ne 0 ]; then \ if [ $$? -ne 0 ]; then \
exit 1; \ exit 1; \
@@ -85,37 +96,36 @@ define run_tests =
endef endef
.PHONY: check coverage coverage-report .PHONY: check coverage coverage-report
check: $(TESTS) check: $(TESTS)
$(run_tests) $(run_tests)
COV_BASE=$(COV_DIR)/cov_base.info COV_BASE=$(COV_DIR)/cov_base.info
.PHONY: $(COV_BASE) .PHONY: $(COV_BASE)
$(COV_BASE): $(COV_BASE):
@mkdir -p $(COV_DIR) @mkdir -p $(COV_DIR)
@lcov -c -i -d $(OUT) -o $(COV_BASE) @lcov -q -c -i -d $(OUT) -o $(COV_BASE)
$(COV_DIR)/coverage.info coverage: $(TESTS) $(COV_BASE) $(COV_DIR)/coverage.info coverage: $(TESTS) $(COV_BASE)
@for test in $(TESTS); do \ @for test in $(TESTS); do \
$$test; \ echo " TEST $$test"; \
lcov -c -d $(OUT) -o $(COV_DIR)/$$(basename $$test).info -t $$(basename $$test); \ $$test -q; \
echo " LCOV $$(basename $$test)"; \
lcov -q -c -d $(OUT) -o $(COV_DIR)$$(basename $$test).info -t $$(basename $$test); \
done done
lcov $$(for i in $$(ls -1 $(COV_DIR)/*.info); do echo "-a $$i"; done) -o $(COV_DIR)/coverage.info @lcov -q $$(for i in $$(ls -1 $(COV_DIR)*.info); do echo "-a $$i"; done) -o $(COV_DIR)coverage.info
coverage-report: coverage coverage-report: coverage
@mkdir -p $(COV_DIR)/html/ @mkdir -p $(COV_DIR)/html/
@genhtml --prefix $(PWD) --output-directory=$(COV_DIR)/html $(COV_DIR)/coverage.info @genhtml -q --prefix $(PWD) --output-directory=$(COV_DIR)/html $(COV_DIR)/coverage.info
.PHONY: clean realclean cov-clean .PHONY: clean realclean cov-clean
cov-clean: cov-clean:
@find $(OUT)/ \( -iname *.gcno -o -iname *.gcda \) -delete @find $(OUT)/ \( -iname *.gcno -o -iname *.gcda \) -delete
@rm @rm -rf $(COV_DIR)
clean: clean: cov-clean
@rm -f $(ALL_OBJS) $(APPS) @rm -f $(ALL_OBJS) $(APPS) $(TESTS)
realclean: clean realclean: clean
@rm -f $(CONFIG) @rm -f $(CONFIG)