diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2021-11-28 13:42:52 +0000 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2021-11-28 13:45:20 +0000 |
commit | 7ca8623927280cdceebfce8e4413960efac90446 (patch) | |
tree | b0b4e7081310ebae62961934c6ae3125dca82b74 /lib/x1000-installer | |
parent | 06423cab58569ef01eb526e5f0d2f5c0c8917aa0 (diff) | |
download | rockbox-7ca8623927280cdceebfce8e4413960efac90446.tar.gz rockbox-7ca8623927280cdceebfce8e4413960efac90446.zip |
x1000-installer: add test & code coverage support to makefile
Pass COVERAGE=1 to enable clang-based code coverage and pass
SANITIZE=1 to enable sanitizers. 'make cov' will run the test
app and show a coverage summary.
Change-Id: I8a33e8b78665165d8da1818dc01f495f0c52cf06
Diffstat (limited to 'lib/x1000-installer')
-rw-r--r-- | lib/x1000-installer/.gitignore | 2 | ||||
-rw-r--r-- | lib/x1000-installer/Makefile | 56 |
2 files changed, 51 insertions, 7 deletions
diff --git a/lib/x1000-installer/.gitignore b/lib/x1000-installer/.gitignore index dae360e116..e7ad25b29f 100644 --- a/lib/x1000-installer/.gitignore +++ b/lib/x1000-installer/.gitignore | |||
@@ -1,3 +1,5 @@ | |||
1 | xf_test | 1 | xf_test |
2 | fakeNAND.bin | 2 | fakeNAND.bin |
3 | fakeNAND_meta.bin | 3 | fakeNAND_meta.bin |
4 | *.profraw | ||
5 | *.profdata | ||
diff --git a/lib/x1000-installer/Makefile b/lib/x1000-installer/Makefile index 35fa747aab..1a63e6d5b3 100644 --- a/lib/x1000-installer/Makefile +++ b/lib/x1000-installer/Makefile | |||
@@ -20,19 +20,61 @@ MTARINC = -I../microtar/src | |||
20 | MTARLIB = ../microtar/libmicrotar.a | 20 | MTARLIB = ../microtar/libmicrotar.a |
21 | 21 | ||
22 | CPPFLAGS = -Iinclude -Itest_lib $(MTARINC) -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=200809L | 22 | CPPFLAGS = -Iinclude -Itest_lib $(MTARINC) -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=200809L |
23 | CFLAGS = -std=c99 -Wall -Wextra -O2 | 23 | CFLAGS = -std=c99 -Wall -Wextra |
24 | LDFLAGS = | ||
24 | 25 | ||
26 | PROFRAW_FILE=$(TBIN).profraw | ||
27 | PROFDATA_FILE=$(TBIN).profdata | ||
28 | |||
29 | export LLVM_PROFILE_FILE=$(PROFRAW_FILE) | ||
30 | |||
31 | ifeq ($(COVERAGE),1) | ||
32 | CC = clang | ||
33 | CFLAGS += -g -Og -fprofile-instr-generate -fcoverage-mapping | ||
34 | LDFLAGS += -fprofile-instr-generate -fcoverage-mapping | ||
35 | else | ||
36 | CFLAGS += -O2 | ||
37 | endif | ||
38 | |||
39 | ifeq ($(SANITIZE),1) | ||
40 | CFLAGS += -fsanitize=address -fsanitize=undefined | ||
41 | LDFLAGS += -fsanitize=address -fsanitize=undefined | ||
42 | endif | ||
43 | |||
44 | .PHONY: all | ||
25 | all: $(LIB) $(TBIN) | 45 | all: $(LIB) $(TBIN) |
26 | 46 | ||
27 | %.o: %.c | 47 | .PHONY: test |
28 | $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ | 48 | test: $(TBIN) |
49 | @./$(TBIN) | ||
29 | 50 | ||
30 | $(LIB): $(OBJ) | 51 | .PHONY: cov |
31 | $(AR) rcs $@ $^ >/dev/null | 52 | cov: $(PROFDATA_FILE) |
53 | @llvm-cov report $(TBIN) -instr-profile=$(PROFDATA_FILE) | ||
32 | 54 | ||
33 | $(TBIN): $(TOBJ) $(LIB) $(MTARLIB) | 55 | .PHONY: cov-show |
34 | $(CC) -o $@ $^ | 56 | cov-show: $(PROFDATA_FILE) |
57 | @llvm-cov show $(TBIN) --use-color -instr-profile=$(PROFDATA_FILE) $(f) | less -R | ||
35 | 58 | ||
59 | .PHONY: clean | ||
36 | clean: | 60 | clean: |
37 | rm -f $(LIB) $(OBJ) | 61 | rm -f $(LIB) $(OBJ) |
38 | rm -f $(TBIN) $(TOBJ) | 62 | rm -f $(TBIN) $(TOBJ) |
63 | rm -f $(PROFRAW_FILE) $(PROFDATA_FILE) | ||
64 | rm -f fakeNAND.bin fakeNAND_meta.bin | ||
65 | |||
66 | $(LIB): $(OBJ) | ||
67 | $(AR) rcs $@ $^ >/dev/null | ||
68 | |||
69 | $(TBIN): $(TOBJ) $(LIB) $(MTARLIB) | ||
70 | $(CC) -o $@ $^ $(LDFLAGS) | ||
71 | |||
72 | %.o: %.c | ||
73 | $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ | ||
74 | |||
75 | # use separate rule instead of depending on 'test' to avoid re-running | ||
76 | $(PROFRAW_FILE): $(TBIN) | ||
77 | @./$(TBIN) | ||
78 | |||
79 | $(PROFDATA_FILE): $(PROFRAW_FILE) | ||
80 | @llvm-profdata merge -sparse $(PROFRAW_FILE) -o $(PROFDATA_FILE) | ||