Add make lcov-html to generate code coverage report
authorJouni Malinen <j@w1.fi>
Wed, 25 Dec 2013 11:44:38 +0000 (13:44 +0200)
committerJouni Malinen <j@w1.fi>
Thu, 26 Dec 2013 11:37:06 +0000 (13:37 +0200)
In addition, update build rules to compile object files in the same
directory as the source code file if CONFIG_CODE_COVERAGE=y is set to
make lcov find the source code files.

Signed-hostap: Jouni Malinen <j@w1.fi>

hostapd/Makefile
wpa_supplicant/Makefile

index ae96d35..e60ae9b 100644 (file)
@@ -6,8 +6,8 @@ ifndef CFLAGS
 CFLAGS = -MMD -O2 -Wall -g
 endif
 
-CFLAGS += -I../src
-CFLAGS += -I../src/utils
+CFLAGS += -I$(abspath ../src)
+CFLAGS += -I$(abspath ../src/utils)
 
 # Uncomment following line and set the path to your kernel tree include
 # directory if your C library does not include all header files.
@@ -873,9 +873,15 @@ Q=
 E=true
 endif
 
+ifdef CONFIG_CODE_COVERAGE
+%.o: %.c
+       @$(E) "  CC " $<
+       $(Q)cd $(dir $@); $(CC) -c -o $(notdir $@) $(CFLAGS) $(notdir $<)
+else
 %.o: %.c
        $(Q)$(CC) -c -o $@ $(CFLAGS) $<
        @$(E) "  CC " $<
+endif
 
 verify_config:
        @if [ ! -r .config ]; then \
@@ -944,9 +950,15 @@ hlr_auc_gw: $(HOBJS)
        $(Q)$(CC) $(LDFLAGS) -o hlr_auc_gw $(HOBJS) $(LIBS_h)
        @$(E) "  LD " $@
 
+lcov-html:
+       lcov -c -d .. > lcov.info
+       genhtml lcov.info --output-directory lcov-html
+
 clean:
        $(MAKE) -C ../src clean
        rm -f core *~ *.o hostapd hostapd_cli nt_password_hash hlr_auc_gw
        rm -f *.d *.gcno *.gcda *.gcov
+       rm -f lcov.info
+       rm -rf lcov-html
 
 -include $(OBJS:%.o=%.d)
index 260c0ae..8ade64c 100644 (file)
@@ -10,8 +10,8 @@ export LIBDIR ?= /usr/local/lib/
 export BINDIR ?= /usr/local/sbin/
 PKG_CONFIG ?= pkg-config
 
-CFLAGS += -I../src
-CFLAGS += -I../src/utils
+CFLAGS += -I$(abspath ../src)
+CFLAGS += -I$(abspath ../src/utils)
 
 -include .config
 
@@ -1622,9 +1622,15 @@ eap_eke.so: ../src/eap_peer/eap_eke.c ../src/eap_common/eap_eke_common.c
        $(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $< \
                -D$(*F:eap_%=eap_peer_%)_register=eap_peer_method_dynamic_init
 
+ifdef CONFIG_CODE_COVERAGE
+%.o: %.c
+       @$(E) "  CC " $<
+       $(Q)cd $(dir $@); $(CC) -c -o $(notdir $@) $(CFLAGS) $(notdir $<)
+else
 %.o: %.c
        $(Q)$(CC) -c -o $@ $(CFLAGS) $<
        @$(E) "  CC " $<
+endif
 
 %.service: %.service.in
        sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
@@ -1676,6 +1682,10 @@ FIPSLD=$(FIPSDIR)/bin/fipsld
 fips:
        $(MAKE) CC=$(FIPSLD) FIPSLD_CC="$(CC)"
 
+lcov-html: wpa_supplicant.gcda
+       lcov -c -d .. > lcov.info
+       genhtml lcov.info --output-directory lcov-html
+
 clean:
        $(MAKE) -C ../src clean
        $(MAKE) -C dbus clean
@@ -1683,5 +1693,7 @@ clean:
        rm -f eap_*.so $(ALL) $(WINALL) eapol_test preauth_test
        rm -f wpa_priv
        rm -f nfc_pw_token
+       rm -f lcov.info
+       rm -rf lcov-html
 
 -include $(OBJS:%.o=%.d)