From e4c5d95ed37611acc6a186522315195b4ebfb9ef Mon Sep 17 00:00:00 2001 From: Jesse Hall Date: Mon, 9 Jul 2012 11:42:54 -0700 Subject: Apply Android changes from sdl-1.2.12 to sdl-1.2.15 These changes come from diffing Android's sdl-1.2.12 tree against a pure upstream sdl-1.2.12 tree, and then manually applying those differences to the sdl-1.2.15 tree. Change-Id: I05fa6e8004bb629fa2482f092b6ab127b7e51e73 --- distrib/sdl-1.2.15/android-configure.sh | 553 ++++++++++++++++++++++++++++++++ 1 file changed, 553 insertions(+) create mode 100755 distrib/sdl-1.2.15/android-configure.sh (limited to 'distrib/sdl-1.2.15/android-configure.sh') 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 ) +# 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 < +#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 < $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 " + 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 <> $TMPC <> $TMPC <> $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 -- cgit v1.1