Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | set -e |
| 3 | |
| 4 | SRCS=" |
| 5 | tsan_go.cc |
| 6 | ../rtl/tsan_clock.cc |
| 7 | ../rtl/tsan_flags.cc |
| 8 | ../rtl/tsan_md5.cc |
| 9 | ../rtl/tsan_mutex.cc |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 10 | ../rtl/tsan_report.cc |
| 11 | ../rtl/tsan_rtl.cc |
| 12 | ../rtl/tsan_rtl_mutex.cc |
| 13 | ../rtl/tsan_rtl_report.cc |
| 14 | ../rtl/tsan_rtl_thread.cc |
| 15 | ../rtl/tsan_stat.cc |
| 16 | ../rtl/tsan_suppressions.cc |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 17 | ../rtl/tsan_sync.cc |
| 18 | ../../sanitizer_common/sanitizer_allocator.cc |
| 19 | ../../sanitizer_common/sanitizer_common.cc |
Dmitry Vyukov | 7ffba06 | 2012-07-16 10:36:39 +0000 | [diff] [blame] | 20 | ../../sanitizer_common/sanitizer_flags.cc |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 21 | ../../sanitizer_common/sanitizer_libc.cc |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 22 | ../../sanitizer_common/sanitizer_printf.cc |
Dmitry Vyukov | 491852e | 2013-03-18 08:52:46 +0000 | [diff] [blame] | 23 | ../../sanitizer_common/sanitizer_thread_registry.cc |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 24 | " |
| 25 | |
Dmitry Vyukov | 65c445c | 2012-11-06 13:32:53 +0000 | [diff] [blame] | 26 | if [ "`uname -a | grep Linux`" != "" ]; then |
| 27 | SUFFIX="linux_amd64" |
| 28 | OSCFLAGS="-fPIC -ffreestanding" |
Dmitry Vyukov | a05fcc1 | 2012-11-06 16:00:16 +0000 | [diff] [blame] | 29 | OSLDFLAGS="-lpthread -fPIC -fpie" |
Dmitry Vyukov | 5b266cb | 2012-07-16 13:02:40 +0000 | [diff] [blame] | 30 | SRCS+=" |
| 31 | ../rtl/tsan_platform_linux.cc |
Dmitry Vyukov | 65c445c | 2012-11-06 13:32:53 +0000 | [diff] [blame] | 32 | ../../sanitizer_common/sanitizer_posix.cc |
Peter Collingbourne | 04a2281 | 2013-05-21 10:27:07 +0000 | [diff] [blame] | 33 | ../../sanitizer_common/sanitizer_posix_libcdep.cc |
Dmitry Vyukov | 5b266cb | 2012-07-16 13:02:40 +0000 | [diff] [blame] | 34 | ../../sanitizer_common/sanitizer_linux.cc |
Peter Collingbourne | 088ea2b | 2013-05-20 15:57:44 +0000 | [diff] [blame] | 35 | ../../sanitizer_common/sanitizer_linux_libcdep.cc |
Dmitry Vyukov | 5b266cb | 2012-07-16 13:02:40 +0000 | [diff] [blame] | 36 | " |
Dmitry Vyukov | 65c445c | 2012-11-06 13:32:53 +0000 | [diff] [blame] | 37 | elif [ "`uname -a | grep Darwin`" != "" ]; then |
| 38 | SUFFIX="darwin_amd64" |
| 39 | OSCFLAGS="-fPIC" |
Dmitry Vyukov | a05fcc1 | 2012-11-06 16:00:16 +0000 | [diff] [blame] | 40 | OSLDFLAGS="-lpthread -fPIC -fpie" |
Dmitry Vyukov | 7d15f5d | 2012-08-13 18:44:44 +0000 | [diff] [blame] | 41 | SRCS+=" |
| 42 | ../rtl/tsan_platform_mac.cc |
Dmitry Vyukov | 65c445c | 2012-11-06 13:32:53 +0000 | [diff] [blame] | 43 | ../../sanitizer_common/sanitizer_posix.cc |
Dmitry Vyukov | 7d15f5d | 2012-08-13 18:44:44 +0000 | [diff] [blame] | 44 | ../../sanitizer_common/sanitizer_mac.cc |
Dmitry Vyukov | d4bb4a6 | 2013-06-06 13:00:32 +0000 | [diff] [blame] | 45 | ../../sanitizer_common/sanitizer_posix_libcdep.cc |
Dmitry Vyukov | 7d15f5d | 2012-08-13 18:44:44 +0000 | [diff] [blame] | 46 | " |
Dmitry Vyukov | 65c445c | 2012-11-06 13:32:53 +0000 | [diff] [blame] | 47 | elif [ "`uname -a | grep MINGW`" != "" ]; then |
| 48 | SUFFIX="windows_amd64" |
| 49 | OSCFLAGS="-Wno-error=attributes -Wno-attributes" |
| 50 | OSLDFLAGS="" |
| 51 | SRCS+=" |
| 52 | ../rtl/tsan_platform_windows.cc |
| 53 | ../../sanitizer_common/sanitizer_win.cc |
| 54 | " |
| 55 | else |
| 56 | echo Unknown platform |
| 57 | exit 1 |
Dmitry Vyukov | 5b266cb | 2012-07-16 13:02:40 +0000 | [diff] [blame] | 58 | fi |
| 59 | |
Dmitry Vyukov | 87dbdf5 | 2012-07-25 14:30:51 +0000 | [diff] [blame] | 60 | SRCS+=$ADD_SRCS |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 61 | |
| 62 | rm -f gotsan.cc |
| 63 | for F in $SRCS; do |
| 64 | cat $F >> gotsan.cc |
| 65 | done |
| 66 | |
Dmitry Vyukov | e0c4561 | 2013-06-11 11:44:43 +0000 | [diff] [blame^] | 67 | FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -m64 -Wall -Werror -Wno-maybe-uninitialized -fno-exceptions -fno-rtti -DTSAN_GO -DSANITIZER_GO -DTSAN_SHADOW_COUNT=4 $OSCFLAGS" |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 68 | if [ "$DEBUG" == "" ]; then |
Dmitry Vyukov | 7ffba06 | 2012-07-16 10:36:39 +0000 | [diff] [blame] | 69 | FLAGS+=" -DTSAN_DEBUG=0 -O3 -fomit-frame-pointer" |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 70 | else |
Dmitry Vyukov | 7ffba06 | 2012-07-16 10:36:39 +0000 | [diff] [blame] | 71 | FLAGS+=" -DTSAN_DEBUG=1 -g" |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 72 | fi |
| 73 | |
Dmitry Vyukov | 7ffba06 | 2012-07-16 10:36:39 +0000 | [diff] [blame] | 74 | echo gcc gotsan.cc -S -o tmp.s $FLAGS $CFLAGS |
| 75 | gcc gotsan.cc -S -o tmp.s $FLAGS $CFLAGS |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 76 | cat tmp.s $ASMS > gotsan.s |
Dmitry Vyukov | 6b2804f | 2012-07-27 14:00:39 +0000 | [diff] [blame] | 77 | echo as gotsan.s -o race_$SUFFIX.syso |
| 78 | as gotsan.s -o race_$SUFFIX.syso |
Dmitry Vyukov | b78caa6 | 2012-07-05 16:18:28 +0000 | [diff] [blame] | 79 | |
Dmitry Vyukov | 65c445c | 2012-11-06 13:32:53 +0000 | [diff] [blame] | 80 | gcc test.c race_$SUFFIX.syso -m64 -o test $OSLDFLAGS |
Dmitry Vyukov | 6f121a1 | 2012-11-08 13:23:13 +0000 | [diff] [blame] | 81 | GORACE="exitcode=0 atexit_sleep_ms=0" ./test |