18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#!/bin/bash
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# this script is used to rebuild all QEMU binaries for the host
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# platforms.
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# assume that the device tree is in TOP
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerset -e
10cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerexport LANG=C
11cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerexport LC_ALL=C
12cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
13cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' TurnerVERBOSE=0
14cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
15cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' TurnerMINGW=
169f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' TurnerNO_TESTS=
17a96cc267b82bde959b1738fb679ee5ac964f3f5fDavid 'Digit' TurnerOUT_DIR=objs
18a96cc267b82bde959b1738fb679ee5ac964f3f5fDavid 'Digit' Turner
19cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerfor OPT; do
20cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner    case $OPT in
21cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner        --mingw)
22cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner            MINGW=true
23cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner            ;;
24cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner        --verbose)
25cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner            VERBOSE=$(( $VERBOSE + 1 ))
26cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner            ;;
279f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner        --no-tests)
289f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner            NO_TESTS=true
299f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner            ;;
30a96cc267b82bde959b1738fb679ee5ac964f3f5fDavid 'Digit' Turner        --out-dir=*)
31a96cc267b82bde959b1738fb679ee5ac964f3f5fDavid 'Digit' Turner            OUT_DIR=${OPT##--out-dir=}
32a96cc267b82bde959b1738fb679ee5ac964f3f5fDavid 'Digit' Turner            ;;
33cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner        --help|-?)
34cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner            VERBOSE=2
35cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner            ;;
36cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner    esac
37cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerdone
38cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
39a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerpanic () {
40a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner    echo "ERROR: $@"
41a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner    exit 1
42a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner}
43a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner
44cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerrun () {
45cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner  if [ "$VERBOSE" -ge 1 ]; then
46cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner    "$@"
47cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner  else
48cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner    "$@" >/dev/null 2>&1
49cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner  fi
50cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner}
51cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
52cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' TurnerHOST_OS=$(uname -s)
53cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnercase $HOST_OS in
54c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner    Linux)
55c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner        HOST_NUM_CPUS=`cat /proc/cpuinfo | grep processor | wc -l`
56c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner        ;;
57c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner    Darwin|FreeBsd)
58c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner        HOST_NUM_CPUS=`sysctl -n hw.ncpu`
59c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner        ;;
60c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner    CYGWIN*|*_NT-*)
61c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner        HOST_NUM_CPUS=$NUMBER_OF_PROCESSORS
62c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner        ;;
63c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner    *)  # let's play safe here
64c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner        HOST_NUM_CPUS=1
65c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turneresac
66c3b08a0914def3f380aa57bbcb3937315ce15cebDavid 'Digit' Turner
67cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner# Build the binaries from sources.
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectcd `dirname $0`
69cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerrm -rf objs
70cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerecho "Configuring build."
71a96cc267b82bde959b1738fb679ee5ac964f3f5fDavid 'Digit' Turnerrun ./android-configure.sh --out-dir=$OUT_DIR "$@" ||
72a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner    panic "Configuration error, please run ./android-configure.sh to see why."
73cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
74cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerecho "Building sources."
75a96cc267b82bde959b1738fb679ee5ac964f3f5fDavid 'Digit' Turnerrun make -j$HOST_NUM_CPUS OBJS_DIR="$OUT_DIR" ||
76a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner    panic "Could not build sources, please run 'make' to see why."
77cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
78cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' TurnerRUN_64BIT_TESTS=true
79cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
80cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' TurnerTEST_SHELL=
81cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' TurnerEXE_SUFFIX=
82cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerif [ "$MINGW" ]; then
83a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner  RUN_64BIT_TESTS=
84cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner  TEST_SHELL=wine
85cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner  EXE_SUFFIX=.exe
86cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
879f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner  # Check for Wine on this machine.
889f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner  WINE_CMD=$(which $TEST_SHELL 2>/dev/null || true)
899f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner  if [ -z "$NO_TESTS" -a -z "$WINE_CMD" ]; then
909f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    echo "WARNING: Wine is not installed on this machine!! Unit tests will be ignored!!"
919f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    NO_TESTS=true
929f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner  fi
939f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turnerfi
94a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner
959f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turnerif [ -z "$NO_TESTS" ]; then
969f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    echo "Running 32-bit unit test suite."
979f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    FAILURES=""
989f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    for UNIT_TEST in emulator_unittests emugl_common_host_unittests; do
999f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    echo "   - $UNIT_TEST"
1009f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    run $TEST_SHELL $OUT_DIR/$UNIT_TEST$EXE_SUFFIX || FAILURES="$FAILURES $UNIT_TEST"
1011af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner    done
1021af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner
1039f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    if [ "$RUN_64BIT_TESTS" ]; then
1049f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner        echo "Running 64-bit unit test suite."
1059f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner        for UNIT_TEST in emulator64_unittests emugl64_common_host_unittests; do
1069f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner            echo "   - $UNIT_TEST"
1079f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner            run $TEST_SHELL $OUT_DIR/$UNIT_TEST$EXE_SUFFIX || FAILURES="$FAILURES $UNIT_TEST"
1089f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner        done
1099f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    fi
1109f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner
1119f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    if [ "$FAILURES" ]; then
1129f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner        panic "Unit test failures: $FAILURES"
1139f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    fi
1149f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turnerelse
1159f86acc688f1545bc7b5213883e013188188941aDavid 'Digit' Turner    echo "Ignoring unit tests suite."
116cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turnerfi
117cc80ebe8392e4ffe0b74ca5d36a282226df10f6eDavid 'Digit' Turner
1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectecho "Done. !!"
119