blob: b2ac912d741d14fc5d68e3ebb16c45f854c38eb6 [file] [log] [blame]
Kostya Serebryanyb82ae882012-05-10 15:10:03 +00001DEBUG=0
Stephen Hines2d1fdb22014-05-28 23:58:16 -07002LDFLAGS=-ldl -lrt -lpthread -pie
3CXXFLAGS = -std=c++11 -fPIE -fno-rtti -g -Wall -Werror \
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -07004 -DGTEST_HAS_RTTI=0 -DSANITIZER_DEBUG=$(DEBUG) \
5 -DTSAN_CONTAINS_UBSAN=0
Alexey Samsonov5c889362013-03-18 07:00:36 +00006CLANG=clang
Alexey Samsonov6a7c51d2013-04-04 12:18:12 +00007FILECHECK=FileCheck
Alexey Samsonov0a9d8912012-06-19 07:38:11 +00008# Silence warnings that Clang produces for gtest code.
9# Use -Wno-attributes so that gcc doesn't complain about unknown warning types.
Dmitry Vyukova3eca812012-06-29 17:32:18 +000010CXXFLAGS += -Wno-attributes
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000011ifeq ($(DEBUG), 0)
12 CXXFLAGS += -O3
13endif
Alexey Samsonov5c889362013-03-18 07:00:36 +000014ifeq ($(CXX), $(CLANG)++)
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070015 CXXFLAGS += -Wno-unused-private-field -Wno-static-in-inline -Wgnu
16else
17 CXXFLAGS += -Wno-maybe-uninitialized
Dmitry Vyukovaa7bb262012-06-29 16:37:49 +000018endif
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000019
20LIBTSAN=rtl/libtsan.a
21GTEST_ROOT=third_party/googletest
22GTEST_INCLUDE=-I$(GTEST_ROOT)/include
23GTEST_BUILD_DIR=$(GTEST_ROOT)/build
Alexey Samsonov1e3657c2012-12-19 09:19:57 +000024GTEST_LIB_NAME=gtest-all.o
25GTEST_LIB=$(GTEST_BUILD_DIR)/$(GTEST_LIB_NAME)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000026
Alexey Samsonov616659a2013-05-29 09:40:07 +000027SANITIZER_TESTS_PATH=../sanitizer_common/tests
28SANITIZER_COMMON_TESTS_SRC=$(wildcard $(SANITIZER_TESTS_PATH)/*_test.cc)
29SANITIZER_COMMON_EXCLUDED_TESTS=$(SANITIZER_TESTS_PATH)/sanitizer_nolibc_test.cc
30SANITIZER_COMMON_GOOD_TESTS=$(filter-out $(SANITIZER_COMMON_EXCLUDED_TESTS), $(SANITIZER_COMMON_TESTS_SRC))
31SANITIZER_COMMON_TESTS_OBJ=$(patsubst %.cc,%.o,$(SANITIZER_COMMON_GOOD_TESTS))
Alexey Samsonovf548ef82012-09-17 10:02:17 +000032RTL_TEST_SRC=$(wildcard tests/rtl/*.cc)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000033RTL_TEST_OBJ=$(patsubst %.cc,%.o,$(RTL_TEST_SRC))
Alexey Samsonovf548ef82012-09-17 10:02:17 +000034UNIT_TEST_SRC=$(wildcard tests/unit/*_test.cc)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000035UNIT_TEST_OBJ=$(patsubst %.cc,%.o,$(UNIT_TEST_SRC))
Kostya Serebryanyc3756572012-06-21 10:04:36 +000036UNIT_TEST_HDR=$(wildcard rtl/*.h) $(wildcard ../sanitizer_common/*.h)
Stephen Hines2d1fdb22014-05-28 23:58:16 -070037LIT_TESTS_PATH=../../test/tsan
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000038
Kostya Serebryany5f0297b2012-08-29 08:21:09 +000039INCLUDES=-Irtl -I.. -I../../include $(GTEST_INCLUDE)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000040
Kostya Serebryany35479242012-05-17 08:33:14 +000041all: libtsan test
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000042
43help:
44 @ echo "A little help is always welcome!"
45 @ echo "The most useful targets are:"
46 @ echo " make install_deps # Install third-party dependencies required for building"
47 @ echo " make presubmit # Run it every time before committing"
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000048 @ echo
Dmitry Vyukovb75c67b2012-12-19 06:59:45 +000049 @ echo "For more info, see http://code.google.com/p/thread-sanitizer/wiki/Development"
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000050
Kostya Serebryany35479242012-05-17 08:33:14 +000051$(LIBTSAN): libtsan
52
53libtsan:
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000054 $(MAKE) -C rtl -f Makefile.old DEBUG=$(DEBUG)
55
Kostya Serebryany389b74b2012-07-18 16:04:55 +000056%.o: %.cc $(UNIT_TEST_HDR) $(LIBTSAN)
Dmitry Vyukov40565ce2012-05-28 14:15:39 +000057 $(CXX) $(CXXFLAGS) $(CFLAGS) $(INCLUDES) -o $@ -c $<
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000058
Alexey Samsonovc3d16982012-07-02 14:35:25 +000059tsan_test: $(UNIT_TEST_OBJ) $(RTL_TEST_OBJ) \
Kostya Serebryany69850852012-06-20 15:19:17 +000060 $(SANITIZER_COMMON_TESTS_OBJ) $(LIBTSAN) $(GTEST_LIB)
Alexey Samsonovcac631e2013-09-11 11:06:06 +000061 $(CXX) -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ $(LDFLAGS)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000062
Kostya Serebryany35479242012-05-17 08:33:14 +000063test: libtsan tsan_test
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000064
65run: all
66 (ulimit -s 8192; ./tsan_test)
Stephen Hines2d1fdb22014-05-28 23:58:16 -070067 CC=$(CLANG) CXX=$(CLANG)++ FILECHECK=$(FILECHECK) $(LIT_TESTS_PATH)/test_output.sh
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000068
69presubmit:
Dmitry Vyukove6867ac2012-12-19 08:53:31 +000070 ../sanitizer_common/scripts/check_lint.sh
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000071 # Debug build with clang.
72 $(MAKE) -f Makefile.old clean
Alexey Samsonov5c889362013-03-18 07:00:36 +000073 $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=$(CLANG) CXX=$(CLANG)++
Kostya Serebryany3d6ae152012-05-11 14:42:24 +000074 # Release build with clang.
75 $(MAKE) -f Makefile.old clean
Alexey Samsonov5c889362013-03-18 07:00:36 +000076 $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=$(CLANG) CXX=$(CLANG)++
Stephen Hines2d1fdb22014-05-28 23:58:16 -070077 ./check_memcpy.sh
Kostya Serebryany3d6ae152012-05-11 14:42:24 +000078 # Debug build with gcc
79 $(MAKE) -f Makefile.old clean
80 $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++
81 # Release build with gcc
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000082 $(MAKE) -f Makefile.old clean
83 $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++
Stephen Hines2d1fdb22014-05-28 23:58:16 -070084 ./check_memcpy.sh
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000085 ./check_analyze.sh
Dmitry Vyukovff6e6c32012-12-14 10:10:57 +000086 # Sanity check for Go runtime
87 (cd go && ./buildgo.sh)
Dmitry Vyukov98263a12012-12-20 14:10:27 +000088 # Check cmake build
89 ./check_cmake.sh
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000090 @ echo PRESUBMIT PASSED
91
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000092install_deps:
93 rm -rf third_party
94 mkdir third_party
95 (cd third_party && \
Alexey Samsonov184fdd72012-08-31 08:10:28 +000096 svn co -r613 http://googletest.googlecode.com/svn/trunk googletest \
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000097 )
98
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000099$(GTEST_LIB):
100 mkdir -p $(GTEST_BUILD_DIR) && \
101 cd $(GTEST_BUILD_DIR) && \
Alexey Samsonov1e3657c2012-12-19 09:19:57 +0000102 $(MAKE) -f ../make/Makefile CXXFLAGS="$(CXXFLAGS)" CFLAGS="$(CFLAGS)" CC=$(CC) CXX=$(CXX) $(GTEST_LIB_NAME)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +0000103
104clean:
105 rm -f asm_*.s libtsan.nm libtsan.objdump */*.o tsan_test
106 rm -rf $(GTEST_BUILD_DIR)
107 $(MAKE) clean -C rtl -f Makefile.old
Alexey Samsonovfcc7c8c2013-02-01 15:30:36 +0000108 rm -f go/*.s
Alexey Samsonov55249d12013-02-25 08:32:02 +0000109 rm -rf build