blob: 443afca2a9aecb49c898d6bcdb54e473c3dbcf9f [file] [log] [blame]
#!/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