Home | History | Annotate | Download | only in valgrind-libyuv
      1 #!/bin/bash
      2 # Copyright (c) 2012 The LibYuv Project Authors. All rights reserved.
      3 #
      4 # Use of this source code is governed by a BSD-style license
      5 # that can be found in the LICENSE file in the root of the source
      6 # tree. An additional intellectual property rights grant can be found
      7 # in the file PATENTS.  All contributing project authors may
      8 # be found in the AUTHORS file in the root of the source tree.
      9 
     10 # Set up some paths and re-direct the arguments to libyuv_tests.py
     11 
     12 # This script is a copy of the chrome_tests.sh wrapper script with the following
     13 # changes:
     14 # - The locate_valgrind.sh of Chromium's Valgrind scripts dir is used to locate
     15 #   the Valgrind framework install.
     16 # - libyuv_tests.py is invoked instead of chrome_tests.py.
     17 # - Chromium's Valgrind scripts directory is added to the PYTHONPATH to make it
     18 #   possible to execute the Python scripts properly.
     19 
     20 export THISDIR=`dirname $0`
     21 ARGV_COPY="$@"
     22 
     23 # We need to set CHROME_VALGRIND iff using Memcheck or TSan-Valgrind:
     24 #   tools/valgrind-libyuv/libyuv_tests.sh --tool memcheck
     25 # or
     26 #   tools/valgrind-libyuv/libyuv_tests.sh --tool=memcheck
     27 # (same for "--tool=tsan")
     28 tool="memcheck"  # Default to memcheck.
     29 while (( "$#" ))
     30 do
     31   if [[ "$1" == "--tool" ]]
     32   then
     33     tool="$2"
     34     shift
     35   elif [[ "$1" =~ --tool=(.*) ]]
     36   then
     37     tool="${BASH_REMATCH[1]}"
     38   fi
     39   shift
     40 done
     41 
     42 NEEDS_VALGRIND=0
     43 NEEDS_DRMEMORY=0
     44 
     45 case "$tool" in
     46   "memcheck")
     47     NEEDS_VALGRIND=1
     48     ;;
     49   "tsan" | "tsan_rv")
     50     if [ "`uname -s`" == CYGWIN* ]
     51     then
     52       NEEDS_PIN=1
     53     else
     54       NEEDS_VALGRIND=1
     55     fi
     56     ;;
     57   "drmemory" | "drmemory_light" | "drmemory_full" | "drmemory_pattern")
     58     NEEDS_DRMEMORY=1
     59     ;;
     60 esac
     61 
     62 # For Libyuv, we'll use the locate_valgrind.sh script in Chromium's Valgrind
     63 # scripts dir to locate the Valgrind framework install
     64 CHROME_VALGRIND_SCRIPTS=$THISDIR/../valgrind
     65 
     66 if [ "$NEEDS_VALGRIND" == "1" ]
     67 then
     68   CHROME_VALGRIND=`sh $CHROME_VALGRIND_SCRIPTS/locate_valgrind.sh`
     69   if [ "$CHROME_VALGRIND" = "" ]
     70   then
     71     # locate_valgrind.sh failed
     72     exit 1
     73   fi
     74   echo "Using valgrind binaries from ${CHROME_VALGRIND}"
     75 
     76   PATH="${CHROME_VALGRIND}/bin:$PATH"
     77   # We need to set these variables to override default lib paths hard-coded into
     78   # Valgrind binary.
     79   export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind"
     80   export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind"
     81 
     82   # Clean up some /tmp directories that might be stale due to interrupted
     83   # chrome_tests.py execution.
     84   # FYI:
     85   #   -mtime +1  <- only print files modified more than 24h ago,
     86   #   -print0/-0 are needed to handle possible newlines in the filenames.
     87   echo "Cleanup /tmp from Valgrind stuff"
     88   find /tmp -maxdepth 1 \(\
     89         -name "vgdb-pipe-*" -or -name "vg_logs_*" -or -name "valgrind.*" \
     90       \) -mtime +1 -print0 | xargs -0 rm -rf
     91 fi
     92 
     93 if [ "$NEEDS_DRMEMORY" == "1" ]
     94 then
     95   if [ -z "$DRMEMORY_COMMAND" ]
     96   then
     97     DRMEMORY_PATH="$THISDIR/../../third_party/drmemory"
     98     DRMEMORY_SFX="$DRMEMORY_PATH/drmemory-windows-sfx.exe"
     99     if [ ! -f "$DRMEMORY_SFX" ]
    100     then
    101       echo "Can't find Dr. Memory executables."
    102       echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory"
    103       echo "for the instructions on how to get them."
    104       exit 1
    105     fi
    106 
    107     chmod +x "$DRMEMORY_SFX"  # Cygwin won't run it without +x.
    108     "$DRMEMORY_SFX" -o"$DRMEMORY_PATH/unpacked" -y
    109     export DRMEMORY_COMMAND="$DRMEMORY_PATH/unpacked/bin/drmemory.exe"
    110   fi
    111 fi
    112 
    113 if [ "$NEEDS_PIN" == "1" ]
    114 then
    115   if [ -z "$PIN_COMMAND" ]
    116   then
    117     # Set up PIN_COMMAND to invoke TSan.
    118     TSAN_PATH="$THISDIR/../../third_party/tsan"
    119     TSAN_SFX="$TSAN_PATH/tsan-x86-windows-sfx.exe"
    120     echo "$TSAN_SFX"
    121     if [ ! -f $TSAN_SFX ]
    122     then
    123       echo "Can't find ThreadSanitizer executables."
    124       echo "See http://www.chromium.org/developers/how-tos/using-valgrind/threadsanitizer/threadsanitizer-on-windows"
    125       echo "for the instructions on how to get them."
    126       exit 1
    127     fi
    128 
    129     chmod +x "$TSAN_SFX"  # Cygwin won't run it without +x.
    130     "$TSAN_SFX" -o"$TSAN_PATH"/unpacked -y
    131     export PIN_COMMAND="$TSAN_PATH/unpacked/tsan-x86-windows/tsan.bat"
    132   fi
    133 fi
    134 
    135 # Add Chrome's Valgrind scripts dir to the PYTHON_PATH since it contains
    136 # the scripts that are needed for this script to run
    137 PYTHONPATH=$THISDIR/../python/google:$CHROME_VALGRIND_SCRIPTS python \
    138            "$THISDIR/libyuv_tests.py" $ARGV_COPY
    139