blob: c10d49842cac563f0c4c91b94032ccce6acd6ec2 [file] [log] [blame]
Kostya Serebryanyb82ae882012-05-10 15:10:03 +00001DEBUG=0
2LDFLAGS=-ldl -lpthread -pie
Alexey Samsonov5c889362013-03-18 07:00:36 +00003CXXFLAGS = -fPIE -fno-rtti -g -Wall -Werror \
4 -DGTEST_HAS_RTTI=0 -DTSAN_DEBUG=$(DEBUG) -DSANITIZER_DEBUG=$(DEBUG)
5CLANG=clang
Alexey Samsonov6a7c51d2013-04-04 12:18:12 +00006FILECHECK=FileCheck
Alexey Samsonov0a9d8912012-06-19 07:38:11 +00007# Silence warnings that Clang produces for gtest code.
8# Use -Wno-attributes so that gcc doesn't complain about unknown warning types.
Dmitry Vyukova3eca812012-06-29 17:32:18 +00009CXXFLAGS += -Wno-attributes
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000010ifeq ($(DEBUG), 0)
11 CXXFLAGS += -O3
12endif
Alexey Samsonov5c889362013-03-18 07:00:36 +000013ifeq ($(CXX), $(CLANG)++)
Dmitry Vyukovb75c67b2012-12-19 06:59:45 +000014 CXXFLAGS+= -Wno-unused-private-field -Wno-static-in-inline -Wgnu
Dmitry Vyukovaa7bb262012-06-29 16:37:49 +000015endif
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000016
17LIBTSAN=rtl/libtsan.a
18GTEST_ROOT=third_party/googletest
19GTEST_INCLUDE=-I$(GTEST_ROOT)/include
20GTEST_BUILD_DIR=$(GTEST_ROOT)/build
Alexey Samsonov1e3657c2012-12-19 09:19:57 +000021GTEST_LIB_NAME=gtest-all.o
22GTEST_LIB=$(GTEST_BUILD_DIR)/$(GTEST_LIB_NAME)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000023
Alexey Samsonov616659a2013-05-29 09:40:07 +000024SANITIZER_TESTS_PATH=../sanitizer_common/tests
25SANITIZER_COMMON_TESTS_SRC=$(wildcard $(SANITIZER_TESTS_PATH)/*_test.cc)
26SANITIZER_COMMON_EXCLUDED_TESTS=$(SANITIZER_TESTS_PATH)/sanitizer_nolibc_test.cc
27SANITIZER_COMMON_GOOD_TESTS=$(filter-out $(SANITIZER_COMMON_EXCLUDED_TESTS), $(SANITIZER_COMMON_TESTS_SRC))
28SANITIZER_COMMON_TESTS_OBJ=$(patsubst %.cc,%.o,$(SANITIZER_COMMON_GOOD_TESTS))
Alexey Samsonovf548ef82012-09-17 10:02:17 +000029RTL_TEST_SRC=$(wildcard tests/rtl/*.cc)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000030RTL_TEST_OBJ=$(patsubst %.cc,%.o,$(RTL_TEST_SRC))
Alexey Samsonovf548ef82012-09-17 10:02:17 +000031UNIT_TEST_SRC=$(wildcard tests/unit/*_test.cc)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000032UNIT_TEST_OBJ=$(patsubst %.cc,%.o,$(UNIT_TEST_SRC))
Kostya Serebryanyc3756572012-06-21 10:04:36 +000033UNIT_TEST_HDR=$(wildcard rtl/*.h) $(wildcard ../sanitizer_common/*.h)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000034
Kostya Serebryany5f0297b2012-08-29 08:21:09 +000035INCLUDES=-Irtl -I.. -I../../include $(GTEST_INCLUDE)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000036
Kostya Serebryany35479242012-05-17 08:33:14 +000037all: libtsan test
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000038
39help:
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"
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000044 @ echo
Dmitry Vyukovb75c67b2012-12-19 06:59:45 +000045 @ echo "For more info, see http://code.google.com/p/thread-sanitizer/wiki/Development"
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000046
Kostya Serebryany35479242012-05-17 08:33:14 +000047$(LIBTSAN): libtsan
48
49libtsan:
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000050 $(MAKE) -C rtl -f Makefile.old DEBUG=$(DEBUG)
51
Kostya Serebryany389b74b2012-07-18 16:04:55 +000052%.o: %.cc $(UNIT_TEST_HDR) $(LIBTSAN)
Dmitry Vyukov40565ce2012-05-28 14:15:39 +000053 $(CXX) $(CXXFLAGS) $(CFLAGS) $(INCLUDES) -o $@ -c $<
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000054
Alexey Samsonovc3d16982012-07-02 14:35:25 +000055tsan_test: $(UNIT_TEST_OBJ) $(RTL_TEST_OBJ) \
Kostya Serebryany69850852012-06-20 15:19:17 +000056 $(SANITIZER_COMMON_TESTS_OBJ) $(LIBTSAN) $(GTEST_LIB)
Alexey Samsonovcac631e2013-09-11 11:06:06 +000057 $(CXX) -Wl,--whole-archive $^ -Wl,--no-whole-archive -o $@ $(LDFLAGS)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000058
Kostya Serebryany35479242012-05-17 08:33:14 +000059test: libtsan tsan_test
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000060
61run: all
62 (ulimit -s 8192; ./tsan_test)
Alexey Samsonov6a7c51d2013-04-04 12:18:12 +000063 CC=$(CLANG) CXX=$(CLANG)++ FILECHECK=$(FILECHECK) ./lit_tests/test_output.sh
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000064
65presubmit:
Dmitry Vyukove6867ac2012-12-19 08:53:31 +000066 ../sanitizer_common/scripts/check_lint.sh
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000067 # Debug build with clang.
68 $(MAKE) -f Makefile.old clean
Alexey Samsonov5c889362013-03-18 07:00:36 +000069 $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=$(CLANG) CXX=$(CLANG)++
Kostya Serebryany3d6ae152012-05-11 14:42:24 +000070 # Release build with clang.
71 $(MAKE) -f Makefile.old clean
Alexey Samsonov5c889362013-03-18 07:00:36 +000072 $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=$(CLANG) CXX=$(CLANG)++
Kostya Serebryany3d6ae152012-05-11 14:42:24 +000073 # Debug build with gcc
74 $(MAKE) -f Makefile.old clean
75 $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++
76 # Release build with gcc
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000077 $(MAKE) -f Makefile.old clean
78 $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++
79 ./check_analyze.sh
Dmitry Vyukovff6e6c32012-12-14 10:10:57 +000080 # Sanity check for Go runtime
81 (cd go && ./buildgo.sh)
Dmitry Vyukov98263a12012-12-20 14:10:27 +000082 # Check cmake build
83 ./check_cmake.sh
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000084 @ echo PRESUBMIT PASSED
85
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000086install_deps:
87 rm -rf third_party
88 mkdir third_party
89 (cd third_party && \
Alexey Samsonov184fdd72012-08-31 08:10:28 +000090 svn co -r613 http://googletest.googlecode.com/svn/trunk googletest \
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000091 )
92
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000093$(GTEST_LIB):
94 mkdir -p $(GTEST_BUILD_DIR) && \
95 cd $(GTEST_BUILD_DIR) && \
Alexey Samsonov1e3657c2012-12-19 09:19:57 +000096 $(MAKE) -f ../make/Makefile CXXFLAGS="$(CXXFLAGS)" CFLAGS="$(CFLAGS)" CC=$(CC) CXX=$(CXX) $(GTEST_LIB_NAME)
Kostya Serebryanyb82ae882012-05-10 15:10:03 +000097
98clean:
99 rm -f asm_*.s libtsan.nm libtsan.objdump */*.o tsan_test
100 rm -rf $(GTEST_BUILD_DIR)
101 $(MAKE) clean -C rtl -f Makefile.old
Alexey Samsonovfcc7c8c2013-02-01 15:30:36 +0000102 rm -f go/*.s
Alexey Samsonov55249d12013-02-25 08:32:02 +0000103 rm -rf build