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
9set -e
10export LANG=C
11export LC_ALL=C
12
13VERBOSE=0
14
15MINGW=
16NO_TESTS=
17OUT_DIR=objs
18
19for 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
37done
38
39panic () {
40    echo "ERROR: $@"
41    exit 1
42}
43
44run () {
45  if [ "$VERBOSE" -ge 1 ]; then
46    "$@"
47  else
48    "$@" >/dev/null 2>&1
49  fi
50}
51
52HOST_OS=$(uname -s)
53case $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
65esac
66
67# Build the binaries from sources.
68cd `dirname $0`
69rm -rf objs
70echo "Configuring build."
71run ./android-configure.sh --out-dir=$OUT_DIR "$@" ||
72    panic "Configuration error, please run ./android-configure.sh to see why."
73
74echo "Building sources."
75run make -j$HOST_NUM_CPUS OBJS_DIR="$OUT_DIR" ||
76    panic "Could not build sources, please run 'make' to see why."
77
78RUN_64BIT_TESTS=true
79
80TEST_SHELL=
81EXE_SUFFIX=
82if [ "$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
93fi
94
95if [ -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
114else
115    echo "Ignoring unit tests suite."
116fi
117
118echo "Done. !!"
119