forked from rustyrussell/ccan
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
132 lines (105 loc) · 5.27 KB
/
Makefile
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Hacky makefile to compile everything and run the tests in some kind
# of sane order.
# Main targets:
#
# check: run tests on all ccan modules (use 'make check V=--verbose' for more)
# Includes building libccan.a.
# libccan.a: A library with all the ccan modules in it.
# tools: build useful tools in tools/ dir.
# Especially tools/ccanlint/ccanlint and tools/namespacize.
# distclean: destroy everything back to pristine state
# Trying to build the whole repo is usually a lose; there will be some
# dependencies you don't have.
EXCLUDE=wwviaudio ogg_to_pcm jmap jset nfs
# Where make scores puts the results
SCOREDIR=scores/$(shell whoami)/$(shell uname -s)-$(shell uname -m)-$(CC)-$(shell git describe --always --dirty)
ALL=$(filter-out $(EXCLUDE), $(REALLY_ALL))
ALL_DEPENDS=$(patsubst %, ccan/%/.depends, $(REALLY_ALL))
# Not all modules have tests.
ALL_TESTS=$(patsubst ccan/%/test/, %, $(foreach dir, $(ALL), $(wildcard ccan/$(dir)/test/)))
# Here's my rough logarithmic timeout graph for my laptop:
#
# 302 -
# | / --*
# | /
# | /
# | /
# |Execution Time, seconds /
# | /
# | ---//
# | /
# | //
# | ---\ ---
# | --- \\ ------
# |----------------- \---
# 19 +------------------------------------------------------+--
# 0 Timeout (ms, logarithmic) 262144
#
# 140
# |
# |------------
# | ---
# | ---------
# | -------
# | --\
# | \\-
# | Tests skipped --\
# | \
# | \\
# | \\\
# | \
# | \----
# --+0---------------------------------------------------==+--
# 0 Timeout (ms, logarithmic) 262144
#
# On my laptop, this runs 574 tests in 40 seconds, vs. a full check which
# runs 676 tests in 260 seconds.
FASTTIMEOUT=750
default: libccan.a
include Makefile-ccan
fastcheck: $(ALL_TESTS:%=summary-fastcheck-%)
check: $(ALL_TESTS:%=summary-check-%)
distclean: clean
rm -f $(ALL_DEPENDS)
scores: $(SCOREDIR)/SUMMARY
$(SCOREDIR)/SUMMARY: $(patsubst ccan/%/_info, $(SCOREDIR)/score-%, $(wildcard ccan/*/_info))
git describe --always > $@
uname -a >> $@
$(CC) -v >> $@
cat $^ | grep 'Total score:' >> $@
$(SCOREDIR)/score-%: ccan/%/_info tools/ccanlint/ccanlint $(OBJFILES)
mkdir -p $(SCOREDIR)
tools/ccanlint/ccanlint -v -s ccan/$* > $@ || true
$(ALL_DEPENDS): %/.depends: %/_info tools/ccan_depends
tools/ccan_depends $* > $@ || ( rm -f $@; exit 1 )
# Actual dependencies are created in inter-depends
check-%: tools/ccanlint/ccanlint
tools/ccanlint/ccanlint ccan/$*
fastcheck-%: tools/ccanlint/ccanlint
tools/ccanlint/ccanlint --timeout $(FASTTIMEOUT) ccan/$*
# Doesn't test dependencies, doesn't print verbose fail results.
summary-check-%: tools/ccanlint/ccanlint $(OBJFILES)
tools/ccanlint/ccanlint -s ccan/$*
summary-fastcheck-%: tools/ccanlint/ccanlint $(OBJFILES)
tools/ccanlint/ccanlint -x tests_pass_valgrind -x tests_compile_coverage -s ccan/$*
ccan/%/info: ccan/%/_info
$(CC) $(CCAN_CFLAGS) -o $@ -x c $<
libccan.a(%.o): ccan/%.o
$(AR) r $@ $<
clean: tools-clean
$(RM) `find * -name '*.o'` `find * -name '.depends'` `find * -name '*.a'` `find * -name info` `find * -name '*.d'`
$(RM) inter-depends lib-depends test-depends ccan/*-Makefile
# Creates a dependency from the tests to the object files which it needs.
inter-depends: $(ALL_DEPENDS) Makefile
for f in $(ALL_DEPENDS); do echo check-$$(basename $$(dirname $$f) ): $$(for dir in $$(cat $$f) $$(dirname $$f); do [ "$$(echo $$dir/*.c)" = "$$dir/*.c" ] || echo ccan/"$$(basename $$dir)".o; done); done > $@
# Creates dependencies between tests, so if foo depends on bar, bar is tested
# first
test-depends: $(ALL_DEPENDS) Makefile
for f in $(ALL_DEPENDS); do echo check-`basename \`dirname $$f\``: `sed -n 's,ccan/\(.*\),check-\1,p' < $$f`; done > $@
# Ensure we don't end up with empty file if configurator fails!
config.h: tools/configurator/configurator Makefile Makefile-ccan
tools/configurator/configurator $(CC) $(CCAN_CFLAGS) > $@ || rm -f $@
include tools/Makefile
-include inter-depends
-include test-depends
-include Makefile-web