-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcommon.mk
63 lines (48 loc) · 1.68 KB
/
common.mk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
CC=clang
GCC=gcc
KLEE=../klee/bin/klee
KLEE_LIB=../klee/lib
DUMMY_KLEE=../misc/dummy_klee.c
CCOPTS=-Wall -I../klee/include
CCBUILDOPTS=-g -c -emit-llvm
GCCCOVOPTS=-fprofile-arcs -ftest-coverage
build: $(TARGET).bc
cpp: $(TARGET).c-prepro
manual: $(TARGET).manual
ifndef TIMEOUT
TIMEOUT=60
endif
ifndef NOLIMIT
TIMEOUT_OPT:=-max-time $(TIMEOUT)
endif
ifndef OUTPUT_ALL_STATES
OUTPUT_STATES:=-only-output-states-covering-new
endif
.PHONY: buildanyway
$(TARGET).bc: $(ARTIFACT).c buildanyway
$(CC) $(CCOPTS) $(CCBUILDOPTS) $(CC_EXTRA_OPTS) $(BUGS) $< -o $@
$(TARGET).c-prepro: $(ARTIFACT).c
$(CC) $(CCOPTS) $(CC_EXTRA_OPTS) -E $(BUGS) $< -o $@
$(TARGET).replay: $(ARTIFACT).c
$(GCC) $(CCOPTS) -L$(KLEE_LIB) -DREPLAY $(REPLAY_OPTS) $(CC_EXTRA_OPTS) $(BUGS) $< -o $@ -lkleeRuntest
$(TARGET).manual: $(ARTIFACT).c $(DUMMY_KLEE)
$(GCC) $(CCOPTS) $(DUMMY_KLEE) -DREPLAY -DREPLAY_MANUAL $(CC_EXTRA_OPTS) $(BUGS) $< -o $@
$(TARGET).replay-c: $(ARTIFACT).c
$(GCC) $(CCOPTS) $(GCCCOVOPTS) -L$(KLEE_LIB) -DCOVERAGE $(CC_EXTRA_OPTS) $(BUGS) $< -o $@ -lkleeRuntest
klee: $(TARGET).bc
$(KLEE) $(OUTPUT_STATES) $(TIMEOUT_OPT) $(EXTRA_OPTS) $<
replay: $(TARGET).replay
@bash -c 'if [[ -f "$(TEST_FILE)" ]] ; then \
LD_LIBRARY_PATH=$(KLEE_LIB) KTEST_FILE=$(TEST_FILE) ./$< ; \
fi'
coverage: $(TARGET).replay-c
@test $(KLEE_OUT) || (echo "make coverage: KLEE_OUT is undefined" ; exit 1)
rm -f *.gcda
for t in $(KLEE_OUT)/*.ktest ; do \
LD_LIBRARY_PATH=$(KLEE_LIB) KTEST_FILE=$$t ./$< || true ; \
done
gcov -a $(ARTIFACT).c | tee $(KLEE_OUT)/gcov_out
cp $(ARTIFACT).c.gcov $(KLEE_OUT)/
clean:
rm -f *.bc *.c-prepro *.manual *.replay *.replay-c *.gcov *.gcda *.gcno
.PHONY: clean build cpp coverage klee