swapcontext() fix for Mac OSX
[model-checker.git] / Makefile
1 include common.mk
2
3 OBJECTS = libthreads.o schedule.o model.o threads.o librace.o action.o \
4           nodestack.o clockvector.o main.o snapshot-interface.o cyclegraph.o \
5           datarace.o impatomic.o cmodelint.o \
6           snapshot.o malloc.o mymemory.o common.o mutex.o promise.o conditionvariable.o
7
8 CPPFLAGS += -Iinclude -I.
9 LDFLAGS = -ldl -lrt -rdynamic
10 SHARED = -shared
11
12 # Mac OSX options
13 ifeq ($(UNAME), Darwin)
14 LDFLAGS = -ldl
15 SHARED = -Wl,-undefined,dynamic_lookup -dynamiclib
16 endif
17
18 TESTS_DIR = test
19
20 all: $(LIB_SO) tests
21
22 debug: CPPFLAGS += -DCONFIG_DEBUG
23 debug: all
24
25 PHONY += docs
26 docs: *.c *.cc *.h
27         doxygen
28
29 $(LIB_SO): $(OBJECTS)
30         $(CXX) $(SHARED) -o $(LIB_SO) $+ $(LDFLAGS)
31
32 malloc.o: malloc.c
33         $(CC) -fPIC -c malloc.c -DMSPACES -DONLY_MSPACES -DHAVE_MMAP=0 $(CPPFLAGS) -Wno-unused-variable
34
35 %.o: %.cc
36         $(CXX) -MMD -MF .$@.d -fPIC -c $< $(CPPFLAGS)
37
38 %.pdf: %.dot
39         dot -Tpdf $< -o $@
40
41 -include $(OBJECTS:%=.%.d)
42
43 PHONY += clean
44 clean:
45         rm -f *.o *.so .*.d *.pdf *.dot
46         $(MAKE) -C $(TESTS_DIR) clean
47
48 PHONY += mrclean
49 mrclean: clean
50         rm -rf docs
51
52 PHONY += tags
53 tags:
54         ctags -R
55
56 PHONY += tests
57 tests: $(LIB_SO)
58         $(MAKE) -C $(TESTS_DIR)
59
60 BENCH_DIR := benchmarks
61
62 PHONY += benchmarks
63 benchmarks: $(LIB_SO)
64         @if ! test -d $(BENCH_DIR); then \
65                 echo "Directory $(BENCH_DIR) does not exist" && \
66                 echo "Please clone the benchmarks repository" && \
67                 echo && \
68                 exit 1; \
69         fi
70         $(MAKE) -C $(BENCH_DIR)
71
72 PHONY += pdfs
73 pdfs: $(patsubst %.dot,%.pdf,$(wildcard *.dot))
74
75 .PHONY: $(PHONY)