DEBUG=0 LDFLAGS=-ldl -lpthread -pie CXXFLAGS = -fPIE -g -Wall -Werror -DTSAN_DEBUG=$(DEBUG) # Silence warnings that Clang produces for gtest code. # Use -Wno-attributes so that gcc doesn't complain about unknown warning types. CXXFLAGS += -Wno-attributes ifeq ($(DEBUG), 0) CXXFLAGS += -O3 endif ifeq ($(CXX), clang++) CXXFLAGS+= -Wno-unused-private-field -Wno-static-in-inline endif LIBTSAN=rtl/libtsan.a GTEST_ROOT=third_party/googletest GTEST_INCLUDE=-I$(GTEST_ROOT)/include GTEST_BUILD_DIR=$(GTEST_ROOT)/build GTEST_LIB=$(GTEST_BUILD_DIR)/gtest-all.o SANITIZER_COMMON_TESTS_SRC=$(wildcard ../sanitizer_common/tests/*_test.cc) SANITIZER_COMMON_TESTS_OBJ=$(patsubst %.cc,%.o,$(SANITIZER_COMMON_TESTS_SRC)) RTL_TEST_SRC=$(wildcard tests/rtl/*.cc) RTL_TEST_OBJ=$(patsubst %.cc,%.o,$(RTL_TEST_SRC)) UNIT_TEST_SRC=$(wildcard tests/unit/*_test.cc) UNIT_TEST_OBJ=$(patsubst %.cc,%.o,$(UNIT_TEST_SRC)) UNIT_TEST_HDR=$(wildcard rtl/*.h) $(wildcard ../sanitizer_common/*.h) INCLUDES=-Irtl -I.. -I../../include $(GTEST_INCLUDE) all: libtsan test help: @ echo "A little help is always welcome!" @ echo "The most useful targets are:" @ echo " make install_deps # Install third-party dependencies required for building" @ echo " make presubmit # Run it every time before committing" @ echo @ echo "For more info, see http://code.google.com/p/data-race-test/wiki/ThreadSanitizer2" $(LIBTSAN): libtsan libtsan: $(MAKE) -C rtl -f Makefile.old DEBUG=$(DEBUG) %.o: %.cc $(UNIT_TEST_HDR) $(LIBTSAN) $(CXX) $(CXXFLAGS) $(CFLAGS) $(INCLUDES) -o $@ -c $< tsan_test: $(UNIT_TEST_OBJ) $(RTL_TEST_OBJ) \ $(SANITIZER_COMMON_TESTS_OBJ) $(LIBTSAN) $(GTEST_LIB) $(CXX) $^ -o $@ $(LDFLAGS) test: libtsan tsan_test run: all (ulimit -s 8192; ./tsan_test) ./lit_tests/test_output.sh presubmit: # Debug build with clang. $(MAKE) -f Makefile.old clean $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=clang CXX=clang++ # Release build with clang. $(MAKE) -f Makefile.old clean $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=clang CXX=clang++ # Debug build with gcc $(MAKE) -f Makefile.old clean $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++ # Release build with gcc $(MAKE) -f Makefile.old clean $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++ ./check_analyze.sh @ echo PRESUBMIT PASSED install_deps: rm -rf third_party mkdir third_party (cd third_party && \ svn co -r613 http://googletest.googlecode.com/svn/trunk googletest \ ) $(GTEST_LIB): mkdir -p $(GTEST_BUILD_DIR) && \ cd $(GTEST_BUILD_DIR) && \ $(MAKE) -f ../make/Makefile CXXFLAGS="$(CXXFLAGS)" CFLAGS="$(CFLAGS)" CC=$(CC) CXX=$(CXX) clean: rm -f asm_*.s libtsan.nm libtsan.objdump */*.o tsan_test rm -rf $(GTEST_BUILD_DIR) $(MAKE) clean -C rtl -f Makefile.old