diff --git a/.gitmodules b/.gitmodules index 9fdca3e72..151222add 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,3 +25,6 @@ [submodule "project/jni/application/scummvm/scummvm"] path = project/jni/application/scummvm/scummvm url = https://github.com/scummvm/scummvm.git +[submodule "project/jni/application/openarena/vm"] + path = project/jni/application/openarena/vm + url = https://github.com/pelya/openarena-vm diff --git a/build.sh b/build.sh index 9e7b63fc3..148bca1be 100755 --- a/build.sh +++ b/build.sh @@ -44,12 +44,19 @@ fi rm -r -f project/bin/* # New Android SDK introduced some lame-ass optimizations to the build system which we should take care about cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU nice -n19 ndk-build -j$NCPU && \ { grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \ - [ -`which ndk-build | xargs readlink -f | grep '/android-ndk-r[56789]'` != - ] && \ - echo Stripping libapplication.so by hand \ + echo Stripping libapplication.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 && \ - `which ndk-build | sed 's@/ndk-build@@'`/toolchains/arm-linux-androideabi-4.4.3/prebuilt/$MYARCH/bin/arm-linux-androideabi-strip --strip-unneeded libs/armeabi/libapplication.so \ + cp jni/application/src/libapplication.so obj/local/armeabi/ && \ + cp jni/application/src/libapplication.so libs/armeabi/ && \ + `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=y" ../AndroidAppSettings.cfg > /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 ; } && \ ant debug && \ $install_apk && [ -n "`adb devices | tail -n +2`" ] && \ diff --git a/project/jni/application/Android.mk b/project/jni/application/Android.mk index d63f63b2d..bbb73bad7 100644 --- a/project/jni/application/Android.mk +++ b/project/jni/application/Android.mk @@ -93,8 +93,9 @@ endif #$(error Detected libraries with too long symbol names. Remove all files under project/obj/local/armeabi, make these libs static, and recompile) #endif -APP_LIB_DEPENDS := $(foreach LIB, $(LOCAL_SHARED_LIBRARIES), $(abspath $(LOCAL_PATH)/../../obj/local/armeabi/lib$(LIB).so)) -APP_LIB_DEPENDS += $(foreach LIB, $(LOCAL_STATIC_LIBRARIES), $(abspath $(LOCAL_PATH)/../../obj/local/armeabi/lib$(LIB).a)) +SDL_APP_LIB_DEPENDS := $(LOCAL_PATH)/src/AndroidBuild.sh $(LOCAL_PATH)/src/AndroidAppSettings.cfg +SDL_APP_LIB_DEPENDS += $(foreach LIB, $(LOCAL_SHARED_LIBRARIES), obj/local/$(TARGET_ARCH_ABI)/lib$(LIB).so) +SDL_APP_LIB_DEPENDS += $(foreach LIB, $(LOCAL_STATIC_LIBRARIES), obj/local/$(TARGET_ARCH_ABI)/lib$(LIB).a) include $(BUILD_SHARED_LIBRARY) @@ -103,28 +104,23 @@ ifneq ($(APPLICATION_CUSTOM_BUILD_SCRIPT),) # TODO: here we're digging inside NDK internal build system, that's not portable # NDK r5b provided the $(PREBUILT_SHARED_LIBRARY) target, however it requires .so file to be already present on disk # Also I cannot just launch AndroidBuild.sh from makefile because other libraries are not rebuilt and linking will fail +.PHONY: OVERRIDE_CUSTOM_LIB +OVERRIDE_CUSTOM_LIB: LOCAL_PATH_SDL_APPLICATION := $(LOCAL_PATH) -.NOTPARALLEL: $(abspath $(LOCAL_PATH)/../../obj/local/armeabi/libapplication.so) $(LOCAL_PATH)/src/libapplication.so +ifeq ($(TARGET_ARCH_ABI),armeabi) +obj/local/armeabi/libapplication.so: $(LOCAL_PATH)/src/libapplication.so -# Enforce rebuilding -$(shell rm -f $(LOCAL_PATH)/src/libapplication.so) -$(shell mkdir -p $(LOCAL_PATH)/../../obj/local/armeabi) -$(shell touch $(LOCAL_PATH)/../../obj/local/armeabi/libapplication.so) +$(LOCAL_PATH)/src/libapplication.so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB + cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh armeabi +endif -$(LOCAL_PATH)/src/libapplication.so: $(LOCAL_PATH)/src/AndroidBuild.sh $(LOCAL_PATH)/src/AndroidAppSettings.cfg $(APP_LIB_DEPENDS) - echo Launching script $(LOCAL_PATH_SDL_APPLICATION)/AndroidBuild.sh - cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh +ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) +obj/local/armeabi-v7a/libapplication.so: $(LOCAL_PATH)/src/libapplication-armeabi-v7a.so -$(abspath $(LOCAL_PATH)/../../obj/local/armeabi/libapplication.so): $(LOCAL_PATH)/src/libapplication.so OVERRIDE_CUSTOM_LIB - cp -f $< $@ - -obj/local/armeabi/libapplication.so: $(LOCAL_PATH)/src/libapplication.so OVERRIDE_CUSTOM_LIB - cp -f $< $@ - -.PHONY: OVERRIDE_CUSTOM_LIB - -OVERRIDE_CUSTOM_LIB: +$(LOCAL_PATH)/src/libapplication-armeabi-v7a.so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB + cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh armeabi-v7a +endif endif diff --git a/project/jni/application/commandergenius/commandergenius b/project/jni/application/commandergenius/commandergenius index 023025901..d1b8a7ae0 160000 --- a/project/jni/application/commandergenius/commandergenius +++ b/project/jni/application/commandergenius/commandergenius @@ -1 +1 @@ -Subproject commit 023025901a1d96a46d826791bf9cf264ddf5c9ee +Subproject commit d1b8a7ae03b1a0960722abbab38bbb8fca98e7cd diff --git a/project/jni/application/openarena/AndroidAppSettings.cfg b/project/jni/application/openarena/AndroidAppSettings.cfg index a641d6ed7..0c019c6ca 100644 --- a/project/jni/application/openarena/AndroidAppSettings.cfg +++ b/project/jni/application/openarena/AndroidAppSettings.cfg @@ -5,7 +5,7 @@ AppName="OpenArena" AppFullName=ws.openarena.sdl ScreenOrientation=h InhibitSuspend=n -AppDataDownloadUrl="Game data|http://sourceforge.net/projects/libsdl-android/files/OpenArena/oa-0.8.8-1.zip/download" +AppDataDownloadUrl="!Game data|http://sourceforge.net/projects/libsdl-android/files/OpenArena/oa-0.8.8-1.zip/download^!Game logic|:baseoa/pak7-android.pk3:vm.zip" VideoDepthBpp=24 NeedDepthBuffer=y NeedStencilBuffer=y @@ -33,7 +33,7 @@ RedefinedKeysScreenKb="0 1 2 3 4 5 6 7 8 9" StartupMenuButtonTimeout=3000 HiddenMenuOptions='OptionalDownloadConfig DisplaySizeConfig' FirstStartMenuOptions='' -MultiABI=n +MultiABI=y AppVersionCode=08803 AppVersionName="0.8.8.03" ResetSdlConfigForThisVersion=n diff --git a/project/jni/application/openarena/AndroidBuild.sh b/project/jni/application/openarena/AndroidBuild.sh index c379e6401..a068628c1 100755 --- a/project/jni/application/openarena/AndroidBuild.sh +++ b/project/jni/application/openarena/AndroidBuild.sh @@ -3,8 +3,17 @@ LOCAL_PATH=`dirname $0` LOCAL_PATH=`cd $LOCAL_PATH && pwd` -../setEnvironment.sh make -j8 -C engine release \ -PLATFORM=android ARCH=arm USE_GLES=1 USE_LOCAL_HEADERS=0 \ +../setEnvironment-$1.sh make -j8 -C engine release \ +PLATFORM=android ARCH=$1 USE_GLES=1 USE_LOCAL_HEADERS=0 \ USE_OPENAL=0 USE_CURL=1 USE_CURL_DLOPEN=0 USE_CODEC_VORBIS=1 USE_MUMBLE=0 USE_FREETYPE=1 \ -USE_RENDERER_DLOPEN=0 USE_INTERNAL_ZLIB=0 USE_INTERNAL_JPEG=1 && -mv -f engine/build/release-android-arm/openarena.arm libapplication.so +USE_RENDERER_DLOPEN=0 USE_INTERNAL_ZLIB=0 USE_INTERNAL_JPEG=1 && \ +echo "Copying engine/build/release-android-$1/openarena.$1 -> libapplication-$1.so" && \ +cp -f engine/build/release-android-$1/openarena.$1 libapplication-$1.so + +[ "$1" = "armeabi" ] && ( +[ -e libapplication.so ] || ln -s libapplication-armeabi.so libapplication.so +make -j8 -C vm +cd vm/build/release-*/baseq3 +zip -r vm.zip vm +cmp -s vm.zip ../../../../AndroidData/vm.zip || mv -f vm.zip ../../../../AndroidData/vm.zip +) diff --git a/project/jni/application/openarena/AndroidData/data.zip b/project/jni/application/openarena/AndroidData/data.zip deleted file mode 100644 index cc5b51fe5..000000000 Binary files a/project/jni/application/openarena/AndroidData/data.zip and /dev/null differ diff --git a/project/jni/application/openarena/AndroidData/vm.zip b/project/jni/application/openarena/AndroidData/vm.zip new file mode 100644 index 000000000..dba64ab65 Binary files /dev/null and b/project/jni/application/openarena/AndroidData/vm.zip differ diff --git a/project/jni/application/openarena/vm b/project/jni/application/openarena/vm new file mode 160000 index 000000000..deb8e3381 --- /dev/null +++ b/project/jni/application/openarena/vm @@ -0,0 +1 @@ +Subproject commit deb8e338176d4b8f28712c1d231469f304fa6603 diff --git a/project/jni/application/setEnvironment-armeabi-v7a.sh b/project/jni/application/setEnvironment-armeabi-v7a.sh index 50ecea706..3effe667c 100755 --- a/project/jni/application/setEnvironment-armeabi-v7a.sh +++ b/project/jni/application/setEnvironment-armeabi-v7a.sh @@ -20,10 +20,11 @@ NDK=`readlink -f $NDK` #echo NDK $NDK GCCPREFIX=arm-linux-androideabi -GCCVER=4.4.3 +GCCVER=4.6 PLATFORMVER=android-8 LOCAL_PATH=`dirname $0` LOCAL_PATH=`cd $LOCAL_PATH && pwd` +ARCH=armeabi-v7a #echo LOCAL_PATH $LOCAL_PATH APP_MODULES=`grep 'APP_MODULES [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@'` @@ -42,24 +43,14 @@ done MISSING_INCLUDE= MISSING_LIB= -#if [ -n "$CRYSTAX_WCHAR" ]; then -# MISSING_INCLUDE="$MISSING_INCLUDE -isystem$NDK/sources/crystax/include" -# MISSING_LIB="$MISSING_LIB $NDK/sources/crystax/libs/armeabi/libcrystax_static.a" -#fi -#if [ -n "$MISSING_LIBCXX_PATH" ]; then -# MISSING_INCLUDE="$MISSING_INCLUDE -isystem$NDK/sources/cxx-stl/gnu-libstdc++/include" -# MISSING_LIB="$MISSING_LIB -lgnustl_static -lsupc++" -#fi - - CFLAGS="\ --MMD -MP -MF -fpic -ffunction-sections -funwind-tables -fstack-protector \ --D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ --Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \ +-fpic -ffunction-sections -funwind-tables \ +-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi \ +-march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \ -DANDROID -Wa,--noexecstack -g -O2 -DNDEBUG -g \ -isystem$NDK/platforms/$PLATFORMVER/arch-arm/usr/include \ --isystem$NDK/sources/cxx-stl/gnu-libstdc++/include \ --isystem$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \ -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" @@ -75,17 +66,17 @@ fi LDFLAGS="\ $SHARED \ --sysroot=$NDK/platforms/$PLATFORMVER/arch-arm \ -`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/armeabi-v7a/lib\1.so@g\"` \ +`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/$ARCH/lib\1.so@g\"` \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libc.so \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libm.so \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libGLESv1_CM.so \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libdl.so \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/liblog.so \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libz.so \ --L$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a \ +-L$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH \ -lgnustl_static \ -L$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib \ --L$LOCAL_PATH/../../obj/local/armeabi-v7a \ +-L$LOCAL_PATH/../../obj/local/$ARCH \ -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack \ -Wl,-rpath-link=$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib -lsupc++ \ $MISSING_LIB $LDFLAGS" diff --git a/project/jni/application/setEnvironment-armeabi.sh b/project/jni/application/setEnvironment-armeabi.sh new file mode 120000 index 000000000..31b2ec917 --- /dev/null +++ b/project/jni/application/setEnvironment-armeabi.sh @@ -0,0 +1 @@ +setEnvironment.sh \ No newline at end of file