blob: d3f14763f77185a91fc1e9ac8df325aee1830be5 [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2009-2010 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Script to build ThreadSanitizer binaries for use with chromium
source common.sh
if system_is_snow_leopard
then
echo "ThreadSanitizer is not fully supported on Mac OS X 10.6 yet." >&2
echo "See http://code.google.com/p/data-race-test/issues/detail?id=44" >&2
fi
POST_BUILD_HOOK_DEFINED=yes
post_build_hook() {
# {{{1
PLATFORM=$1
cd "$TSAN_DIR/tsan"
SPECIAL_TARGET=
SPECIAL_FLAGS=
# We can build two target architectures on a Linux x64 machine, so we should
# a) Use separate output directories,
# b) Explicitly specify 32-bit linux for x86 build.
case "$PLATFORM" in
"linux_x64")
SPECIAL_FLAGS="OUTDIR=out64"
;;
"linux_x86")
SPECIAL_FLAGS="OUTDIR=out32"
SPECIAL_TARGET="l32"
;;
esac
make -j4 $SPECIAL_FLAGS OFFLINE= PIN_ROOT= \
VALGRIND_INST_ROOT="$BINARIES_DIR/$PLATFORM" \
VALGRIND_ROOT="$VG_TSAN_DIR" $SPECIAL_TARGET
OUT_BIN="$ORIG_BINARIES_DIR/$PLATFORM/bin"
mkdir -p "$OUT_BIN"
# See below for the definition of ORIG_BINARIES_DIR
"$TSAN_DIR/tsan/mk-self-contained-valgrind.sh" \
"$VG_TSAN_DIR/out/$PLATFORM" "tsan" \
"$OUT_BIN/valgrind-tsan.sh"
# }}}
}
switch_gcc_for_darwin() {
# {{{1
if ls /opt/local/bin/ | grep "^gcc-mp-4\.4" >/dev/null
then
export GCC_BINARY_MASK="/opt/local/bin/XXX-mp-4.4"
export PATH="$THISDIR/macports-gcc-wrapper:$PATH"
echo "Using gcc-4.4 from MacPorts to build ThreadSanitizer."
elif gcc --version | grep " 4\.[0-3]\.[0-9]\| 3\.[0-9]\.[0-9]" >/dev/null
then
echo "Your gcc version is older than 4.4."
echo "It is recommended to use gcc-4.4 from MacPorts for building"
echo "ThreadSanitizer, especially if you plan to commit binaries into SVN."
echo "See http://gcc44.darwinports.com/ for getting gcc-4.4"
echo ""
echo -n "Do you want to continue using old gcc? (y/N)"
read CONFIRMATION
if [ "$CONFIRMATION" != "y" ]
then
exit 1
fi
fi
# }}}
}
TSAN_REV=4397
TSAN_DIR="$VG_SRC_DIR/tsan" # Directory to checkout TSan sources
rm -rf "$TSAN_DIR"
svn co -r "$TSAN_REV" http://data-race-test.googlecode.com/svn/trunk "$TSAN_DIR"
# Directory to checkout Valgrind sources
VG_TSAN_DIR="$TSAN_DIR/third_party/valgrind"
# Fetch sources from valgrind-variant
sh "$TSAN_DIR/third_party/update_valgrind.sh"
cd "$VG_TSAN_DIR"
if [ `uname -s` == "Darwin" ]
then
switch_gcc_for_darwin
fi
# Ugly hack!
# We build Valrgind binaries in the $VG_TSAN_DIR/out and then pack
# them into self-contained .sh file into $ORIG_BINARIES_DIR/$PLATFORM
ORIG_BINARIES_DIR="$BINARIES_DIR"
BINARIES_DIR="$VG_TSAN_DIR/out"
build_valgrind_for_available_platforms