Home | History | Annotate | Download | only in qemu
      1 #!/bin/bash
      2 #
      3 # this script is used to rebuild all QEMU binaries for the host
      4 # platforms.
      5 #
      6 # assume that the device tree is in TOP
      7 #
      8 
      9 set -e
     10 export LANG=C
     11 export LC_ALL=C
     12 
     13 VERBOSE=0
     14 
     15 MINGW=
     16 NO_TESTS=
     17 OUT_DIR=objs
     18 
     19 for OPT; do
     20     case $OPT in
     21         --mingw)
     22             MINGW=true
     23             ;;
     24         --verbose)
     25             VERBOSE=$(( $VERBOSE + 1 ))
     26             ;;
     27         --no-tests)
     28             NO_TESTS=true
     29             ;;
     30         --out-dir=*)
     31             OUT_DIR=${OPT##--out-dir=}
     32             ;;
     33         --help|-?)
     34             VERBOSE=2
     35             ;;
     36     esac
     37 done
     38 
     39 panic () {
     40     echo "ERROR: $@"
     41     exit 1
     42 }
     43 
     44 run () {
     45   if [ "$VERBOSE" -ge 1 ]; then
     46     "$@"
     47   else
     48     "$@" >/dev/null 2>&1
     49   fi
     50 }
     51 
     52 HOST_OS=$(uname -s)
     53 case $HOST_OS in
     54     Linux)
     55         HOST_NUM_CPUS=`cat /proc/cpuinfo | grep processor | wc -l`
     56         ;;
     57     Darwin|FreeBsd)
     58         HOST_NUM_CPUS=`sysctl -n hw.ncpu`
     59         ;;
     60     CYGWIN*|*_NT-*)
     61         HOST_NUM_CPUS=$NUMBER_OF_PROCESSORS
     62         ;;
     63     *)  # let's play safe here
     64         HOST_NUM_CPUS=1
     65 esac
     66 
     67 # Build the binaries from sources.
     68 cd `dirname $0`
     69 rm -rf objs
     70 echo "Configuring build."
     71 run ./android-configure.sh --out-dir=$OUT_DIR "$@" ||
     72     panic "Configuration error, please run ./android-configure.sh to see why."
     73 
     74 echo "Building sources."
     75 run make -j$HOST_NUM_CPUS OBJS_DIR="$OUT_DIR" ||
     76     panic "Could not build sources, please run 'make' to see why."
     77 
     78 RUN_64BIT_TESTS=true
     79 
     80 TEST_SHELL=
     81 EXE_SUFFIX=
     82 if [ "$MINGW" ]; then
     83   RUN_64BIT_TESTS=
     84   TEST_SHELL=wine
     85   EXE_SUFFIX=.exe
     86 
     87   # Check for Wine on this machine.
     88   WINE_CMD=$(which $TEST_SHELL 2>/dev/null || true)
     89   if [ -z "$NO_TESTS" -a -z "$WINE_CMD" ]; then
     90     echo "WARNING: Wine is not installed on this machine!! Unit tests will be ignored!!"
     91     NO_TESTS=true
     92   fi
     93 fi
     94 
     95 if [ -z "$NO_TESTS" ]; then
     96     echo "Running 32-bit unit test suite."
     97     FAILURES=""
     98     for UNIT_TEST in emulator_unittests emugl_common_host_unittests; do
     99     echo "   - $UNIT_TEST"
    100     run $TEST_SHELL $OUT_DIR/$UNIT_TEST$EXE_SUFFIX || FAILURES="$FAILURES $UNIT_TEST"
    101     done
    102 
    103     if [ "$RUN_64BIT_TESTS" ]; then
    104         echo "Running 64-bit unit test suite."
    105         for UNIT_TEST in emulator64_unittests emugl64_common_host_unittests; do
    106             echo "   - $UNIT_TEST"
    107             run $TEST_SHELL $OUT_DIR/$UNIT_TEST$EXE_SUFFIX || FAILURES="$FAILURES $UNIT_TEST"
    108         done
    109     fi
    110 
    111     if [ "$FAILURES" ]; then
    112         panic "Unit test failures: $FAILURES"
    113     fi
    114 else
    115     echo "Ignoring unit tests suite."
    116 fi
    117 
    118 echo "Done. !!"
    119