| #!/bin/bash |
| # |
| # this script is used to rebuild all QEMU binaries for the host |
| # platforms. |
| # |
| # assume that the device tree is in TOP |
| # |
| |
| cd `dirname $0` |
| |
| OS=`uname -s` |
| EXE="" |
| case "$OS" in |
| Darwin) |
| CPU=`uname -p` |
| if [ "$CPU" = "i386" ] ; then |
| OS=darwin-x86 |
| else |
| OS=darwin-ppc |
| fi |
| ;; |
| *_NT-*) |
| OS=windows |
| EXE=.exe |
| ;; |
| esac |
| |
| # select the compiler: on OS X PPC, we're forced to use gcc-3.3 |
| # also use ccache if we can |
| CC=gcc |
| HOSTCC=gcc |
| cpu=$(uname -p) |
| if [ "$cpu" = "powerpc" ] ; then |
| HOSTCC=gcc-3.3 |
| fi |
| |
| unset TOP |
| # if ANDROID_PRODUCT_OUT is defined we maybe in an Android build |
| if [ -n "$ANDROID_PRODUCT_OUT" ] ; then |
| TOP=$(cd $ANDROID_PRODUCT_OUT/../../../.. && pwd) |
| echo "TOP found at $TOP" |
| if [ ! -f "$TOP/config/envsetup.make" ] ; then |
| echo "Cannot find build system root (TOP)" |
| echo "defaulting to non-Android build" |
| unset TOP |
| fi |
| fi |
| |
| # normalize the TOP variable, we don't want any trailing / |
| IN_ANDROID_BUILD= |
| if [ -n "$TOP" ] ; then |
| if [ ! "$(dirname $TOP)" = "." ] ; then |
| TOP=$(dirname $TOP)/$(basename $TOP) |
| fi |
| IN_ANDROID_BUILD=1 |
| echo "In Android Build" |
| fi |
| |
| TARGETS= |
| DEBUG=no |
| IGNORE_AUDIO=no |
| for opt do |
| optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` |
| case "$opt" in |
| --help|-h|-\?) show_help=yes |
| ;; |
| --install=*) TARGETS="$TARGETS $optarg"; |
| ;; |
| --sdl-config=*) SDL_CONFIG=$optarg |
| ;; |
| --cc=*) CC="$optarg" ; HOSTCC=$CC |
| ;; |
| --no-strip) NOSTRIP=1 |
| ;; |
| --no-android) IN_ANDROID_BUILD= |
| ;; |
| --debug) DEBUG=yes |
| ;; |
| --android-build) IN_ANDROID_BUILD=1 |
| ;; |
| --ignore-audio) IGNORE_AUDIO=yes |
| ;; |
| esac |
| done |
| |
| if test x"$show_help" = x"yes" ; then |
| cat << EOF |
| |
| Usage: android-rebuild.sh [options] |
| Options: [defaults in brackets after descriptions] |
| |
| EOF |
| echo "Standard options:" |
| echo " --help print this message" |
| echo " --install=FILEPATH copy emulator executable to FILEPATH [$TARGETS]" |
| echo " --no-strip do not strip emulator executable" |
| echo " --sdl-config=FILE use specific sdl-config script [$SDL_CONFIG]" |
| echo " --debug enable debug (-O0 -g) build" |
| echo " --no-android perform clean build, without Android build tools & prebuilt" |
| echo " --ignore-audio ignore audio messages (may build sound-less emulator)" |
| echo " --cc=PATH specify C compiler [$CC]" |
| echo "" |
| exit 1 |
| fi |
| |
| if [ -n "$IN_ANDROID_BUILD" ] ; then |
| # Get the value of a build variable as an absolute path. |
| function get_abs_build_var() |
| { |
| (cd "$TOP" && |
| CALLED_FROM_SETUP=true make -f config/envsetup.make dumpvar-abs-$1) |
| } |
| |
| PREBUILT=$TOP/prebuilt/$OS |
| if [ ! -d $PREBUILT ] ; then |
| echo "Can't find the prebuilt directory $PREBUILT in Android build" |
| exit 1 |
| fi |
| if [ -n "$USE_CCACHE" ] ; then |
| CCACHE="$TOP/prebuilt/$OS/ccache$EXE" |
| if [ -f $CCACHE ] ; then |
| CC="$TOP/prebuilt/$OS/ccache$EXE $CC" |
| HOSTCC="$CC" |
| fi |
| fi |
| |
| if [ -z "$SDL_CONFIG" ] ; then |
| # always use our own static libSDL by default |
| SDL_CONFIG=$TOP/prebuilt/$OS/sdl/bin/sdl-config |
| fi |
| HOST_BIN=$(get_abs_build_var HOST_OUT_EXECUTABLES) |
| if [ -n "$HOST_BIN" ] ; then |
| TARGETS="$TARGETS $HOST_BIN/emulator$EXE" |
| fi |
| else |
| # try to find sdl-config |
| if [ -z "$SDL_CONFIG" ] ; then |
| SDL_CONFIG=$(which sdl-config) |
| fi |
| if [ -z "$SDL_CONFIG" ] ; then |
| echo "Could not find the 'sdl-config' script" |
| echo "You need to have the development version of the SDL library on this machine to build this program" |
| echo "See (www.libsdl.org for details)" |
| if [ "$OS" = "Linux" ] ; then |
| echo "Try to install the 'libsdl-dev' package on this machine" |
| fi |
| exit 1 |
| fi |
| |
| # check that the static version is usable, this is performed by the configure script |
| # too, but we can be more informative when checking it here |
| TMPC=/tmp/android-qemu-sdl-check.c |
| TMPE=/tmp/android-qemu-sdl-check$EXE |
| TMPL=/tmp/android-qemu-sdl.log |
| cat > $TMPC << EOF |
| #include <SDL.h> |
| #undef main |
| int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } |
| EOF |
| if $HOSTCC -o $TMPE $TMPC `$SDL_CONFIG --cflags` `$SDL_CONFIG --static-libs` 2> $TMPL; then |
| rm -f $TMPC $TMPE |
| else |
| echo "static linking with your installed SDL library doesn't work" |
| echo "please correct the following compilation/link error messages, then try again" |
| cat $TMPL |
| rm -f $TMPL $TMPC $TMPE |
| exit 1 |
| fi |
| fi |
| |
| # if we're in tools/qemu, we output the build commands to the standard outputs |
| # if not, we hide them... |
| if [ -n "$SHOW_COMMANDS" -o `dirname $0` = "." ] ; then |
| STDOUT=/dev/stdout |
| STDERR=/dev/stderr |
| else |
| STDOUT=/dev/null |
| STDERR=/dev/null |
| fi |
| |
| if ! [ -f $SDL_CONFIG ] ; then |
| echo "SDL_CONFIG is set to '$SDL_CONFIG' which doesn't exist" |
| exit 3 |
| fi |
| |
| use_sdl_config="--use-sdl-config=$SDL_CONFIG" |
| |
| # use Makefile.qemu if available |
| # |
| if [ -f Makefile.qemu ] ; then |
| MAKEFILE=Makefile.qemu |
| else |
| MAKEFILE=Makefile |
| fi |
| |
| # compute options for the 'configure' program |
| CONFIGURE_OPTIONS="--disable-user --disable-kqemu --enable-trace --enable-shaper" |
| CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS --enable-skins --enable-nand --enable-sdl $use_sdl_config" |
| |
| if [ "$OS" != "windows" ] ; then |
| # Windows doesn't have signals, so -nand-limits cannot work on this platform |
| CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS --enable-nand-limits" |
| fi |
| |
| CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS --static-png --static-sdl --target-list=arm-softmmu" |
| |
| # we don't want to use the SDL audio driver when possible, since it doesn't support |
| # audio input. select a platform-specific one instead... |
| # |
| AUDIO_OPTIONS="" |
| case $OS in |
| darwin*) AUDIO_OPTIONS=" --enable-coreaudio" |
| ;; |
| windows) AUDIO_OPTIONS=" --enable-winaudio" |
| ;; |
| Linux) |
| if `pkg-config --exists alsa`; then |
| AUDIO_OPTIONS="$AUDIO_OPTIONS --enable-alsa" |
| else |
| if [ "$IGNORE_AUDIO" = "no" ] ; then |
| echo "please install the libasound2-dev package on this machine, or use the --ignore-audio option" |
| exit 3 |
| fi |
| fi |
| if `pkg-config --exists esound`; then |
| AUDIO_OPTIONS="$AUDIO_OPTIONS --enable-esd" |
| else |
| if [ "$IGNORE_AUDIO" = "no" ] ; then |
| echo "please install the libesd0-dev package on this machine, or use the --ignore-audio option" |
| exit 3 |
| fi |
| fi |
| AUDIO_OPTIONS="$AUDIO_OPTIONS --enable-oss" |
| ;; |
| esac |
| CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS$AUDIO_OPTIONS" |
| |
| if [ "$DEBUG" = "yes" ] ; then |
| CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS --debug" |
| fi |
| |
| export CC HOSTCC |
| |
| echo "rebuilding the emulator binary" |
| if ! ( |
| if [ -f arm-softmmu/Makefile ] ; then |
| make -f $MAKEFILE clean |
| fi |
| echo ./configure $CONFIGURE_OPTIONS && |
| ./configure $CONFIGURE_OPTIONS && |
| make -f $MAKEFILE -j4 ) 2>$STDERR >$STDOUT ; then |
| echo "Error while rebuilding the emulator. please check the sources" |
| exit 3 |
| fi |
| |
| for target in $TARGETS; do |
| ( echo "copying binary to $target" && |
| cp -f arm-softmmu/qemu-system-arm$EXE $target && |
| ( if [ -z "$NOSTRIP" ] ; then |
| echo "stripping $target" |
| strip $target ; |
| fi ) |
| ) ; |
| done |
| |