diff options
author | Jesse Hall <jessehall@google.com> | 2012-07-23 10:13:06 -0700 |
---|---|---|
committer | android code review <noreply-gerritcodereview@google.com> | 2012-07-23 10:13:06 -0700 |
commit | d95f84da47d4e5c1f9bce2770400fd0d61b0c0b6 (patch) | |
tree | b39ee901bb528b7e3593117cde724ef75d438b67 /distrib/sdl-1.2.15/android-configure.sh | |
parent | 2b3a42e7d0b441f71fc2e2b07269dd1f8151c977 (diff) | |
parent | e4c5d95ed37611acc6a186522315195b4ebfb9ef (diff) | |
download | external_qemu-d95f84da47d4e5c1f9bce2770400fd0d61b0c0b6.zip external_qemu-d95f84da47d4e5c1f9bce2770400fd0d61b0c0b6.tar.gz external_qemu-d95f84da47d4e5c1f9bce2770400fd0d61b0c0b6.tar.bz2 |
Merge "Apply Android changes from sdl-1.2.12 to sdl-1.2.15"
Diffstat (limited to 'distrib/sdl-1.2.15/android-configure.sh')
-rwxr-xr-x | distrib/sdl-1.2.15/android-configure.sh | 553 |
1 files changed, 553 insertions, 0 deletions
diff --git a/distrib/sdl-1.2.15/android-configure.sh b/distrib/sdl-1.2.15/android-configure.sh new file mode 100755 index 0000000..94ef732 --- /dev/null +++ b/distrib/sdl-1.2.15/android-configure.sh @@ -0,0 +1,553 @@ +#/bin/sh +# +# this script is used to rebuild SDL from sources in the current +# directory. It depends on the Android emulator build scripts +# that should normally be located in ../emulator/android/build +# but you can also use ANDROID_QEMU_PATH in your environment +# to point to the top of the Android emulator sources +# +# + +# first, let's see which system we're running this on +cd `dirname $0` + +# try to find the Android build directory automatically +if [ -z "$ANDROID_QEMU_PATH" ] ; then + if [ -f ../../android/build/common.sh ] ; then + ANDROID_QEMU_PATH=../.. + else + echo "You must define ANDROID_QEMU_PATH in your environment to point" + echo "to the directory containing the Android emulator's sources." + exit 1 + fi +fi + +if [ ! -d $ANDROID_QEMU_PATH ] ; then + echo "Your ANDROID_QEMU_PATH does not point to a valid directory." + exit 1 +fi + +if [ ! -f $ANDROID_QEMU_PATH/android/build/common.sh ] ; then + echo "Your ANDROID_QEMU_PATH does not point to a directory that" + echo "contains the Android emulator build scripts." + exit 1 +fi + +# source common functions definitions +. $ANDROID_QEMU_PATH/android/build/common.sh + +# Parse options +OPTION_TRY_64=no +OPTION_HELP=no +OPTION_TARGETS= +OPTION_FORCE_AUTODETECT=no +OPTION_NO_TIGER=no + +if [ -z "$CC" ] ; then + CC=gcc +fi + +for opt do + optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` + case "$opt" in + --help|-h|-\?) OPTION_HELP=yes + ;; + --verbose) + if [ "$VERBOSE" = "yes" ] ; then + VERBOSE2=yes + else + VERBOSE=yes + fi + ;; + --cc=*) CC="$optarg" ; HOSTCC=$CC + ;; + --try-64) OPTION_TRY_64=yes + ;; + --prefix=*) OPTION_TARGETS="$OPTION_TARGETS $optarg" + ;; + --force-autodetect) OPTION_FORCE_AUTODETECT=yes + ;; + --no-tiger) OPTION_NO_TIGER=yes + ;; + *) + echo "unknown option '$opt', use --help" + exit 1 + esac +done + +# Print the help message +# +if [ "$OPTION_HELP" = "yes" ] ; then + cat << EOF + +Usage: rebuild.sh [options] +Options: [defaults in brackets after descriptions] +EOF + echo "Standard options:" + echo " --help print this message" + echo " --cc=PATH specify C compiler [$CC]" + echo " --try-64 try to build a 64-bit executable (may crash)" + echo " --verbose verbose configuration" + echo " --force-autodetect force feature auto-detection" + echo " --no-tiger do not generate Tiger-compatible binaries (OS X only)" + echo "" + exit 1 +fi + +# we only support generating 32-bit binaris on 64-bit systems. +# And we may need to add a -Wa,--32 to CFLAGS to let the assembler +# generate 32-bit binaries on Linux x86_64. +# +if [ "$OPTION_TRY_64" != "yes" ] ; then + force_32bit_binaries +fi + +# default target +if [ -z "$OPTION_TARGETS" ] ; then + OPTION_TARGETS=out/$OS +fi + +# we can build SDL with Cygwin, so enable it +enable_cygwin + +setup_toolchain + +### +### Special compiler and linker flags +### + +case "$OS" in + linux-*) + BUILD_CFLAGS="-D_GNU_SOURCE=1 -fvisibility=hidden -DXTHREADS -D_REENTRANT" + # prevent -fstack-protector or the generated binaries will not link + BUILD_CFLAGS="$BUILD_CFLAGS -fno-stack-protector" + ;; + darwin-*) + BUILD_CFLAGS="-D_GNU_SOURCE=1 -fvisibility=hidden -DTARGET_API_MAC_CARBON -DTARGET_API_MAC_OSX -D_THREAD_SAFE -force_cpusubtype_ALL -fpascal-strings" + # detect the 10.4 SDK and use it automatically + TIGER_SDK=/Developer/SDKs/MacOSX10.4u.sdk + if [ ! -d $TIGER_SDK -a $OPTION_NO_TIGER = no ] ; then + echo "Please install the 10.4 SDK at $TIGER_SDK to generate Tiger-compatible binaries." + echo "If you don't want compatibility, use --no-tiger option instead." + exit 1 + fi + if [ -d $TIGER_SDK ] ; then + TIGER_OPTS="-isysroot $TIGER_SDK -mmacosx-version-min=10.4" + BUILD_CFLAGS="$BUILD_CFLAGS $TIGER_OPTS" + BUILD_LDFLAGS="$BUILD_LDFLAGS $TIGER_OPTS -Wl,-syslibroot,$(TIGER_SDK)" + echo "Using OS X 10.4 SDK to generate Tiger-compatible binaries." + else + echo "Warning: the generated binaries will not be compatible with Tiger." + fi + ;; + windows) + BUILD_CFLAGS="-D_GNU_SOURCE=1" + ;; + *) + BUILD_CFLAGS= +esac + +# BUILD_CFLAGS are used to build SDL, but SDL_CFLAGS are used +# when clients want to use its facilities +# +case "$HOST_OS" in + linux) + SDL_CFLAGS="-D_GNU_SOURCE=1 -D_REENTRANT" + SDL_STATIC_LIBS="-lm -ldl -lpthread -lrt" + ;; + darwin) + SDL_CFLAGS="-D_GNU_SOURCE=1 -D_THREAD_SAFE" + SDL_STATIC_LIBS="-Wl,-framework,OpenGL -Wl,-framework,Cocoa -Wl,-framework,QuickTime -Wl,-framework,ApplicationServices -Wl,-framework,Carbon -Wl,-framework,IOKit" + ;; + windows) + SDL_CFLAGS="-D_GNU_SOURCE=1 -Dmain=SDL_main" + SDL_STATIC_LIBS="-luser32 -lgdi32 -lwinmm" + ;; + *) + SDL_CFLAGS= + SDL_STATIC_LIBS= +esac + +DOLLAR="$" +SDL_STATIC_LIBS="$DOLLAR{libdir}/libSDLmain.a $DOLLAR{libdir}/libSDL.a $SDL_STATIC_LIBS" + +### +### Features probes +### + +CONFIG_LIBC=yes + +### +### Configuration files generation +### + +# create the objs directory that is going to contain all generated files +# including the configuration ones +# +mkdir -p objs + +config_add () +{ + echo "$1" >> $config_h +} + +# used to add a macro define/undef line to the configuration +# $1: macro name +# $2: 1, 0, yes or no +# $3: optional log prefix +config_add_macro () +{ + local logname + logname="${3:-CfgMacro }" + case "$2" in + 0|no|false) + config_add "/* #undef $1 */" + log "$logname: $1=0" + ;; + 1|yes|true) + config_add "#define $1 1" + log "$logname: $1=1" + ;; + esac +} + +# used to add host-os-specific driver macros to the config file +# $1 : driver prefix, e.g. DRIVERS_VIDEO +# $2 : macro prefix +# this will look for DRIVERS_VIDEO_${HOST_OS}, and, if it is not +# defined in DRIVERS_VIDEO_default +# +# then this will call 'config_add ${2}_${driver}' for each driver listed +# +config_add_driver_macros () +{ + local driver_list="`var_value ${1}_${HOST_OS}`" + local driver_name + if [ -z "$driver_list" ] ; then + driver_list="`var_value ${1}_default`" + fi + for driver_name in $driver_list; do + config_add_macro "${2}_${driver_name}" yes + done +} + +config_h=objs/SDL_config.h + +# a function used to check the availability of a given Standard C header +# $1 : header name, without the .h suffix nor enclosing brackets (e.g. 'memory' for <memory.h>) +# this will update the configuration with a relevant line +sdl_check_header () +{ + local result + local header + local macro + header="<$1.h>" + macro=`to_uppercase $1` + macro=`echo $macro | tr '/' '_'` + feature_check_header result "$header" + config_add_macro HAVE_${macro}_H $result "StdCHeader " +} + +# call sdl_check_header with a list of header names +sdl_check_headers () +{ + for hh in $*; do + sdl_check_header "$hh" + done +} + +# a function used to check that a given function is available in the C library +# this will update the configuration with a relevant line +# $1: function name +# $2: optional, libraries to link against +# +sdl_check_func () +{ + local result + local funcname + local macro + funcname="$1" + macro=`to_uppercase $1` + rm -f $TMPC + cat > $TMPC <<EOF +#undef $funcname +#define $funcname _innocuous_$funcname +#include <assert.h> +#undef $funcname + +typedef void (*func_t)(void); +extern void $funcname(void); +func_t _dummy = $funcname; +int main(void) +{ + return _dummy == $funcname; +} +EOF + EXTRA_LDFLAGS="$2" + feature_check_link result + config_add_macro HAVE_${macro} $result "StdCFunc " +} + +# call sdl_check_func with a list of functions +sdl_check_funcs () +{ + for ff in $*; do + sdl_check_func "$ff" + done +} + +# check endianess of the host platform +sdl_check_endianess () +{ + cat > $TMPC <<EOF + int main(void) + { + union { + unsigned short v; + unsigned char b[2]; + } u; + + u.v = 0x1234; + return (u.b[0] == 0x12); + } +EOF + feature_run_exec test_e + if [ "$test_e" = "1" ] ; then + eval $1=4321 + else + eval $1=1234 + fi +} + + +generate_SDL_config_h () +{ + echo "/* This file was autogenerated by '$PROGNAME' - do not edit */" > $config_h + + config_add "#ifndef _SDL_config_h" + config_add "#define _SDL_config_h" + config_add "" + config_add "#include \"SDL_platform.h\"" + config_add "" + + # true for all architectures these days + config_add_macro SDL_HAS_64BIT_TYPE 1 + + sdl_check_endianess ENDIANESS + config_add "#define SDL_BYTEORDER $ENDIANESS" + config_add "" + + config_add_macro HAVE_LIBC $CONFIG_LIBC + + config_add "#if HAVE_LIBC" + config_add "" + config_add "/* Useful headers */" + + sdl_check_headers alloca sys/types stdio + + # just like configure - force it to 1 + config_add "#define STDC_HEADERS 1" + + sdl_check_headers stdlib stdarg malloc memory string strings inttypes stdint ctype math iconv signal altivec + + config_add "/* C library functions */" + + sdl_check_funcs malloc calloc realloc free alloc + + config_add "#ifndef _WIN32 /* Don't use on Windows */" + + sdl_check_funcs getenv putenv unsetenv + + config_add "#endif" + sdl_check_funcs qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat + sdl_check_funcs strdup _strrev _strupr _strlwr index rindex strchr strrchr itoa _ltoa + sdl_check_funcs _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull + sdl_check_funcs strtod atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp + sdl_check_funcs vsnprintf iconv sigaction setjmp nanosleep + + sdl_check_func clock_gettime -lrt + sdl_check_func dlvsym -ldl + + sdl_check_funcs getpagesize + + config_add "#else" + config_add "/* We may need some replacement for stdarg.h here */" + config_add "#include <stdarg.h>" + config_add "#endif /* HAVE_LIBC */" + config_add "" + + config_add "/* Allow disabling of core subsystems */" + + config_add_macro SDL_AUDIO_DISABLED yes + config_add_macro SDL_CDROM_DISABLED yes + config_add_macro SDL_CPUINFO_DISABLED no + config_add_macro SDL_EVENTS_DISABLED no + config_add_macro SDL_FILE_DISABLED yes + config_add_macro SDL_JOYSTICK_DISABLED yes + config_add_macro SDL_LOADSO_DISABLED no + config_add_macro SDL_THREADS_DISABLED no + config_add_macro SDL_TIMERS_DISABLED no + config_add_macro SDL_VIDEO_DISABLED no + + config_add "" + config_add "/* Enable various shared object loading systems */" + + config_add_driver_macros DRIVERS_LOADSO SDL_LOADSO + + config_add "" + config_add "/* Enable various threading systems */" + + config_add_driver_macros DRIVERS_THREAD SDL_THREAD + + config_add "" + config_add "/* Enable various timer systems */" + + config_add_driver_macros DRIVERS_TIMER SDL_TIMER + + config_add "" + config_add "/* Enable various video drivers */" + + config_add_driver_macros DRIVERS_VIDEO SDL_VIDEO_DRIVER + + config_add_driver_macros DRIVERS_MAIN SDL_MAIN + + # the following defines are good enough for all recent Unix distributions + config_add "#define SDL_VIDEO_DRIVER_X11_DYNAMIC \"libX11.so.6\"" + config_add "#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT \"libXext.so.6\"" + config_add "#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR \"libXrandr.so.2\"" + config_add "#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER \"libXrender.so.1\"" + + # todo: OpenGL support ? + # todo: Assembly routines support ? + + config_add "#endif /* _SDL_config_h */" +} + +### Build the config sub-makefile +### + +make_add () +{ + echo "$1" >> $config_mk +} + +make_add_driver_macros () +{ + local driver_list="`var_value ${1}_${HOST_OS}`" + local driver_name + if [ -z "$driver_list" ] ; then + driver_list="`var_value ${1}_default`" + fi + for driver_name in $driver_list; do + make_add "SDL_$2_${driver_name} := yes" + done +} + +generate_sdl_config_mk () +{ + CFLAGS="$CFLAGS $BUILD_CFLAGS" + LDFLAGS="$LDFLAGS $BUILD_LDFLAGS" + create_config_mk + + make_add "" + PWD=`pwd` + make_add "SRC_PATH=$PWD" + make_add "BUILD_SYSTEM=$ANDROID_QEMU_PATH/android/build" + + make_add "SDL_CONFIG_LIBC := $CONFIG_LIBC" + make_add "SDL_CONFIG_CPUINFO := yes" + + make_add_driver_macros DRIVERS_LOADSO CONFIG_LOADSO + make_add_driver_macros DRIVERS_THREAD CONFIG_THREAD + make_add_driver_macros DRIVERS_TIMER CONFIG_TIMER + make_add_driver_macros DRIVERS_VIDEO CONFIG_VIDEO + + make_add_driver_macros DRIVERS_MAIN CONFIG_MAIN + + make_add "INSTALL_TARGETS := $OPTION_TARGETS" +} + +### Build the final sdl-config script from the template +### + +generate_sdl_config () +{ + # build a sed script that will replace all @VARIABLES@ in the template + # with appropriate values + rm -f $TMPC + + # replace @exec_prefix@ with "{prefix}", and @libdir@ with "{libdir}" + cat > $TMPC <<EOF +s!@exec_prefix@!\$\{prefix\}!g +s!@libdir@!\$\{exec_prefix\}/libs!g +s!@includedir@!\$\{prefix\}/include!g +EOF + + # we want to enable static linking, do @ENABLE_STATIC_FALSE@ and @ENABLE_STATIC_TRUE@ + cat >> $TMPC <<EOF +s!@ENABLE_STATIC_FALSE@!\#!g +s!@ENABLE_STATIC_TRUE@!!g +s!@ENABLE_SHARED_TRUE@!\#!g +s!@ENABLE_SHARED_FALSE@!!g +EOF + + # set the version to 1.2.15 + cat >> $TMPC <<EOF +s!@SDL_VERSION@!1.2.15!g +EOF + + # + cat >> $TMPC <<EOF +s!@SDL_CFLAGS@!$SDL_CFLAGS!g +s!@SDL_STATIC_LIBS@!$SDL_STATIC_LIBS!g +EOF + + cat sdl-config.in | sed -f $TMPC > objs/sdl-config + chmod +x objs/sdl-config +} + +# copy a configuration file or perform auto-detection if one is not available +# or the --force-autodetect option was used +# $1: basename of config file +# $2: command to run to perform auto-detection/generation +# +copy_or_autodetect () +{ + if [ "$OPTION_FORCE_AUTODETECT" != "yes" -a -f android/build/$OS/$1 ] ; then + log "Setup : Copying $1 from android/build/$OS" + cp -f android/build/$OS/$1 objs/$1 + else + log "Setup : Auto-generating $1" + eval $2 + fi +} + +generate_all () +{ + copy_or_autodetect SDL_config.h generate_SDL_config_h + generate_sdl_config_mk + copy_or_autodetect sdl-config generate_sdl_config +} + +DRIVERS_LOADSO_default=DLOPEN +DRIVERS_LOADSO_darwin=DLCOMPAT +DRIVERS_LOADSO_windows=WIN32 + +# TODO: determine if PTHREAD_RECURSIVE or PTHREAD_RECURSIVE_NP is valid for the platform +DRIVERS_THREAD_default="PTHREAD PTHREAD_RECURSIVE_MUTEX" +DRIVERS_THREAD_linux="PTHREAD PTHREAD_RECURSIVE_MUTEX_NP" +DRIVERS_THREAD_windows=WIN32 + +DRIVERS_TIMER_default=UNIX +DRIVERS_TIMER_windows=WIN32 + +# TODO: actually compute this properly for X11 and dynamic loading !! +DRIVERS_VIDEO_default="X11 X11_DPMS X11_XINERAMA X11_XME" +DRIVERS_VIDEO_darwin="QUARTZ" +DRIVERS_VIDEO_windows="WINDIB" + +DRIVERS_MAIN_default=DUMMY +DRIVERS_MAIN_darwin=MACOSX +DRIVERS_MAIN_windows=WIN32 + +generate_all |