From 55f4e4a5ec657a017e3bf75299ad71fd1c968dd3 Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Tue, 21 Oct 2008 07:00:00 -0700 Subject: Initial Contribution --- android-rebuild.sh | 265 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100755 android-rebuild.sh (limited to 'android-rebuild.sh') 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 +#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 + -- cgit v1.1