1 DEBUG=0 2 LDFLAGS=-ldl -lpthread -pie 3 CXXFLAGS = -fPIE -fno-rtti -g -Wall -Werror \ 4 -DGTEST_HAS_RTTI=0 -DTSAN_DEBUG=$(DEBUG) -DSANITIZER_DEBUG=$(DEBUG) 5 CLANG=clang 6 FILECHECK=FileCheck 7 # Silence warnings that Clang produces for gtest code. 8 # Use -Wno-attributes so that gcc doesn't complain about unknown warning types. 9 CXXFLAGS += -Wno-attributes 10 ifeq ($(DEBUG), 0) 11 CXXFLAGS += -O3 12 endif 13 ifeq ($(CXX), $(CLANG)++) 14 CXXFLAGS+= -Wno-unused-private-field -Wno-static-in-inline -Wgnu 15 endif 16 17 LIBTSAN=rtl/libtsan.a 18 GTEST_ROOT=third_party/googletest 19 GTEST_INCLUDE=-I$(GTEST_ROOT)/include 20 GTEST_BUILD_DIR=$(GTEST_ROOT)/build 21 GTEST_LIB_NAME=gtest-all.o 22 GTEST_LIB=$(GTEST_BUILD_DIR)/$(GTEST_LIB_NAME) 23 24 SANITIZER_TESTS_PATH=../sanitizer_common/tests 25 SANITIZER_COMMON_TESTS_SRC=$(wildcard $(SANITIZER_TESTS_PATH)/*_test.cc) 26 SANITIZER_COMMON_EXCLUDED_TESTS=$(SANITIZER_TESTS_PATH)/sanitizer_nolibc_test.cc 27 SANITIZER_COMMON_GOOD_TESTS=$(filter-out $(SANITIZER_COMMON_EXCLUDED_TESTS), $(SANITIZER_COMMON_TESTS_SRC)) 28 SANITIZER_COMMON_TESTS_OBJ=$(patsubst %.cc,%.o,$(SANITIZER_COMMON_GOOD_TESTS)) 29 RTL_TEST_SRC=$(wildcard tests/rtl/*.cc) 30 RTL_TEST_OBJ=$(patsubst %.cc,%.o,$(RTL_TEST_SRC)) 31 UNIT_TEST_SRC=$(wildcard tests/unit/*_test.cc) 32 UNIT_TEST_OBJ=$(patsubst %.cc,%.o,$(UNIT_TEST_SRC)) 33 UNIT_TEST_HDR=$(wildcard rtl/*.h) $(wildcard ../sanitizer_common/*.h) 34 35 INCLUDES=-Irtl -I.. -I../../include $(GTEST_INCLUDE) 36 37 all: libtsan test 38 39 help: 40 @ echo "A little help is always welcome!" 41 @ echo "The most useful targets are:" 42 @ echo " make install_deps # Install third-party dependencies required for building" 43 @ echo " make presubmit # Run it every time before committing" 44 @ echo 45 @ echo "For more info, see http://code.google.com/p/thread-sanitizer/wiki/Development" 46 47 $(LIBTSAN): libtsan 48 49 libtsan: 50 $(MAKE) -C rtl -f Makefile.old DEBUG=$(DEBUG) 51 52 %.o: %.cc $(UNIT_TEST_HDR) $(LIBTSAN) 53 $(CXX) $(CXXFLAGS) $(CFLAGS) $(INCLUDES) -o $@ -c $< 54 55 tsan_test: $(UNIT_TEST_OBJ) $(RTL_TEST_OBJ) \ 56 $(SANITIZER_COMMON_TESTS_OBJ) $(LIBTSAN) $(GTEST_LIB) 57 $(CXX) $^ -o $@ $(LDFLAGS) 58 59 test: libtsan tsan_test 60 61 run: all 62 (ulimit -s 8192; ./tsan_test) 63 CC=$(CLANG) CXX=$(CLANG)++ FILECHECK=$(FILECHECK) ./lit_tests/test_output.sh 64 65 presubmit: 66 ../sanitizer_common/scripts/check_lint.sh 67 #./gen_dynamic_list.sh > rtl/tsan.syms.new 68 #diff rtl/tsan.syms rtl/tsan.syms.new 69 # Debug build with clang. 70 $(MAKE) -f Makefile.old clean 71 $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=$(CLANG) CXX=$(CLANG)++ 72 # Release build with clang. 73 $(MAKE) -f Makefile.old clean 74 $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=$(CLANG) CXX=$(CLANG)++ 75 # Debug build with gcc 76 $(MAKE) -f Makefile.old clean 77 $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++ 78 # Release build with gcc 79 $(MAKE) -f Makefile.old clean 80 $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++ 81 ./check_analyze.sh 82 # Sanity check for Go runtime 83 (cd go && ./buildgo.sh) 84 # Check cmake build 85 ./check_cmake.sh 86 @ echo PRESUBMIT PASSED 87 88 install_deps: 89 rm -rf third_party 90 mkdir third_party 91 (cd third_party && \ 92 svn co -r613 http://googletest.googlecode.com/svn/trunk googletest \ 93 ) 94 95 $(GTEST_LIB): 96 mkdir -p $(GTEST_BUILD_DIR) && \ 97 cd $(GTEST_BUILD_DIR) && \ 98 $(MAKE) -f ../make/Makefile CXXFLAGS="$(CXXFLAGS)" CFLAGS="$(CFLAGS)" CC=$(CC) CXX=$(CXX) $(GTEST_LIB_NAME) 99 100 clean: 101 rm -f asm_*.s libtsan.nm libtsan.objdump */*.o tsan_test 102 rm -rf $(GTEST_BUILD_DIR) 103 $(MAKE) clean -C rtl -f Makefile.old 104 rm -f go/*.s 105 rm -rf build 106