]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/compiler-rt/lib/tsan/Makefile.old
MFV r277607:
[FreeBSD/FreeBSD.git] / contrib / compiler-rt / lib / tsan / Makefile.old
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