summaryrefslogtreecommitdiffstats
path: root/lib/tsan/Makefile.old
blob: 2091f61335e90ca0b904bbfeed2fe1d20e043e61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
DEBUG=0
LDFLAGS=-ldl -lpthread -pie
CXXFLAGS = -fPIE -g -Wall -Werror -DTSAN_DEBUG=$(DEBUG)
# Silence warnings that Clang produces for gtest code.
# Use -Wno-attributes so that gcc doesn't complain about unknown warning types.
CXXFLAGS += -Wno-attributes
ifeq ($(DEBUG), 0)
	CXXFLAGS += -O3
endif
ifeq ($(CXX), clang++)
  CXXFLAGS+= -Wno-unused-private-field -Wno-static-in-inline
endif

LIBTSAN=rtl/libtsan.a
GTEST_ROOT=third_party/googletest
GTEST_INCLUDE=-I$(GTEST_ROOT)/include
GTEST_BUILD_DIR=$(GTEST_ROOT)/build
GTEST_LIB=$(GTEST_BUILD_DIR)/gtest-all.o

SANITIZER_COMMON_TESTS_SRC=$(wildcard ../sanitizer_common/tests/*_test.cc)
SANITIZER_COMMON_TESTS_OBJ=$(patsubst %.cc,%.o,$(SANITIZER_COMMON_TESTS_SRC))
RTL_TEST_SRC=$(wildcard rtl_tests/*.cc)
RTL_TEST_OBJ=$(patsubst %.cc,%.o,$(RTL_TEST_SRC))
UNIT_TEST_SRC=$(wildcard unit_tests/*_test.cc)
UNIT_TEST_OBJ=$(patsubst %.cc,%.o,$(UNIT_TEST_SRC))
UNIT_TEST_HDR=$(wildcard rtl/*.h) $(wildcard ../sanitizer_common/*.h)

INCLUDES=-Irtl -I.. $(GTEST_INCLUDE)

all: libtsan test

help:
	@ echo "A little help is always welcome!"
	@ echo "The most useful targets are:"
	@ echo "  make install_deps  # Install third-party dependencies required for building"
	@ echo "  make presubmit     # Run it every time before committing"
	@ echo "  make lint          # Run the style checker"
	@ echo
	@ echo "For more info, see http://code.google.com/p/data-race-test/wiki/ThreadSanitizer2"

$(LIBTSAN): libtsan

libtsan:
	$(MAKE) -C rtl -f Makefile.old DEBUG=$(DEBUG)

%.o: %.cc $(UNIT_TEST_HDR) $(LIBTSAN)
	$(CXX) $(CXXFLAGS) $(CFLAGS) $(INCLUDES) -o $@ -c $<

tsan_test: $(UNIT_TEST_OBJ) $(RTL_TEST_OBJ) \
           $(SANITIZER_COMMON_TESTS_OBJ) $(LIBTSAN) $(GTEST_LIB)
	$(CXX) $^ -o $@ $(LDFLAGS)

test: libtsan tsan_test

run: all
	(ulimit -s 8192; ./tsan_test)
	./output_tests/test_output.sh

presubmit:
	$(MAKE) -f Makefile.old lint -j 4
	# Debug build with clang.
	$(MAKE) -f Makefile.old clean
	$(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=clang CXX=clang++
	# Release build with clang.
	$(MAKE) -f Makefile.old clean
	$(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=clang CXX=clang++
	# Debug build with gcc
	$(MAKE) -f Makefile.old clean
	$(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++
	# Release build with gcc
	$(MAKE) -f Makefile.old clean
	$(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++
	./check_analyze.sh
	@ echo PRESUBMIT PASSED

RTL_LINT_FITLER=-legal/copyright,-build/include,-readability/casting,-build/header_guard,-build/namespaces

lint: lint_tsan lint_tests
lint_tsan:
	third_party/cpplint/cpplint.py --filter=$(RTL_LINT_FITLER) rtl/*.{cc,h} \
        ../sanitizer_common/*.{cc,h}
lint_tests:
	third_party/cpplint/cpplint.py --filter=$(RTL_LINT_FITLER) \
        rtl_tests/*.{cc,h} unit_tests/*.cc ../sanitizer_common/tests/*.cc

install_deps:
	rm -rf third_party
	mkdir third_party
	(cd third_party && \
	svn co -r613 http://googletest.googlecode.com/svn/trunk googletest && \
	svn co -r82 http://google-styleguide.googlecode.com/svn/trunk/cpplint cpplint \
        )

# Remove verbose printf from lint. Not strictly necessary.
hack_cpplint:
	sed -i "s/  sys.stderr.write('Done processing.*//g" third_party/cpplint/cpplint.py

$(GTEST_LIB):
	mkdir -p $(GTEST_BUILD_DIR) && \
	cd $(GTEST_BUILD_DIR) && \
	$(MAKE) -f ../make/Makefile CXXFLAGS="$(CXXFLAGS)" CFLAGS="$(CFLAGS)" CC=$(CC) CXX=$(CXX)

clean:
	rm -f asm_*.s libtsan.nm libtsan.objdump */*.o tsan_test
	rm -rf $(GTEST_BUILD_DIR)
	$(MAKE) clean -C rtl -f Makefile.old
OpenPOWER on IntegriCloud