1SVN_ROOT=..
2include ../common.mk
3
4ifeq ($(OS), darwin)
5DEFINES=-DOS_$(OS) -DARCH_$(ARCH) -DOS_$(DARWIN_VERSION)
6else
7DEFINES=-DOS_$(OS) -DARCH_$(ARCH)
8endif
9
10CFLAGS+=$(OPTFLAGS) $(ARCHFLAGS) $(OS_CFLAGS) $(DEFINES) $(EXTRA_CFLAGS)
11CXXFLAGS+=$(OPTFLAGS) $(ARCHFLAGS) $(OS_CXXFLAGS) $(DEFINES) $(EXTRA_CXXFLAGS)
12OPT_CXXFLAGS=$(CXXFLAGS) -O2 -g $(ARCHFLAGS) $(OS_CXXFLAGS) $(DEFINES) $(EXTRA_CXXFLAGS) -foptimize-sibling-calls
13ifeq ($(OS), darwin)
14LDFLAGS=$(LDOPT) $(ARCHFLAGS) $(STATICFLAGS) -framework Foundation
15else
16LDFLAGS=$(LDOPT) $(ARCHFLAGS) $(STATICFLAGS)
17endif
18
19# OS = linux, darwin, windows
20# ARCH= x86, amd64
21# OX = O0, O1, ...
22# S= <empty>, -static
23BUILD=${OS}-${ARCH}-${OX}${S}${EXTRA_BUILD_SUFFIX}
24BIN=bin/
25
26ifeq ($(OS), linux)
27  OS_CXXFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c++0x
28  OS_CFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c89
29  LIBS=-lpthread -lrt
30else ifeq ($(OS), darwin)
31  OS_CXXFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function
32  OS_CFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c89
33  LIBS=-lpthread
34else ifeq ($(OS), windows)
35  OS_CXXFLAGS=/EHs- /EHa- /wd4530   /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /Gy /D "WIN32"
36  OS_CFLAGS=/EHs- /EHa- /wd4530   /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /Gy /D "WIN32"
37else
38  OS=UNKNOWN_OS
39endif
40
41OUTPUT_TESTS_LIST=$(patsubst output_tests/%.cc,%,$(wildcard output_tests/*.cc))
42OUTPUT_TESTS_OBJS=$(patsubst %,$(BIN)output_tests/%-$(BUILD)$(EXE),$(OUTPUT_TESTS_LIST))
43
44all: $(BIN)racecheck_unittest-$(BUILD)$(EXE) $(BIN)demo_tests-$(BUILD)$(EXE) \
45     $(BIN)bigtest-$(BUILD)$(EXE) output_tests \
46		 $(BIN)memory_unittest-$(BUILD)$(EXE)
47ifeq ($(OS), linux)
48all: $(BIN)deadlock_unittest-$(BUILD)$(EXE)
49endif
50
51output_tests: bin/output_tests $(OUTPUT_TESTS_OBJS)
52
53run_output_tests: output_tests
54	BUILD=$(BUILD) BIN=$(BIN) ./run_output_tests.sh $(OUTPUT_TESTS_LIST)
55
56w:
57	$(MAKE) all OS=windows ARCH=x86
58m: m32 m64
59m32:
60	$(MAKE) all OS=darwin ARCH=x86
61m64:
62	$(MAKE) all OS=darwin ARCH=amd64
63l: l32 l64
64l32:
65	$(MAKE) all OS=linux ARCH=x86
66l64:
67	$(MAKE) all OS=linux ARCH=amd64
68
69bin:
70	mkdir -p bin
71bin/output_tests:
72	mkdir -p bin/output_tests
73
74DYNAMIC_ANNOTATIONS_DIR=../dynamic_annotations
75DYNAMIC_ANNOTATIONS_H=${DYNAMIC_ANNOTATIONS_DIR}/dynamic_annotations.h
76DYNAMIC_ANNOTATIONS_C=${DYNAMIC_ANNOTATIONS_DIR}/dynamic_annotations.c
77ifndef OMIT_DYNAMIC_ANNOTATIONS_IMPL
78DYNAMIC_ANNOTATIONS_O=$(BIN)dynamic_annotations-$(BUILD).$(OBJ)
79else
80DYNAMIC_ANNOTATIONS_O=
81endif
82DYNAMIC_ANNOTATIONS=${DYNAMIC_ANNOTATIONS_C} ${DYNAMIC_ANNOTATIONS_H}
83
84TEST_UTILS_O=$(BIN)test_utils-$(BUILD).$(OBJ)
85
86$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)racecheck_unittest-$(BUILD).$(OBJ) \
87	                                 $(BIN)old_test_suite-$(BUILD).$(OBJ) \
88					 $(BIN)opt_tests-$(BUILD).$(OBJ) \
89					 $(BIN)atomicity_tests-$(BUILD).$(OBJ) \
90		$(TEST_UTILS_O) $(GTEST_LIB)  ${DYNAMIC_ANNOTATIONS_O} | bin
91	${LD} ${LDFLAGS} $^ $(LIBS) $(LINKO)$@
92
93ifeq ($(OS), windows)
94$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)windows_tests-$(BUILD).$(OBJ)
95else
96$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)posix_tests-$(BUILD).$(OBJ)
97endif
98
99ifeq ($(OS), linux)
100ifndef OMIT_CPP0X
101$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)libstdc++_tests-$(BUILD).$(OBJ)
102endif
103endif
104
105ifeq ($(OS), darwin)
106$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)mac_tests-$(BUILD).$(OBJ)
107endif
108
109$(BIN)deadlock_unittest-$(BUILD)$(EXE): $(BIN)deadlock_unittest-$(BUILD).$(OBJ) $(BIN)old_test_suite-$(BUILD).$(OBJ) \
110		$(TEST_UTILS_O) $(GTEST_LIB)  ${DYNAMIC_ANNOTATIONS_O} | bin
111	${LD} ${LDFLAGS} $^ $(LIBS) $(LINKO)$@
112
113$(BIN)demo_tests-$(BUILD)$(EXE): $(BIN)demo_tests-$(BUILD).$(OBJ) \
114		$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
115	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
116
117$(BIN)output_tests/%-$(BUILD)$(EXE): $(BIN)output_tests/%-$(BUILD).$(OBJ) \
118		${TEST_UTILS_O} ${DYNAMIC_ANNOTATIONS_O} | bin
119	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
120
121$(BIN)bigtest-$(BUILD)$(EXE): $(BIN)bigtest-$(BUILD).$(OBJ) ${DYNAMIC_ANNOTATIONS_O} | bin
122	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
123
124$(BIN)memory_unittest-$(BUILD)$(EXE): $(BIN)memory_unittest-$(BUILD).$(OBJ) $(BIN)old_test_suite-$(BUILD).$(OBJ) \
125		$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
126	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
127
128$(BIN)%-$(BUILD).$(OBJ): %.cc ${DYNAMIC_ANNOTATIONS} thread_wrappers.h \
129		thread_wrappers_win.h thread_wrappers_pthread.h old_test_suite.h \
130		test_utils.h gtest_fixture_injection.h | bin
131	${CXX} ${CXXFLAGS} \
132		 -I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
133		 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
134
135$(BIN)opt_tests-$(BUILD).$(OBJ): opt_tests.cc ${DYNAMIC_ANNOTATIONS} thread_wrappers.h thread_wrappers_win.h thread_wrappers_pthread.h old_test_suite.h test_utils.h | bin
136	${CXX} ${OPT_CXXFLAGS} \
137		 -I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
138		 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
139
140$(BIN)%-$(BUILD).$(OBJ): %.mm ${DYNAMIC_ANNOTATIONS} thread_wrappers.h thread_wrappers_win.h thread_wrappers_pthread.h old_test_suite.h test_utils.h | bin
141	${CXX} ${CXXFLAGS} \
142		 -I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
143		 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
144
145
146${DYNAMIC_ANNOTATIONS_O}: ${DYNAMIC_ANNOTATIONS_C}
147	${CC} ${CFLAGS} $< \
148		-I${DYNAMIC_ANNOTATIONS_DIR} -DDYNAMIC_ANNOTATIONS_ENABLED=1 \
149		-c $(O)$@
150
151clean: GTEST_CLEAN
152	rm -rf bin racecheck_unittest demo_tests bigtest *.o *.O1 *.O2 *.obj *.dSYM *.exe *.pdb *.ilk *.idb *.manifest
153