diff --git a/build.sh b/build.sh index 8a2959411..2b8fae976 100755 --- a/build.sh +++ b/build.sh @@ -84,20 +84,36 @@ rm -r -f project/bin/* # New Android SDK introduced some lame-ass optimizations cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU nice -n19 ndk-build -j$NCPU V=1 && \ { grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \ - echo Stripping libapplication.so by hand && \ + echo Stripping libapplication-armeabi.so by hand && \ rm obj/local/armeabi/libapplication.so && \ - cp jni/application/src/libapplication.so obj/local/armeabi/ && \ - cp jni/application/src/libapplication.so libs/armeabi/ && \ + cp jni/application/src/libapplication-armeabi.so obj/local/armeabi/libapplication.so && \ + cp jni/application/src/libapplication-armeabi.so libs/armeabi/libapplication.so && \ `which ndk-build | sed 's@/ndk-build@@'`/toolchains/arm-linux-androideabi-4.6/prebuilt/$MYARCH/bin/arm-linux-androideabi-strip --strip-unneeded libs/armeabi/libapplication.so \ || true ; } && \ { grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \ - grep "MultiABI=" ../AndroidAppSettings.cfg | grep "y\\|armeabi-v7a" > /dev/null && \ + grep "MultiABI=" ../AndroidAppSettings.cfg | grep "y\\|all\\|armeabi-v7a" > /dev/null && \ echo Stripping libapplication-armeabi-v7a.so by hand && \ rm obj/local/armeabi-v7a/libapplication.so && \ cp jni/application/src/libapplication-armeabi-v7a.so obj/local/armeabi-v7a/libapplication.so && \ cp jni/application/src/libapplication-armeabi-v7a.so libs/armeabi-v7a/libapplication.so && \ `which ndk-build | sed 's@/ndk-build@@'`/toolchains/arm-linux-androideabi-4.6/prebuilt/$MYARCH/bin/arm-linux-androideabi-strip --strip-unneeded libs/armeabi-v7a/libapplication.so \ || true ; } && \ + { grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \ + grep "MultiABI=" ../AndroidAppSettings.cfg | grep "all\\|mips" > /dev/null && \ + echo Stripping libapplication-mips.so by hand && \ + rm obj/local/mips/libapplication.so && \ + cp jni/application/src/libapplication-mips.so obj/local/mips/libapplication.so && \ + cp jni/application/src/libapplication-mips.so libs/mips/libapplication.so && \ + `which ndk-build | sed 's@/ndk-build@@'`/toolchains/mipsel-linux-android-4.6/prebuilt/$MYARCH/bin/mipsel-linux-android-strip --strip-unneeded libs/mips/libapplication.so \ + || true ; } && \ + { grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \ + grep "MultiABI=" ../AndroidAppSettings.cfg | grep "all\\|x86" > /dev/null && \ + echo Stripping libapplication-x86.so by hand && \ + rm obj/local/x86/libapplication.so && \ + cp jni/application/src/libapplication-x86.so obj/local/x86/libapplication.so && \ + cp jni/application/src/libapplication-x86.so libs/x86/libapplication.so && \ + `which ndk-build | sed 's@/ndk-build@@'`/toolchains/x86-4.6/prebuilt/$MYARCH/bin/i686-linux-android-strip --strip-unneeded libs/x86/libapplication.so \ + || true ; } && \ cd .. && ./copyAssets.sh && cd project && \ { if $build_release ; then \ ant release || exit 1 ; \ diff --git a/project/jni/application/Android.mk b/project/jni/application/Android.mk index 7a6e7ab5b..2c0926885 100644 --- a/project/jni/application/Android.mk +++ b/project/jni/application/Android.mk @@ -75,15 +75,25 @@ OVERRIDE_CUSTOM_LIB: LOCAL_PATH_SDL_APPLICATION := $(LOCAL_PATH) -obj/local/$(TARGET_ARCH_ABI)/libapplication.so: $(LOCAL_PATH)/src/libapplication-$(TARGET_ARCH_ABI).so +obj/local/armeabi/libapplication.so: $(LOCAL_PATH)/src/libapplication-armeabi.so -$(LOCAL_PATH)/src/libapplication-$(TARGET_ARCH_ABI).so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB - cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh $(TARGET_ARCH_ABI) +$(LOCAL_PATH)/src/libapplication-armeabi.so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB + cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh armeabi arm-linux-androideabi && \ + { [ -e libapplication.so ] && ln -s libapplication.so libapplication-armeabi.so || true ; } -# Old code has ARMv5 library compiled as libapplication.so -ifeq ($(TARGET_ARCH_ABI),armeabi) -$(LOCAL_PATH)/src/libapplication-$(TARGET_ARCH_ABI).so: $(LOCAL_PATH)/src/libapplication.so - cd $(LOCAL_PATH_SDL_APPLICATION)/src && ln -s libapplication.so libapplication-$(TARGET_ARCH_ABI).so -endif +obj/local/armeabi-v7a/libapplication.so: $(LOCAL_PATH)/src/libapplication-armeabi-v7a.so + +$(LOCAL_PATH)/src/libapplication-armeabi-v7a.so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB + cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh armeabi-v7a arm-linux-androideabi + +obj/local/mips/libapplication.so: $(LOCAL_PATH)/src/libapplication-mips.so + +$(LOCAL_PATH)/src/libapplication-mips.so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB + cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh mips mipsel-linux-android + +obj/local/x86/libapplication.so: $(LOCAL_PATH)/src/libapplication-x86.so + +$(LOCAL_PATH)/src/libapplication-x86.so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB + cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh x86 i686-linux-android endif # $(APPLICATION_CUSTOM_BUILD_SCRIPT) diff --git a/project/jni/application/setEnvironment-armeabi-v7a.sh b/project/jni/application/setEnvironment-armeabi-v7a.sh index 3e51b6a0c..7725d2223 100755 --- a/project/jni/application/setEnvironment-armeabi-v7a.sh +++ b/project/jni/application/setEnvironment-armeabi-v7a.sh @@ -50,9 +50,10 @@ MISSING_LIB= CFLAGS="\ -fpic -ffunction-sections -funwind-tables -fstack-protector \ --no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb \ --fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -marm -fno-omit-frame-pointer \ --DANDROID -DNDEBUG -O2 -g -finline-functions -Wa,--noexecstack -Wformat -Werror=format-security \ +-no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp \ +-mfpu=vfpv3-d16 -mthumb -O2 -g -DNDEBUG \ +-fomit-frame-pointer -fno-strict-aliasing -finline-limit=300 \ +-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \ -isystem$NDK/platforms/$PLATFORMVER/arch-arm/usr/include \ -isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \ -isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \ @@ -93,7 +94,7 @@ $MISSING_LIB $LDFLAGS" env PATH=$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \ CFLAGS="$CFLAGS" \ -CXXFLAGS="$CXXFLAGS $CFLAGS" \ +CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \ LDFLAGS="$LDFLAGS" \ CC="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc" \ CXX="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \ diff --git a/project/jni/application/setEnvironment-mips.sh b/project/jni/application/setEnvironment-mips.sh new file mode 100755 index 000000000..74cc5da36 --- /dev/null +++ b/project/jni/application/setEnvironment-mips.sh @@ -0,0 +1,109 @@ +#!/bin/sh + +IFS=' +' + +MYARCH=linux-x86 +if uname -s | grep -i "linux" > /dev/null ; then + MYARCH=linux-x86 +fi +if uname -s | grep -i "darwin" > /dev/null ; then + MYARCH=darwin-x86 +fi +if uname -s | grep -i "windows" > /dev/null ; then + MYARCH=windows-x86 +fi + +NDK=`which ndk-build` +NDK=`dirname $NDK` +NDK=`readlink -f $NDK` + +grep "64.bit" "$NDK/RELEASE.TXT" >/dev/null 2>&1 && MYARCH="${MYARCH}_64" + +#echo NDK $NDK +GCCPREFIX=mipsel-linux-android +[ -z "$GCCVER" ] && GCCVER=4.6 +[ -z "$PLATFORMVER" ] && PLATFORMVER=android-14 +LOCAL_PATH=`dirname $0` +if which realpath > /dev/null ; then + LOCAL_PATH=`realpath $LOCAL_PATH` +else + LOCAL_PATH=`cd $LOCAL_PATH && pwd` +fi +ARCH=mips + +APP_MODULES=`grep 'APP_MODULES [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@'` +APP_AVAILABLE_STATIC_LIBS=`grep 'APP_AVAILABLE_STATIC_LIBS [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@'` +APP_SHARED_LIBS=$( +echo $APP_MODULES | xargs -n 1 echo | while read LIB ; do + STATIC=`echo $APP_AVAILABLE_STATIC_LIBS application sdl_main stlport stdout-test | grep "\\\\b$LIB\\\\b"` + if [ -n "$STATIC" ] ; then true + else + echo $LIB + fi +done +) + + +MISSING_INCLUDE= +MISSING_LIB= + +CFLAGS="\ +-fpic -fno-strict-aliasing -finline-functions -ffunction-sections \ +-funwind-tables -fmessage-length=0 -fno-inline-functions-called-once \ +-fgcse-after-reload -frerun-cse-after-loop -frename-registers \ +-no-canonical-prefixes -O2 -g -DNDEBUG -fomit-frame-pointer \ +-funswitch-loops -finline-limit=300 \ +-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \ +-isystem$NDK/platforms/$PLATFORMVER/arch-mips/usr/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include/backward \ +-isystem$LOCAL_PATH/../sdl-1.2/include \ +`echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-isystem$LOCAL_PATH/../\1/include@g\"` \ +$MISSING_INCLUDE $CFLAGS" + +if [ -z "$SHARED_LIBRARY_NAME" ]; then + SHARED_LIBRARY_NAME=libapplication.so +fi +UNRESOLVED="-Wl,--no-undefined" +SHARED="-shared -Wl,-soname,$SHARED_LIBRARY_NAME" +if [ -n "$BUILD_EXECUTABLE" ]; then + SHARED="-Wl,--gc-sections -Wl,-z,nocopyreloc" +fi +if [ -n "$NO_SHARED_LIBS" ]; then + APP_SHARED_LIBS= +fi +if [ -n "$ALLOW_UNRESOLVED_SYMBOLS" ]; then + UNRESOLVED= +fi + +LDFLAGS="\ +$SHARED \ +--sysroot=$NDK/platforms/$PLATFORMVER/arch-mips \ +-L$LOCAL_PATH/../../obj/local/$ARCH \ +`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/$ARCH/lib\1.so@g\"` \ +-L$NDK/platforms/$PLATFORMVER/arch-mips/usr/lib \ +-lc -lm -lGLESv1_CM -ldl -llog -lz \ +-L$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH \ +-lgnustl_static \ +-no-canonical-prefixes $UNRESOLVED -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now \ +-lsupc++ \ +$MISSING_LIB $LDFLAGS" + +#echo env CFLAGS=\""$CFLAGS"\" LDFLAGS=\""$LDFLAGS"\" "$@" + +env PATH=$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \ +CFLAGS="$CFLAGS" \ +CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \ +LDFLAGS="$LDFLAGS" \ +CC="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc" \ +CXX="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \ +RANLIB="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ranlib" \ +LD="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \ +AR="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ar" \ +CPP="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp $CFLAGS" \ +NM="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-nm" \ +AS="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \ +STRIP="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-strip" \ +"$@" diff --git a/project/jni/application/setEnvironment-x86.sh b/project/jni/application/setEnvironment-x86.sh new file mode 100755 index 000000000..86c99e08c --- /dev/null +++ b/project/jni/application/setEnvironment-x86.sh @@ -0,0 +1,108 @@ +#!/bin/sh + +IFS=' +' + +MYARCH=linux-x86 +if uname -s | grep -i "linux" > /dev/null ; then + MYARCH=linux-x86 +fi +if uname -s | grep -i "darwin" > /dev/null ; then + MYARCH=darwin-x86 +fi +if uname -s | grep -i "windows" > /dev/null ; then + MYARCH=windows-x86 +fi + +NDK=`which ndk-build` +NDK=`dirname $NDK` +NDK=`readlink -f $NDK` + +grep "64.bit" "$NDK/RELEASE.TXT" >/dev/null 2>&1 && MYARCH="${MYARCH}_64" + +#echo NDK $NDK +GCCPREFIX=i686-linux-android +[ -z "$GCCVER" ] && GCCVER=4.6 +[ -z "$PLATFORMVER" ] && PLATFORMVER=android-14 +LOCAL_PATH=`dirname $0` +if which realpath > /dev/null ; then + LOCAL_PATH=`realpath $LOCAL_PATH` +else + LOCAL_PATH=`cd $LOCAL_PATH && pwd` +fi +ARCH=x86 + +APP_MODULES=`grep 'APP_MODULES [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@'` +APP_AVAILABLE_STATIC_LIBS=`grep 'APP_AVAILABLE_STATIC_LIBS [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@'` +APP_SHARED_LIBS=$( +echo $APP_MODULES | xargs -n 1 echo | while read LIB ; do + STATIC=`echo $APP_AVAILABLE_STATIC_LIBS application sdl_main stlport stdout-test | grep "\\\\b$LIB\\\\b"` + if [ -n "$STATIC" ] ; then true + else + echo $LIB + fi +done +) + + +MISSING_INCLUDE= +MISSING_LIB= + +CFLAGS="\ +-ffunction-sections -funwind-tables -no-canonical-prefixes \ +-fstack-protector -O2 -g -DNDEBUG \ +-fomit-frame-pointer -fstrict-aliasing -funswitch-loops \ +-finline-limit=300 \ +-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \ +-isystem$NDK/platforms/$PLATFORMVER/arch-x86/usr/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include/backward \ +-isystem$LOCAL_PATH/../sdl-1.2/include \ +`echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-isystem$LOCAL_PATH/../\1/include@g\"` \ +$MISSING_INCLUDE $CFLAGS" + +if [ -z "$SHARED_LIBRARY_NAME" ]; then + SHARED_LIBRARY_NAME=libapplication.so +fi +UNRESOLVED="-Wl,--no-undefined" +SHARED="-shared -Wl,-soname,$SHARED_LIBRARY_NAME" +if [ -n "$BUILD_EXECUTABLE" ]; then + SHARED="-Wl,--gc-sections -Wl,-z,nocopyreloc" +fi +if [ -n "$NO_SHARED_LIBS" ]; then + APP_SHARED_LIBS= +fi +if [ -n "$ALLOW_UNRESOLVED_SYMBOLS" ]; then + UNRESOLVED= +fi + +LDFLAGS="\ +$SHARED \ +--sysroot=$NDK/platforms/$PLATFORMVER/arch-x86 \ +-L$LOCAL_PATH/../../obj/local/$ARCH \ +`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/$ARCH/lib\1.so@g\"` \ +-L$NDK/platforms/$PLATFORMVER/arch-x86/usr/lib \ +-lc -lm -lGLESv1_CM -ldl -llog -lz \ +-L$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH \ +-lgnustl_static \ +-no-canonical-prefixes $UNRESOLVED -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now \ +-lsupc++ \ +$MISSING_LIB $LDFLAGS" + +#echo env CFLAGS=\""$CFLAGS"\" LDFLAGS=\""$LDFLAGS"\" "$@" + +env PATH=$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \ +CFLAGS="$CFLAGS" \ +CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \ +LDFLAGS="$LDFLAGS" \ +CC="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc" \ +CXX="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \ +RANLIB="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ranlib" \ +LD="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \ +AR="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ar" \ +CPP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp $CFLAGS" \ +NM="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-nm" \ +AS="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \ +STRIP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-strip" \ +"$@" diff --git a/project/jni/application/setEnvironment.sh b/project/jni/application/setEnvironment.sh index db661634e..a2e8ddc22 100755 --- a/project/jni/application/setEnvironment.sh +++ b/project/jni/application/setEnvironment.sh @@ -49,10 +49,11 @@ MISSING_INCLUDE= MISSING_LIB= CFLAGS="\ --fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ --no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -mthumb \ --fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \ --DANDROID -DNDEBUG -O2 -g -finline-functions -Wa,--noexecstack \ +-fpic -ffunction-sections -funwind-tables -fstack-protector \ +-no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float \ +-mthumb -O2 -g -DNDEBUG \ +-fomit-frame-pointer -fno-strict-aliasing -finline-limit=300 \ +-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \ -isystem$NDK/platforms/$PLATFORMVER/arch-arm/usr/include \ -isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \ -isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \ @@ -93,7 +94,7 @@ $MISSING_LIB $LDFLAGS" env PATH=$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \ CFLAGS="$CFLAGS" \ -CXXFLAGS="$CXXFLAGS $CFLAGS" \ +CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \ LDFLAGS="$LDFLAGS" \ CC="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc" \ CXX="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \