summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAidan MacDonald <amachronic@protonmail.com>2021-11-28 13:42:52 +0000
committerAidan MacDonald <amachronic@protonmail.com>2021-11-28 13:45:20 +0000
commit7ca8623927280cdceebfce8e4413960efac90446 (patch)
treeb0b4e7081310ebae62961934c6ae3125dca82b74
parent06423cab58569ef01eb526e5f0d2f5c0c8917aa0 (diff)
downloadrockbox-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
-rw-r--r--lib/x1000-installer/.gitignore2
-rw-r--r--lib/x1000-installer/Makefile56
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 @@
1xf_test 1xf_test
2fakeNAND.bin 2fakeNAND.bin
3fakeNAND_meta.bin 3fakeNAND_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
20MTARLIB = ../microtar/libmicrotar.a 20MTARLIB = ../microtar/libmicrotar.a
21 21
22CPPFLAGS = -Iinclude -Itest_lib $(MTARINC) -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=200809L 22CPPFLAGS = -Iinclude -Itest_lib $(MTARINC) -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=200809L
23CFLAGS = -std=c99 -Wall -Wextra -O2 23CFLAGS = -std=c99 -Wall -Wextra
24LDFLAGS =
24 25
26PROFRAW_FILE=$(TBIN).profraw
27PROFDATA_FILE=$(TBIN).profdata
28
29export LLVM_PROFILE_FILE=$(PROFRAW_FILE)
30
31ifeq ($(COVERAGE),1)
32 CC = clang
33 CFLAGS += -g -Og -fprofile-instr-generate -fcoverage-mapping
34 LDFLAGS += -fprofile-instr-generate -fcoverage-mapping
35else
36 CFLAGS += -O2
37endif
38
39ifeq ($(SANITIZE),1)
40 CFLAGS += -fsanitize=address -fsanitize=undefined
41 LDFLAGS += -fsanitize=address -fsanitize=undefined
42endif
43
44.PHONY: all
25all: $(LIB) $(TBIN) 45all: $(LIB) $(TBIN)
26 46
27%.o: %.c 47.PHONY: test
28 $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ 48test: $(TBIN)
49 @./$(TBIN)
29 50
30$(LIB): $(OBJ) 51.PHONY: cov
31 $(AR) rcs $@ $^ >/dev/null 52cov: $(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 $@ $^ 56cov-show: $(PROFDATA_FILE)
57 @llvm-cov show $(TBIN) --use-color -instr-profile=$(PROFDATA_FILE) $(f) | less -R
35 58
59.PHONY: clean
36clean: 60clean:
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)