blob: 0a3e2655c563c48a70745797a2974d8e2d327058 [file] [log] [blame]
#!/bin/sh
# 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
POST_BUILD_HOOK_DEFINED=yes
post_build_hook() {
PLATFORM=$1
cd "$THISDIR/tsan/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
# See below for the definition of ORIG_BINARIES_DIR
$THISDIR/tsan/tsan/mk-self-contained-valgrind.sh \
"$VG_TSAN_DIR/out/$PLATFORM" "tsan" \
"$ORIG_BINARIES_DIR/$PLATFORM/bin/valgrind-tsan.sh"
}
TSAN_REV=1970
TSAN_DIR="$THISDIR/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
# The separate .sh file defines Valgrind/VEX revisions.
source "tsan/third_party/valgrind_rev.sh"
VG_TSAN_DIR="$THISDIR/valgrind-tsan" # Directory to checkout Valgrind sources
checkout_and_patch_valgrind "$VALGRIND_REV" "$VEX_REV" "$VG_TSAN_DIR"
cd "$VG_TSAN_DIR"
# Apply TSan-specific patches except:
# * limits (buggy on Mac)
# * guest_amd64_toIR (already applied in common.sh).
rm "$THISDIR"/tsan/valgrind_patches/{limits,guest_amd64_toIR}.patch
for P in "$THISDIR"/tsan/valgrind_patches/*.patch
do
patch -p0 -i $P
done
if [ `uname -s` == "Darwin" ]
then
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
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