1
1
CC = gcc
2
2
INCLUDES = -Isrc -Ideps/bitfield-c/src -Ideps/isotp-c/src
3
- CFLAGS = $(INCLUDES ) -c -w -Wall -Werror -g -ggdb -std=c99
4
- LDFLAGS =
3
+ CFLAGS = $(INCLUDES ) -c -w -Wall -Werror -g -ggdb -std=gnu++0x -coverage
4
+ LDFLAGS = -coverage -lm
5
5
LDLIBS = -lcheck
6
6
7
7
TEST_DIR = tests
8
+ TEST_OBJDIR = build
8
9
9
10
# Guard against \r\n line endings only in Cygwin
10
11
OSTYPE := $(shell uname)
@@ -18,22 +19,38 @@ endif
18
19
SRC = $(wildcard src/** /* .c)
19
20
SRC += $(wildcard deps/bitfield-c/src/** /* .c)
20
21
SRC += $(wildcard deps/isotp-c/src/** /* .c)
21
- OBJS = $(SRC:.c=.o )
22
+ OBJS = $(patsubst % , $( TEST_OBJDIR ) / % , $( SRC:.c=.o ) )
22
23
TEST_SRC = $(wildcard $(TEST_DIR ) /test_* .c)
23
- TESTS =$(patsubst % .c,% .bin,$(TEST_SRC ) )
24
+ TESTS =$(patsubst % .c,$( TEST_OBJDIR ) / % .bin,$(TEST_SRC ) )
24
25
TEST_SUPPORT_SRC = $(TEST_DIR ) /common.c
25
- TEST_SUPPORT_OBJS = $(TEST_SUPPORT_SRC:.c=.o )
26
+ TEST_SUPPORT_OBJS = $(patsubst % , $( TEST_OBJDIR ) / % , $( TEST_SUPPORT_SRC:.c=.o ) )
26
27
27
28
all : $(OBJS )
28
29
29
30
test : $(TESTS )
30
31
@set -o $(TEST_SET_OPTS ) > /dev/null 2>&1
31
32
@export SHELLOPTS
32
- @sh runtests.sh $(TEST_DIR )
33
+ @sh runtests.sh $(TEST_OBJDIR ) / $( TEST_DIR )
33
34
34
- $(TEST_DIR ) /% .bin : $(TEST_DIR ) /% .o $(OBJS ) $(TEST_SUPPORT_OBJS )
35
+ COVERAGE_INFO_FILENAME = coverage.info
36
+ COVERAGE_INFO_PATH = $(TEST_OBJDIR ) /$(COVERAGE_INFO_FILENAME )
37
+ coverage :
38
+ @lcov --base-directory . --directory src --zerocounters -q
39
+ @make clean
40
+ @make test
41
+ @lcov --base-directory . --directory $(TEST_OBJDIR ) -c -o $(TEST_OBJDIR ) /coverage.info
42
+ @lcov --remove $(COVERAGE_INFO_PATH ) " deps/*" -o $(COVERAGE_INFO_PATH )
43
+ @genhtml -o $(TEST_OBJDIR ) /coverage -t " isotp-c test coverage" --num-spaces 4 $(COVERAGE_INFO_PATH )
44
+ @$(BROWSER ) $(TEST_OBJDIR ) /coverage/index.html
45
+ @echo " $( GREEN) Coverage information generated in $( TEST_OBJDIR) /coverage/index.html.$( COLOR_RESET) "
46
+
47
+ $(TEST_OBJDIR ) /% .o : % .c
48
+ @mkdir -p $(dir $@ )
49
+ $(CC ) $(CFLAGS ) $(CC_SYMBOLS ) $(INCLUDES ) -o $@ $<
50
+
51
+ $(TEST_OBJDIR ) /% .bin : $(TEST_OBJDIR ) /% .o $(OBJS ) $(TEST_SUPPORT_OBJS )
35
52
@mkdir -p $(dir $@ )
36
53
$(CC ) $(LDFLAGS ) $(CC_SYMBOLS ) $(INCLUDES ) -o $@ $^ $(LDLIBS )
37
54
38
55
clean :
39
- rm -rf ** / * .o $( TEST_DIR ) / * .bin
56
+ rm -rf $( TEST_OBJDIR )
0 commit comments