1610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovSVN_ROOT=..
2610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovinclude ../common.mk
3610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
4610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifeq ($(OS), darwin)
5610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDEFINES=-DOS_$(OS) -DARCH_$(ARCH) -DOS_$(DARWIN_VERSION)
6610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovelse
7610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDEFINES=-DOS_$(OS) -DARCH_$(ARCH)
8610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
9610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
10610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovCFLAGS+=$(OPTFLAGS) $(ARCHFLAGS) $(OS_CFLAGS) $(DEFINES) $(EXTRA_CFLAGS)
11610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovCXXFLAGS+=$(OPTFLAGS) $(ARCHFLAGS) $(OS_CXXFLAGS) $(DEFINES) $(EXTRA_CXXFLAGS)
12610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovOPT_CXXFLAGS=$(CXXFLAGS) -O2 -g $(ARCHFLAGS) $(OS_CXXFLAGS) $(DEFINES) $(EXTRA_CXXFLAGS) -foptimize-sibling-calls
13610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifeq ($(OS), darwin)
14610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovLDFLAGS=$(LDOPT) $(ARCHFLAGS) $(STATICFLAGS) -framework Foundation
15610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovelse
16610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovLDFLAGS=$(LDOPT) $(ARCHFLAGS) $(STATICFLAGS)
17610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
18610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
19610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov# OS = linux, darwin, windows
20610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov# ARCH= x86, amd64
21610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov# OX = O0, O1, ...
22610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov# S= <empty>, -static
23610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovBUILD=${OS}-${ARCH}-${OX}${S}${EXTRA_BUILD_SUFFIX}
24610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovBIN=bin/
25610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
26610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifeq ($(OS), linux)
27610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  OS_CXXFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c++0x
28610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  OS_CFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c89
29610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  LIBS=-lpthread -lrt
30610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovelse ifeq ($(OS), darwin)
31610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  OS_CXXFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function
32610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  OS_CFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c89
33610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  LIBS=-lpthread
34610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovelse ifeq ($(OS), windows)
35610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  OS_CXXFLAGS=/EHs- /EHa- /wd4530   /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /Gy /D "WIN32"
36610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  OS_CFLAGS=/EHs- /EHa- /wd4530   /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /Gy /D "WIN32"
37610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovelse
38610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov  OS=UNKNOWN_OS
39610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
40610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
41610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovOUTPUT_TESTS_LIST=$(patsubst output_tests/%.cc,%,$(wildcard output_tests/*.cc))
42610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovOUTPUT_TESTS_OBJS=$(patsubst %,$(BIN)output_tests/%-$(BUILD)$(EXE),$(OUTPUT_TESTS_LIST))
43610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
44610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovall: $(BIN)racecheck_unittest-$(BUILD)$(EXE) $(BIN)demo_tests-$(BUILD)$(EXE) \
45610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov     $(BIN)bigtest-$(BUILD)$(EXE) output_tests \
46610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		 $(BIN)memory_unittest-$(BUILD)$(EXE)
47610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifeq ($(OS), linux)
48610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovall: $(BIN)deadlock_unittest-$(BUILD)$(EXE)
49610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
50610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
51610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovoutput_tests: bin/output_tests $(OUTPUT_TESTS_OBJS)
52610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
53610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovrun_output_tests: output_tests
54610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	BUILD=$(BUILD) BIN=$(BIN) ./run_output_tests.sh $(OUTPUT_TESTS_LIST)
55610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
56610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovw:
57610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	$(MAKE) all OS=windows ARCH=x86
58610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovm: m32 m64
59610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovm32:
60610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	$(MAKE) all OS=darwin ARCH=x86
61610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovm64:
62610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	$(MAKE) all OS=darwin ARCH=amd64
63610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovl: l32 l64
64610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovl32:
65610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	$(MAKE) all OS=linux ARCH=x86
66610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovl64:
67610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	$(MAKE) all OS=linux ARCH=amd64
68610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
69610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovbin:
70610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	mkdir -p bin
71610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovbin/output_tests:
72610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	mkdir -p bin/output_tests
73610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
74610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDYNAMIC_ANNOTATIONS_DIR=../dynamic_annotations
75610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDYNAMIC_ANNOTATIONS_H=${DYNAMIC_ANNOTATIONS_DIR}/dynamic_annotations.h
76610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDYNAMIC_ANNOTATIONS_C=${DYNAMIC_ANNOTATIONS_DIR}/dynamic_annotations.c
77610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifndef OMIT_DYNAMIC_ANNOTATIONS_IMPL
78610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDYNAMIC_ANNOTATIONS_O=$(BIN)dynamic_annotations-$(BUILD).$(OBJ)
79610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovelse
80610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDYNAMIC_ANNOTATIONS_O=
81610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
82610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovDYNAMIC_ANNOTATIONS=${DYNAMIC_ANNOTATIONS_C} ${DYNAMIC_ANNOTATIONS_H}
83610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
84610969f87667a485b9207086b3ff475bab909f95Evgeniy StepanovTEST_UTILS_O=$(BIN)test_utils-$(BUILD).$(OBJ)
85610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
86610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)racecheck_unittest-$(BUILD).$(OBJ) \
87610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	                                 $(BIN)old_test_suite-$(BUILD).$(OBJ) \
88610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov					 $(BIN)opt_tests-$(BUILD).$(OBJ) \
89610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov					 $(BIN)atomicity_tests-$(BUILD).$(OBJ) \
90610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		$(TEST_UTILS_O) $(GTEST_LIB)  ${DYNAMIC_ANNOTATIONS_O} | bin
91610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${LD} ${LDFLAGS} $^ $(LIBS) $(LINKO)$@
92610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
93610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifeq ($(OS), windows)
94610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)windows_tests-$(BUILD).$(OBJ)
95610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovelse
96610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)posix_tests-$(BUILD).$(OBJ)
97610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
98610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
99610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifeq ($(OS), linux)
100610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifndef OMIT_CPP0X
101610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)libstdc++_tests-$(BUILD).$(OBJ)
102610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
103610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
104610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
105610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovifeq ($(OS), darwin)
106610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)mac_tests-$(BUILD).$(OBJ)
107610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovendif
108610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
109610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)deadlock_unittest-$(BUILD)$(EXE): $(BIN)deadlock_unittest-$(BUILD).$(OBJ) $(BIN)old_test_suite-$(BUILD).$(OBJ) \
110610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		$(TEST_UTILS_O) $(GTEST_LIB)  ${DYNAMIC_ANNOTATIONS_O} | bin
111610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${LD} ${LDFLAGS} $^ $(LIBS) $(LINKO)$@
112610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
113610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)demo_tests-$(BUILD)$(EXE): $(BIN)demo_tests-$(BUILD).$(OBJ) \
114610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
115610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
116610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
117610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)output_tests/%-$(BUILD)$(EXE): $(BIN)output_tests/%-$(BUILD).$(OBJ) \
118610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		${TEST_UTILS_O} ${DYNAMIC_ANNOTATIONS_O} | bin
119610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
120610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
121610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)bigtest-$(BUILD)$(EXE): $(BIN)bigtest-$(BUILD).$(OBJ) ${DYNAMIC_ANNOTATIONS_O} | bin
122610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
123610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
124610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)memory_unittest-$(BUILD)$(EXE): $(BIN)memory_unittest-$(BUILD).$(OBJ) $(BIN)old_test_suite-$(BUILD).$(OBJ) \
125610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
126610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
127610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
128610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(BIN)%-$(BUILD).$(OBJ): %.cc ${DYNAMIC_ANNOTATIONS} thread_wrappers.h \
129610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		thread_wrappers_win.h thread_wrappers_pthread.h old_test_suite.h \
130610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		test_utils.h gtest_fixture_injection.h | bin
131610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${CXX} ${CXXFLAGS} \
132610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		 -I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
133610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
134610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
135610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(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
136610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${CXX} ${OPT_CXXFLAGS} \
137610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		 -I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
138610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
139610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
140610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov$(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
141610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${CXX} ${CXXFLAGS} \
142610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		 -I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
143610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
144610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
145610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
146610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov${DYNAMIC_ANNOTATIONS_O}: ${DYNAMIC_ANNOTATIONS_C}
147610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	${CC} ${CFLAGS} $< \
148610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		-I${DYNAMIC_ANNOTATIONS_DIR} -DDYNAMIC_ANNOTATIONS_ENABLED=1 \
149610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov		-c $(O)$@
150610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov
151610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovclean: GTEST_CLEAN
152610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov	rm -rf bin racecheck_unittest demo_tests bigtest *.o *.O1 *.O2 *.obj *.dSYM *.exe *.pdb *.ilk *.idb *.manifest
153