Home | History | Annotate | Download | only in tsan
      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