]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | DEBUG=0 |
2 | LDFLAGS=-ldl -lrt -lpthread -pie | |
3 | CXXFLAGS = -std=c++11 -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 | LIT_TESTS_PATH=../../test/tsan | |
35 | ||
36 | INCLUDES=-Irtl -I.. -I../../include $(GTEST_INCLUDE) | |
37 | ||
38 | all: libtsan test | |
39 | ||
40 | help: | |
41 | @ echo "A little help is always welcome!" | |
42 | @ echo "The most useful targets are:" | |
43 | @ echo " make install_deps # Install third-party dependencies required for building" | |
44 | @ echo " make presubmit # Run it every time before committing" | |
45 | @ echo | |
46 | @ echo "For more info, see http://code.google.com/p/thread-sanitizer/wiki/Development" | |
47 | ||
48 | $(LIBTSAN): libtsan | |
49 | ||
50 | libtsan: | |
51 | $(MAKE) -C rtl -f Makefile.old DEBUG=$(DEBUG) | |
52 | ||
53 | %.o: %.cc $(UNIT_TEST_HDR) $(LIBTSAN) | |
54 | $(CXX) $(CXXFLAGS) $(CFLAGS) $(INCLUDES) -o $@ -c $< | |
55 | ||
56 | tsan_test: $(UNIT_TEST_OBJ) $(RTL_TEST_OBJ) \ | |
57 | $(SANITIZER_COMMON_TESTS_OBJ) $(LIBTSAN) $(GTEST_LIB) | |
58 | $(CXX) -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ $(LDFLAGS) | |
59 | ||
60 | test: libtsan tsan_test | |
61 | ||
62 | run: all | |
63 | (ulimit -s 8192; ./tsan_test) | |
64 | CC=$(CLANG) CXX=$(CLANG)++ FILECHECK=$(FILECHECK) $(LIT_TESTS_PATH)/test_output.sh | |
65 | ||
66 | presubmit: | |
67 | ../sanitizer_common/scripts/check_lint.sh | |
68 | # Debug build with clang. | |
69 | $(MAKE) -f Makefile.old clean | |
70 | $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=$(CLANG) CXX=$(CLANG)++ | |
71 | # Release build with clang. | |
72 | $(MAKE) -f Makefile.old clean | |
73 | $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=$(CLANG) CXX=$(CLANG)++ | |
74 | ./check_memcpy.sh | |
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_memcpy.sh | |
82 | ./check_analyze.sh | |
83 | # Sanity check for Go runtime | |
84 | (cd go && ./buildgo.sh) | |
85 | # Check cmake build | |
86 | ./check_cmake.sh | |
87 | @ echo PRESUBMIT PASSED | |
88 | ||
89 | install_deps: | |
90 | rm -rf third_party | |
91 | mkdir third_party | |
92 | (cd third_party && \ | |
93 | svn co -r613 http://googletest.googlecode.com/svn/trunk googletest \ | |
94 | ) | |
95 | ||
96 | $(GTEST_LIB): | |
97 | mkdir -p $(GTEST_BUILD_DIR) && \ | |
98 | cd $(GTEST_BUILD_DIR) && \ | |
99 | $(MAKE) -f ../make/Makefile CXXFLAGS="$(CXXFLAGS)" CFLAGS="$(CFLAGS)" CC=$(CC) CXX=$(CXX) $(GTEST_LIB_NAME) | |
100 | ||
101 | clean: | |
102 | rm -f asm_*.s libtsan.nm libtsan.objdump */*.o tsan_test | |
103 | rm -rf $(GTEST_BUILD_DIR) | |
104 | $(MAKE) clean -C rtl -f Makefile.old | |
105 | rm -f go/*.s | |
106 | rm -rf build |