blob: fdbd4056959c1618706806e5aa90469f075965ff [file] [log] [blame]
Stephen Hines86277eb2015-03-23 12:06:32 -07001#!/bin/sh
2
Dmitry Vyukovb78caa62012-07-05 16:18:28 +00003set -e
4
5SRCS="
6 tsan_go.cc
7 ../rtl/tsan_clock.cc
8 ../rtl/tsan_flags.cc
Stephen Hines6d186232014-11-26 17:56:19 -08009 ../rtl/tsan_interface_atomic.cc
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000010 ../rtl/tsan_md5.cc
11 ../rtl/tsan_mutex.cc
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000012 ../rtl/tsan_report.cc
13 ../rtl/tsan_rtl.cc
14 ../rtl/tsan_rtl_mutex.cc
15 ../rtl/tsan_rtl_report.cc
16 ../rtl/tsan_rtl_thread.cc
Stephen Hines6a211c52014-07-21 00:49:56 -070017 ../rtl/tsan_stack_trace.cc
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000018 ../rtl/tsan_stat.cc
19 ../rtl/tsan_suppressions.cc
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000020 ../rtl/tsan_sync.cc
21 ../../sanitizer_common/sanitizer_allocator.cc
22 ../../sanitizer_common/sanitizer_common.cc
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080023 ../../sanitizer_common/sanitizer_common_libcdep.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070024 ../../sanitizer_common/sanitizer_deadlock_detector2.cc
Stephen Hines86277eb2015-03-23 12:06:32 -070025 ../../sanitizer_common/sanitizer_flag_parser.cc
Dmitry Vyukov7ffba062012-07-16 10:36:39 +000026 ../../sanitizer_common/sanitizer_flags.cc
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000027 ../../sanitizer_common/sanitizer_libc.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070028 ../../sanitizer_common/sanitizer_persistent_allocator.cc
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000029 ../../sanitizer_common/sanitizer_printf.cc
Alexey Samsonovc11d3032013-06-27 07:57:53 +000030 ../../sanitizer_common/sanitizer_suppressions.cc
Dmitry Vyukov491852e2013-03-18 08:52:46 +000031 ../../sanitizer_common/sanitizer_thread_registry.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070032 ../../sanitizer_common/sanitizer_stackdepot.cc
Stephen Hines6d186232014-11-26 17:56:19 -080033 ../../sanitizer_common/sanitizer_stacktrace.cc
Stephen Hines86277eb2015-03-23 12:06:32 -070034 ../../sanitizer_common/sanitizer_symbolizer.cc
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000035"
36
Dmitry Vyukov65c445c2012-11-06 13:32:53 +000037if [ "`uname -a | grep Linux`" != "" ]; then
38 SUFFIX="linux_amd64"
Stephen Hines6a211c52014-07-21 00:49:56 -070039 OSCFLAGS="-fPIC -ffreestanding -Wno-maybe-uninitialized -Wno-unused-const-variable -Werror -Wno-unknown-warning-option"
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080040 OSLDFLAGS="-lpthread -fPIC -fpie"
Stephen Hines86277eb2015-03-23 12:06:32 -070041 SRCS="
42 $SRCS
Dmitry Vyukov5b266cb2012-07-16 13:02:40 +000043 ../rtl/tsan_platform_linux.cc
Dmitry Vyukov65c445c2012-11-06 13:32:53 +000044 ../../sanitizer_common/sanitizer_posix.cc
Peter Collingbourne04a22812013-05-21 10:27:07 +000045 ../../sanitizer_common/sanitizer_posix_libcdep.cc
Stephen Hines6d186232014-11-26 17:56:19 -080046 ../../sanitizer_common/sanitizer_procmaps_common.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070047 ../../sanitizer_common/sanitizer_procmaps_linux.cc
Dmitry Vyukov5b266cb2012-07-16 13:02:40 +000048 ../../sanitizer_common/sanitizer_linux.cc
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080049 ../../sanitizer_common/sanitizer_linux_libcdep.cc
Dmitry Vyukov92b54792013-10-03 17:14:35 +000050 ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
Dmitry Vyukov5b266cb2012-07-16 13:02:40 +000051 "
Stephen Hines6a211c52014-07-21 00:49:56 -070052elif [ "`uname -a | grep FreeBSD`" != "" ]; then
53 SUFFIX="freebsd_amd64"
54 OSCFLAGS="-fno-strict-aliasing -fPIC -Werror"
55 OSLDFLAGS="-lpthread -fPIC -fpie"
Stephen Hines86277eb2015-03-23 12:06:32 -070056 SRCS="
57 $SRCS
Stephen Hines6a211c52014-07-21 00:49:56 -070058 ../rtl/tsan_platform_linux.cc
59 ../../sanitizer_common/sanitizer_posix.cc
60 ../../sanitizer_common/sanitizer_posix_libcdep.cc
Stephen Hines6d186232014-11-26 17:56:19 -080061 ../../sanitizer_common/sanitizer_procmaps_common.cc
62 ../../sanitizer_common/sanitizer_procmaps_freebsd.cc
Stephen Hines6a211c52014-07-21 00:49:56 -070063 ../../sanitizer_common/sanitizer_linux.cc
64 ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
65 "
Dmitry Vyukov65c445c2012-11-06 13:32:53 +000066elif [ "`uname -a | grep Darwin`" != "" ]; then
67 SUFFIX="darwin_amd64"
Stephen Hines6a211c52014-07-21 00:49:56 -070068 OSCFLAGS="-fPIC -Wno-unused-const-variable -Wno-unknown-warning-option"
Dmitry Vyukova05fcc12012-11-06 16:00:16 +000069 OSLDFLAGS="-lpthread -fPIC -fpie"
Stephen Hines86277eb2015-03-23 12:06:32 -070070 SRCS="
71 $SRCS
Dmitry Vyukov7d15f5d2012-08-13 18:44:44 +000072 ../rtl/tsan_platform_mac.cc
73 ../../sanitizer_common/sanitizer_mac.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070074 ../../sanitizer_common/sanitizer_posix.cc
Dmitry Vyukovd4bb4a62013-06-06 13:00:32 +000075 ../../sanitizer_common/sanitizer_posix_libcdep.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070076 ../../sanitizer_common/sanitizer_procmaps_mac.cc
Dmitry Vyukov7d15f5d2012-08-13 18:44:44 +000077 "
Dmitry Vyukov65c445c2012-11-06 13:32:53 +000078elif [ "`uname -a | grep MINGW`" != "" ]; then
79 SUFFIX="windows_amd64"
Stephen Hines6a211c52014-07-21 00:49:56 -070080 OSCFLAGS="-Wno-error=attributes -Wno-attributes -Wno-unused-const-variable -Wno-unknown-warning-option"
Dmitry Vyukov65c445c2012-11-06 13:32:53 +000081 OSLDFLAGS=""
Stephen Hines86277eb2015-03-23 12:06:32 -070082 SRCS="
83 $SRCS
Dmitry Vyukov65c445c2012-11-06 13:32:53 +000084 ../rtl/tsan_platform_windows.cc
85 ../../sanitizer_common/sanitizer_win.cc
86 "
87else
88 echo Unknown platform
89 exit 1
Dmitry Vyukov5b266cb2012-07-16 13:02:40 +000090fi
91
Stephen Hines86277eb2015-03-23 12:06:32 -070092CC=${CC:-gcc}
93IN_TMPDIR=${IN_TMPDIR:-0}
94SILENT=${SILENT:-0}
Dmitry Vyukovb78caa62012-07-05 16:18:28 +000095
Stephen Hines86277eb2015-03-23 12:06:32 -070096if [ $IN_TMPDIR != "0" ]; then
97 DIR=$(mktemp -qd /tmp/gotsan.XXXXXXXXXX)
98 cleanup() {
99 rm -rf $DIR
100 }
101 trap cleanup EXIT
Dmitry Vyukovb78caa62012-07-05 16:18:28 +0000102else
Stephen Hines86277eb2015-03-23 12:06:32 -0700103 DIR=.
Dmitry Vyukovb78caa62012-07-05 16:18:28 +0000104fi
105
Stephen Hines86277eb2015-03-23 12:06:32 -0700106SRCS="$SRCS $ADD_SRCS"
Dmitry Vyukovb78caa62012-07-05 16:18:28 +0000107
Stephen Hines86277eb2015-03-23 12:06:32 -0700108rm -f $DIR/gotsan.cc
109for F in $SRCS; do
110 cat $F >> $DIR/gotsan.cc
111done
Stephen Hines6a211c52014-07-21 00:49:56 -0700112
Stephen Hines86277eb2015-03-23 12:06:32 -0700113FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -std=c++11 -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -DSANITIZER_DEADLOCK_DETECTOR_VERSION=2 $OSCFLAGS"
114if [ "$DEBUG" = "" ]; then
115 FLAGS="$FLAGS -DSANITIZER_DEBUG=0 -O3 -msse3 -fomit-frame-pointer"
116else
117 FLAGS="$FLAGS -DSANITIZER_DEBUG=1 -g"
118fi
119
120if [ "$SILENT" != "1" ]; then
121 echo $CC gotsan.cc -c -o $DIR/race_$SUFFIX.syso $FLAGS $CFLAGS
122fi
123$CC $DIR/gotsan.cc -c -o $DIR/race_$SUFFIX.syso $FLAGS $CFLAGS
124
125$CC test.c $DIR/race_$SUFFIX.syso -m64 -o $DIR/test $OSLDFLAGS
126
127export GORACE="exitcode=0 atexit_sleep_ms=0"
128if [ "$SILENT" != "1" ]; then
129 $DIR/test
130else
131 $DIR/test 2>/dev/null
132fi