aboutsummaryrefslogtreecommitdiffstats
path: root/android-rebuild.sh
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
commit55f4e4a5ec657a017e3bf75299ad71fd1c968dd3 (patch)
tree550ce922ea0e125ac6a9738210ce2939bf2fe901 /android-rebuild.sh
parent413f05aaf54fa08c0ae7e997327a4f4a473c0a8d (diff)
downloadexternal_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.zip
external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.tar.gz
external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.tar.bz2
Initial Contribution
Diffstat (limited to 'android-rebuild.sh')
-rwxr-xr-xandroid-rebuild.sh265
1 files changed, 265 insertions, 0 deletions
diff --git a/android-rebuild.sh b/android-rebuild.sh
new file mode 100755
index 0000000..443afca
--- /dev/null
+++ b/android-rebuild.sh
@@ -0,0 +1,265 @@
+#!/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
+