10
10
DEBUGGER ?= gdb
11
11
endif
12
12
13
+ GCOV_DIR := $(BINDIR ) /gcov_files
13
14
14
15
export VALGRIND ?= valgrind
15
16
export CGANNOTATE ?= cg_annotate
16
17
export GPROF ?= gprof
18
+ export GCOV ?= gcov
19
+ export GCOVR ?= gcovr
17
20
18
21
# basic cflags:
19
22
CFLAGS += -Wall -Wextra $(CFLAGS_DBG ) $(CFLAGS_OPT )
@@ -110,11 +113,14 @@ debug-valgrind-server: export VALGRIND_FLAGS ?= --vgdb=yes --vgdb-error=0 -v \
110
113
term-cachegrind : export CACHEGRIND_FLAGS += --tool=cachegrind
111
114
term-gprof : TERMPROG = $(ELFFILE )
112
115
term-gprof : TERMENV += GMON_OUT_PREFIX=gmon.out
116
+ term-gcov : TERMPROG = $(ELFFILE )
113
117
114
118
all-valgrind : CFLAGS += -DHAVE_VALGRIND_H
115
119
all-valgrind : NATIVEINCLUDES += $(shell pkg-config valgrind --cflags)
116
120
all-gprof : CFLAGS += -pg
117
121
all-gprof : LINKFLAGS += -pg
122
+ all-gcov : CFLAGS += --coverage -fprofile-arcs
123
+ all-gcov : LINKFLAGS += --coverage -fprofile-arcs
118
124
119
125
CFLAGS_ASAN += -fsanitize=address -fno-omit-frame-pointer -DNATIVE_MEMORY
120
126
LINKFLAGS_ASAN += -fsanitize=address -fno-omit-frame-pointer
@@ -143,6 +149,8 @@ all: # do not override first target
143
149
144
150
all-gprof : all
145
151
152
+ all-gcov : all
153
+
146
154
all-asan : all
147
155
148
156
all-valgrind : all
@@ -165,8 +173,33 @@ term-cachegrind:
165
173
166
174
term-gprof : term
167
175
176
+ term-gcov : term
177
+
168
178
eval-gprof :
169
179
$(GPROF ) $(ELFFILE ) $(shell ls -rt gmon.out* | tail -1)
170
180
181
+ # gcov needs the source file and the .gcno file
182
+ # It is not easy to know the source file by the object file.
183
+ # The trick is to extract the source file by the .d file
184
+ eval-gcov : $(GCOV_DIR )
185
+ @find $(BINDIR ) -name ' *.gcno' | while read gcno; do \
186
+ dep=$$(echo $$gcno | sed 's/\.gcno$$/.d/' ) ; \
187
+ src=$$(grep '\.c \\' $$dep ) ; \
188
+ src=$$(echo $$src | sed 's/.* \///; s/\\$$//' ) ; \
189
+ cd -P $(GCOV_DIR ) && $(GCOV ) -abcdfHkp $$ src $$ gcno; \
190
+ done
191
+
192
+ $(GCOV_DIR ) /gcovr.cfg : $(GCOV_DIR )
193
+ @echo " root = $( RIOTBASE) " > $@
194
+ @echo " object-directory = $( BINDIR) " >> $@
195
+
196
+ eval-gcovr : $(GCOV_DIR ) /gcovr.cfg
197
+ $(GCOVR ) --config $(GCOV_DIR ) /gcovr.cfg \
198
+ --html-details --html $(GCOV_DIR ) /index.html
199
+ xdg-open $(GCOV_DIR ) /index.html
200
+
201
+ $(GCOV_DIR ) :
202
+ $(Q ) mkdir -p $(GCOV_DIR )
203
+
171
204
eval-cachegrind :
172
205
$(CGANNOTATE ) $(shell ls -rt cachegrind.out* | tail -1)
0 commit comments