SVN_ROOT=..
include ../common.mk
ifeq ($(OS), darwin)
DEFINES=-DOS_$(OS) -DARCH_$(ARCH) -DOS_$(DARWIN_VERSION)
else
DEFINES=-DOS_$(OS) -DARCH_$(ARCH)
endif
CFLAGS+=$(OPTFLAGS) $(ARCHFLAGS) $(OS_CFLAGS) $(DEFINES) $(EXTRA_CFLAGS)
CXXFLAGS+=$(OPTFLAGS) $(ARCHFLAGS) $(OS_CXXFLAGS) $(DEFINES) $(EXTRA_CXXFLAGS)
OPT_CXXFLAGS=$(CXXFLAGS) -O2 -g $(ARCHFLAGS) $(OS_CXXFLAGS) $(DEFINES) $(EXTRA_CXXFLAGS) -foptimize-sibling-calls
ifeq ($(OS), darwin)
LDFLAGS=$(LDOPT) $(ARCHFLAGS) $(STATICFLAGS) -framework Foundation
else
LDFLAGS=$(LDOPT) $(ARCHFLAGS) $(STATICFLAGS)
endif
# OS = linux, darwin, windows
# ARCH= x86, amd64
# OX = O0, O1, ...
# S= <empty>, -static
BUILD=${OS}-${ARCH}-${OX}${S}${EXTRA_BUILD_SUFFIX}
BIN=bin/
ifeq ($(OS), linux)
OS_CXXFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c++0x
OS_CFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c89
LIBS=-lpthread -lrt
else ifeq ($(OS), darwin)
OS_CXXFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function
OS_CFLAGS=-Wall -Werror -Wno-sign-compare -Wshadow -Wno-unused-function -std=c89
LIBS=-lpthread
else ifeq ($(OS), windows)
OS_CXXFLAGS=/EHs- /EHa- /wd4530 /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /Gy /D "WIN32"
OS_CFLAGS=/EHs- /EHa- /wd4530 /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /Gy /D "WIN32"
else
OS=UNKNOWN_OS
endif
OUTPUT_TESTS_LIST=$(patsubst output_tests/%.cc,%,$(wildcard output_tests/*.cc))
OUTPUT_TESTS_OBJS=$(patsubst %,$(BIN)output_tests/%-$(BUILD)$(EXE),$(OUTPUT_TESTS_LIST))
all: $(BIN)racecheck_unittest-$(BUILD)$(EXE) $(BIN)demo_tests-$(BUILD)$(EXE) \
$(BIN)bigtest-$(BUILD)$(EXE) output_tests \
$(BIN)memory_unittest-$(BUILD)$(EXE)
ifeq ($(OS), linux)
all: $(BIN)deadlock_unittest-$(BUILD)$(EXE)
endif
output_tests: bin/output_tests $(OUTPUT_TESTS_OBJS)
run_output_tests: output_tests
BUILD=$(BUILD) BIN=$(BIN) ./run_output_tests.sh $(OUTPUT_TESTS_LIST)
w:
$(MAKE) all OS=windows ARCH=x86
m: m32 m64
m32:
$(MAKE) all OS=darwin ARCH=x86
m64:
$(MAKE) all OS=darwin ARCH=amd64
l: l32 l64
l32:
$(MAKE) all OS=linux ARCH=x86
l64:
$(MAKE) all OS=linux ARCH=amd64
bin:
mkdir -p bin
bin/output_tests:
mkdir -p bin/output_tests
DYNAMIC_ANNOTATIONS_DIR=../dynamic_annotations
DYNAMIC_ANNOTATIONS_H=${DYNAMIC_ANNOTATIONS_DIR}/dynamic_annotations.h
DYNAMIC_ANNOTATIONS_C=${DYNAMIC_ANNOTATIONS_DIR}/dynamic_annotations.c
ifndef OMIT_DYNAMIC_ANNOTATIONS_IMPL
DYNAMIC_ANNOTATIONS_O=$(BIN)dynamic_annotations-$(BUILD).$(OBJ)
else
DYNAMIC_ANNOTATIONS_O=
endif
DYNAMIC_ANNOTATIONS=${DYNAMIC_ANNOTATIONS_C} ${DYNAMIC_ANNOTATIONS_H}
TEST_UTILS_O=$(BIN)test_utils-$(BUILD).$(OBJ)
$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)racecheck_unittest-$(BUILD).$(OBJ) \
$(BIN)old_test_suite-$(BUILD).$(OBJ) \
$(BIN)opt_tests-$(BUILD).$(OBJ) \
$(BIN)atomicity_tests-$(BUILD).$(OBJ) \
$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
${LD} ${LDFLAGS} $^ $(LIBS) $(LINKO)$@
ifeq ($(OS), windows)
$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)windows_tests-$(BUILD).$(OBJ)
else
$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)posix_tests-$(BUILD).$(OBJ)
endif
ifeq ($(OS), linux)
ifndef OMIT_CPP0X
$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)libstdc++_tests-$(BUILD).$(OBJ)
endif
endif
ifeq ($(OS), darwin)
$(BIN)racecheck_unittest-$(BUILD)$(EXE): $(BIN)mac_tests-$(BUILD).$(OBJ)
endif
$(BIN)deadlock_unittest-$(BUILD)$(EXE): $(BIN)deadlock_unittest-$(BUILD).$(OBJ) $(BIN)old_test_suite-$(BUILD).$(OBJ) \
$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
${LD} ${LDFLAGS} $^ $(LIBS) $(LINKO)$@
$(BIN)demo_tests-$(BUILD)$(EXE): $(BIN)demo_tests-$(BUILD).$(OBJ) \
$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
$(BIN)output_tests/%-$(BUILD)$(EXE): $(BIN)output_tests/%-$(BUILD).$(OBJ) \
${TEST_UTILS_O} ${DYNAMIC_ANNOTATIONS_O} | bin
${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
$(BIN)bigtest-$(BUILD)$(EXE): $(BIN)bigtest-$(BUILD).$(OBJ) ${DYNAMIC_ANNOTATIONS_O} | bin
${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
$(BIN)memory_unittest-$(BUILD)$(EXE): $(BIN)memory_unittest-$(BUILD).$(OBJ) $(BIN)old_test_suite-$(BUILD).$(OBJ) \
$(TEST_UTILS_O) $(GTEST_LIB) ${DYNAMIC_ANNOTATIONS_O} | bin
${LD} $(LDFLAGS) $^ $(LIBS) $(LINKO)$@
$(BIN)%-$(BUILD).$(OBJ): %.cc ${DYNAMIC_ANNOTATIONS} thread_wrappers.h \
thread_wrappers_win.h thread_wrappers_pthread.h old_test_suite.h \
test_utils.h gtest_fixture_injection.h | bin
${CXX} ${CXXFLAGS} \
-I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
-DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
$(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
${CXX} ${OPT_CXXFLAGS} \
-I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
-DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
$(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
${CXX} ${CXXFLAGS} \
-I${DYNAMIC_ANNOTATIONS_DIR} -I${GTEST_ROOT}/include -I. \
-DDYNAMIC_ANNOTATIONS_ENABLED=1 -c $< $(O)$@
${DYNAMIC_ANNOTATIONS_O}: ${DYNAMIC_ANNOTATIONS_C}
${CC} ${CFLAGS} $< \
-I${DYNAMIC_ANNOTATIONS_DIR} -DDYNAMIC_ANNOTATIONS_ENABLED=1 \
-c $(O)$@
clean: GTEST_CLEAN
rm -rf bin racecheck_unittest demo_tests bigtest *.o *.O1 *.O2 *.obj *.dSYM *.exe *.pdb *.ilk *.idb *.manifest