From 7303d1b4d9cc7a1d261bfc4d5abe2129f52ab67e Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Mon, 25 Nov 2013 20:04:46 +0200 Subject: [PATCH 1/7] Support for x86 and MIPS architectures, ffmpeg and Boost are disabled when compiling for them. --- project/jni/android/Android.mk | 11 -- project/jni/application/Android.mk | 64 ++--------- .../ballfield/AndroidAppSettings.cfg | 2 +- project/jni/application/setEnvironment-r4b.sh | 78 ------------- project/jni/application/setEnvironment-r5b.sh | 107 ------------------ project/jni/boost/Android.mk | 4 + project/jni/ffmpeg/Android.mk | 8 +- project/jni/python/Android.mk | 18 +-- 8 files changed, 25 insertions(+), 267 deletions(-) delete mode 100755 project/jni/application/setEnvironment-r4b.sh delete mode 100755 project/jni/application/setEnvironment-r5b.sh diff --git a/project/jni/android/Android.mk b/project/jni/android/Android.mk index f7e170f0e..e59ca6a40 100644 --- a/project/jni/android/Android.mk +++ b/project/jni/android/Android.mk @@ -4,16 +4,5 @@ include $(CLEAR_VARS) LOCAL_MODULE := android -ifneq ($(NDK_R5_TOOLCHAIN),) LOCAL_SRC_FILES := lib$(LOCAL_MODULE).so include $(PREBUILT_SHARED_LIBRARY) -else -LOCAL_SRC_FILES := dummy.c -include $(BUILD_SHARED_LIBRARY) -$(abspath $(LOCAL_PATH)/../../obj/local/armeabi/lib$(LOCAL_MODULE).a): $(LOCAL_PATH)/lib$(LOCAL_MODULE).a OVERRIDE_CUSTOM_LIB - cp -f $< $@ -$(abspath $(LOCAL_PATH)/../../obj/local/armeabi-v7a/lib$(LOCAL_MODULE).a): $(LOCAL_PATH)/lib$(LOCAL_MODULE).a OVERRIDE_CUSTOM_LIB - cp -f $< $@ -.PHONY: OVERRIDE_CUSTOM_LIB -OVERRIDE_CUSTOM_LIB: -endif diff --git a/project/jni/application/Android.mk b/project/jni/application/Android.mk index 6681350d2..7a6e7ab5b 100644 --- a/project/jni/application/Android.mk +++ b/project/jni/application/Android.mk @@ -50,53 +50,14 @@ LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBR APP_STL := gnustl_static -#LOCAL_STATIC_LIBRARIES += gnustl_static - LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lz # -lgnustl_static -LOCAL_LDFLAGS := -Lobj/local/armeabi +LOCAL_LDFLAGS := -Lobj/local/$(TARGET_ARCH_ABI) + LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS) -#ifneq ($NDK_R8B_TOOLCHAIN,) # They've changed the path, yet again -#LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/include $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/include -#LOCAL_LDLIBS += -L$(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI) -lgnustl_static -#else -ifneq ($(NDK_R7_TOOLCHAIN)$(CRYSTAX_R7_TOOLCHAIN),) # NDK r7 broke it even more -#LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include -#LOCAL_LDLIBS += -L$(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_ARCH_ABI) -lgnustl_static -# You can have multiple C++ file extensions starting from NDK r7 LOCAL_CPP_EXTENSION := .cpp .cxx .cc -else -ifneq ($(NDK_R6_TOOLCHAIN),) # NDK r6 broke it -LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include -LOCAL_LDLIBS += -L$(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_ARCH_ABI) -lstdc++ -endif -endif -#endif - -#LIBS_WITH_LONG_SYMBOLS := $(strip $(shell \ -# for f in $(LOCAL_PATH)/../../obj/local/armeabi/*.so ; do \ -# if echo $$f | grep "libapplication[.]so" > /dev/null ; then \ -# continue ; \ -# fi ; \ -# if [ -e "$$f" ] ; then \ -# if nm -g $$f | cut -c 12- | egrep '.{128}' > /dev/null ; then \ -# echo $$f | grep -o 'lib[^/]*[.]so' ; \ -# fi ; \ -# fi ; \ -# done \ -#) ) -# -#ifneq "$(LIBS_WITH_LONG_SYMBOLS)" "" -#$(foreach F, $(LIBS_WITH_LONG_SYMBOLS), \ -#$(info Library $(F): abusing symbol names are: \ -#$(shell nm -g $(LOCAL_PATH)/../../obj/local/armeabi/$(F) | cut -c 12- | egrep '.{128}' ) ) \ -#$(info Library $(F) contains symbol names longer than 128 bytes, \ -#YOUR CODE WILL DEADLOCK WITHOUT ANY WARNING when you'll access such function - \ -#please make this library static to avoid problems. ) ) -#$(error Detected libraries with too long symbol names. Remove all files under project/obj/local/armeabi, make these libs static, and recompile) -#endif 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) @@ -114,18 +75,15 @@ OVERRIDE_CUSTOM_LIB: LOCAL_PATH_SDL_APPLICATION := $(LOCAL_PATH) +obj/local/$(TARGET_ARCH_ABI)/libapplication.so: $(LOCAL_PATH)/src/libapplication-$(TARGET_ARCH_ABI).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) + +# Old code has ARMv5 library compiled as libapplication.so ifeq ($(TARGET_ARCH_ABI),armeabi) -obj/local/armeabi/libapplication.so: $(LOCAL_PATH)/src/libapplication.so - -$(LOCAL_PATH)/src/libapplication.so: $(SDL_APP_LIB_DEPENDS) OVERRIDE_CUSTOM_LIB - cd $(LOCAL_PATH_SDL_APPLICATION)/src && ./AndroidBuild.sh 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 -ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) -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 -endif - -endif +endif # $(APPLICATION_CUSTOM_BUILD_SCRIPT) diff --git a/project/jni/application/ballfield/AndroidAppSettings.cfg b/project/jni/application/ballfield/AndroidAppSettings.cfg index f18ad0e81..96691bae5 100644 --- a/project/jni/application/ballfield/AndroidAppSettings.cfg +++ b/project/jni/application/ballfield/AndroidAppSettings.cfg @@ -166,7 +166,7 @@ FirstStartMenuOptions='' # Enable multi-ABI binary, with hardware FPU support - it will also work on old devices, # but .apk size is 2x bigger (y) / (n) / (x86) / (all) -MultiABI=y +MultiABI=all # Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower AppMinimumRAM=0 diff --git a/project/jni/application/setEnvironment-r4b.sh b/project/jni/application/setEnvironment-r4b.sh deleted file mode 100755 index 0bd509ab6..000000000 --- a/project/jni/application/setEnvironment-r4b.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/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` - -GCCVER=4.4.0 -PLATFORMVER=android-8 -LOCAL_PATH=`dirname $0` -LOCAL_PATH=`cd $LOCAL_PATH && pwd` -STL_INCLUDE="-I$LOCAL_PATH/../stlport/stlport -fno-exceptions -fno-rtti" -STL_LIB="$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/lib/libstdc++.so $LOCAL_PATH/../../obj/local/armeabi/libstlport.a" -if [ -n "`echo $NDK | grep '[-]crystax'`" ] ; then - STL_INCLUDE="-fexceptions -frtti" - STL_LIB="-lstdc++" -fi - -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 -) - -CFLAGS="-I$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/include \ --fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums \ --D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID \ --Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -O2 \ --fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \ --Wa,--noexecstack -DNDEBUG -g \ --I$LOCAL_PATH/../sdl-1.2/include $STL_INCLUDE \ -`echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-I$LOCAL_PATH/../\1/include@g\"`" - -LDFLAGS="-nostdlib -Wl,-soname,libapplication.so -Wl,-shared,-Bsymbolic \ --Wl,--whole-archive -Wl,--no-whole-archive \ -$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/lib/gcc/arm-eabi/4.4.0/libgcc.a \ -`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/armeabi/lib\1.so@g\"` \ -$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/lib/libc.so \ -$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/lib/libm.so \ --Wl,--no-undefined -Wl,-z,noexecstack \ --L$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/lib \ --lGLESv1_CM -ldl -llog -lz \ --Wl,-rpath-link=$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/lib \ --L$LOCAL_PATH/../../obj/local/armeabi $STL_LIB" - -env PATH=$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin:$LOCAL_PATH:$PATH \ -CFLAGS="$CFLAGS" \ -CXXFLAGS="$CFLAGS" \ -LDFLAGS="$LDFLAGS" \ -CC="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-gcc" \ -CXX="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-g++" \ -RANLIB="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-ranlib" \ -LD="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-gcc" \ -AR="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-ar" \ -CPP="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-cpp $CFLAGS" \ -NM="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-nm" \ -AS="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-as" \ -STRIP="$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin/arm-eabi-strip" \ -"$@" diff --git a/project/jni/application/setEnvironment-r5b.sh b/project/jni/application/setEnvironment-r5b.sh deleted file mode 100755 index be0fe6ded..000000000 --- a/project/jni/application/setEnvironment-r5b.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/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` - -#echo NDK $NDK -GCCPREFIX=arm-linux-androideabi -GCCVER=4.4.3 -PLATFORMVER=android-8 -LOCAL_PATH=`dirname $0` -LOCAL_PATH=`cd $LOCAL_PATH && pwd` -#echo LOCAL_PATH $LOCAL_PATH - -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= - -#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="\ --fpic -ffunction-sections -funwind-tables -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi \ --march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \ --isystem$NDK/platforms/$PLATFORMVER/arch-arm/usr/include -Wa,--noexecstack \ --DANDROID \ --DNDEBUG -O2 -g \ --isystem$NDK/sources/cxx-stl/gnu-libstdc++/include \ --isystem$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/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" - -SHARED="-shared -Wl,-soname,libapplication.so" -if [ -n "$BUILD_EXECUTABLE" ]; then - SHARED= -fi -if [ -n "$NO_SHARED_LIBS" ]; then - APP_SHARED_LIBS= -fi - - -LDFLAGS="\ -$SHARED \ ---sysroot=$NDK/platforms/$PLATFORMVER/arch-arm \ -`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/armeabi/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 \ --lgnustl_static \ --L$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib \ --L$LOCAL_PATH/../../obj/local/armeabi -Wl,--no-undefined -Wl,-z,noexecstack \ --Wl,-rpath-link=$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib -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" \ -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/boost/Android.mk b/project/jni/boost/Android.mk index 35122b1d4..7c19292ee 100644 --- a/project/jni/boost/Android.mk +++ b/project/jni/boost/Android.mk @@ -2,6 +2,8 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) +ifeq ($(TARGET_ARCH),arm) + LOCAL_MODULE := $(notdir $(LOCAL_PATH)) ifneq ($(LOCAL_MODULE),boost) @@ -11,3 +13,5 @@ LOCAL_SRC_FILES := lib/arm-linux-androideabi-4.6/lib$(LOCAL_MODULE).a include $(PREBUILT_STATIC_LIBRARY) endif + +endif # $(TARGET_ARCH),arm diff --git a/project/jni/ffmpeg/Android.mk b/project/jni/ffmpeg/Android.mk index 04eb86dd5..6edbf6389 100644 --- a/project/jni/ffmpeg/Android.mk +++ b/project/jni/ffmpeg/Android.mk @@ -5,6 +5,8 @@ LOCAL_PATH:=$(call my-dir) #FFMPEG_REBUILD_FROM_SOURCE:=yes +ifeq ($(TARGET_ARCH),arm) + ifneq ($(FFMPEG_REBUILD_FROM_SOURCE),yes) # FFMPEG compilation is hacky and buggy, so we're using prebuilt libraries by default @@ -626,5 +628,7 @@ ifeq ($(CONFIG_FFSERVER),yes) endif #======================================================================== endif #CONFIG_FFMPEG_COMPILE_TOOLS -endif -endif + +endif # notdir $(LOCAL_PATH)),ffmpeg +endif # FFMPEG_REBUILD_FROM_SOURCE),yes +endif # $(TARGET_ARCH),arm diff --git a/project/jni/python/Android.mk b/project/jni/python/Android.mk index ec6540b13..4cb6abd22 100644 --- a/project/jni/python/Android.mk +++ b/project/jni/python/Android.mk @@ -2,6 +2,8 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) +ifeq ($(TARGET_ARCH),arm) + LOCAL_MODULE := python LOCAL_C_INCLUDES := $(LOCAL_PATH)/include @@ -12,21 +14,7 @@ LOCAL_SHARED_LIBRARIES := LOCAL_LDLIBS := -ifneq ($(NDK_R5_TOOLCHAIN),) - LOCAL_SRC_FILES := libpython.so include $(PREBUILT_SHARED_LIBRARY) -else -LOCAL_SRC_FILES := dummy.c - -include $(BUILD_SHARED_LIBRARY) -$(realpath $(LOCAL_PATH)/../../obj/local/armeabi/libpython.so): $(LOCAL_PATH)/libpython.so OVERRIDE_CUSTOM_LIB - cp -f $< $@ - -$(realpath $(LOCAL_PATH)/../../obj/local/armeabi-v7a/libpython.so): $(LOCAL_PATH)/libpython.so OVERRIDE_CUSTOM_LIB - cp -f $< $@ - -.PHONY: OVERRIDE_CUSTOM_LIB -OVERRIDE_CUSTOM_LIB: -endif +endif # $(TARGET_ARCH),arm From aa83519892714348d7162902f6728345631bc793 Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Mon, 25 Nov 2013 20:19:44 +0200 Subject: [PATCH 2/7] One more videomode for SDL --- project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c index 77d84bad2..05d11a0ed 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c @@ -116,7 +116,7 @@ int ANDROID_ToggleFullScreen(_THIS, int fullscreen) return 1; } -enum { SDL_NUMMODES = 56 }; +enum { SDL_NUMMODES = 57 }; static SDL_Rect *SDL_modelist[SDL_NUMMODES+1]; //#define SDL_modelist (this->hidden->SDL_modelist) @@ -324,7 +324,8 @@ int ANDROID_VideoInit(_THIS, SDL_PixelFormat *vformat) SDL_modelist[53]->w = 768; SDL_modelist[53]->h = 262; // For UAE4ALL2 SDL_modelist[54]->w = 768; SDL_modelist[54]->h = 270; // For UAE4ALL2 SDL_modelist[55]->w = 1280; SDL_modelist[55]->h = 960; // For UQM-HD - SDL_modelist[56] = NULL; + SDL_modelist[56]->w = 960; SDL_modelist[56]->h = 600; // For ScummVM 3x-mode + SDL_modelist[57] = NULL; // If you going to add another video mode, increase SDL_NUMMODES constant SDL_VideoInit_1_3(NULL, 0); From 0017de045f43f7efebfce97718e7a28d0b527b72 Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Tue, 26 Nov 2013 20:46:06 +0200 Subject: [PATCH 3/7] Guichan library and few examples, by Lubomyr --- .../guichan-widgets/AndroidAppSettings.cfg | 233 +++ .../guichan-widgets/AndroidData/files.zip | Bin 0 -> 53273 bytes .../jni/application/guichan-widgets/gui.xml | 23 + .../jni/application/guichan-widgets/icon.png | Bin 0 -> 2130 bytes .../jni/application/guichan-widgets/sdl.hpp | 120 ++ .../guichan-widgets/sdlwidgets.cpp | 58 + .../application/guichan-widgets/widgets.hpp | 182 +++ .../guichan-xml/AndroidAppSettings.cfg | 226 +++ .../guichan-xml/AndroidData/files.zip | Bin 0 -> 53273 bytes project/jni/application/guichan-xml/gui.xml | 23 + project/jni/application/guichan-xml/icon.png | Bin 0 -> 2130 bytes .../application/guichan-xml/sdlguiexample.cpp | 208 +++ .../jni/application/guichan-xml/tinyxml.cpp | 796 +++++++++++ project/jni/application/guichan-xml/tinyxml.h | 613 ++++++++ .../application/guichan-xml/tinyxmlerror.cpp | 24 + .../application/guichan-xml/tinyxmlparser.cpp | 535 +++++++ .../jni/application/guichan-xml/xmlgui.cpp | 865 ++++++++++++ project/jni/application/guichan-xml/xmlgui.h | 155 ++ project/jni/guichan/AUTHORS | 2 + project/jni/guichan/Android.mk | 25 + project/jni/guichan/COPYING | 35 + project/jni/guichan/ChangeLog | 211 +++ project/jni/guichan/NEWS | 58 + project/jni/guichan/README | 58 + project/jni/guichan/include/config.hpp | 75 + project/jni/guichan/include/config.hpp.in | 74 + project/jni/guichan/include/guichan.hpp | 111 ++ .../guichan/include/guichan/actionevent.hpp | 114 ++ .../include/guichan/actionlistener.hpp | 93 ++ .../jni/guichan/include/guichan/allegro.hpp | 63 + .../include/guichan/basiccontainer.hpp | 180 +++ .../guichan/include/guichan/cliprectangle.hpp | 109 ++ project/jni/guichan/include/guichan/color.hpp | 173 +++ .../guichan/include/guichan/deathlistener.hpp | 90 ++ .../guichan/include/guichan/defaultfont.hpp | 95 ++ project/jni/guichan/include/guichan/event.hpp | 94 ++ .../jni/guichan/include/guichan/exception.hpp | 177 +++ .../guichan/include/guichan/focushandler.hpp | 398 ++++++ .../guichan/include/guichan/focuslistener.hpp | 95 ++ project/jni/guichan/include/guichan/font.hpp | 111 ++ .../guichan/include/guichan/genericinput.hpp | 163 +++ project/jni/guichan/include/guichan/glut.hpp | 59 + .../jni/guichan/include/guichan/graphics.hpp | 291 ++++ project/jni/guichan/include/guichan/gui.hpp | 504 +++++++ project/jni/guichan/include/guichan/hge.hpp | 53 + project/jni/guichan/include/guichan/image.hpp | 190 +++ .../jni/guichan/include/guichan/imagefont.hpp | 257 ++++ .../guichan/include/guichan/imageloader.hpp | 98 ++ project/jni/guichan/include/guichan/input.hpp | 115 ++ .../guichan/include/guichan/inputevent.hpp | 159 +++ project/jni/guichan/include/guichan/key.hpp | 182 +++ .../jni/guichan/include/guichan/keyevent.hpp | 138 ++ .../jni/guichan/include/guichan/keyinput.hpp | 263 ++++ .../guichan/include/guichan/keylistener.hpp | 95 ++ .../jni/guichan/include/guichan/listmodel.hpp | 86 ++ .../guichan/include/guichan/mouseevent.hpp | 200 +++ .../guichan/include/guichan/mouseinput.hpp | 235 ++++ .../guichan/include/guichan/mouselistener.hpp | 183 +++ .../jni/guichan/include/guichan/opengl.hpp | 60 + .../jni/guichan/include/guichan/openlayer.hpp | 64 + .../jni/guichan/include/guichan/platform.hpp | 79 ++ .../jni/guichan/include/guichan/rectangle.hpp | 140 ++ project/jni/guichan/include/guichan/sdl.hpp | 62 + .../include/guichan/sdl/sdlgraphics.hpp | 156 +++ .../guichan/include/guichan/sdl/sdlimage.hpp | 107 ++ .../include/guichan/sdl/sdlimageloader.hpp | 73 + .../guichan/include/guichan/sdl/sdlinput.hpp | 125 ++ .../guichan/include/guichan/sdl/sdlpixel.hpp | 260 ++++ .../include/guichan/selectionevent.hpp | 78 ++ .../include/guichan/selectionlistener.hpp | 95 ++ .../jni/guichan/include/guichan/widget.hpp | 1194 ++++++++++++++++ .../include/guichan/widgetlistener.hpp | 118 ++ .../include/guichan/widgets/button.hpp | 214 +++ .../include/guichan/widgets/checkbox.hpp | 173 +++ .../include/guichan/widgets/container.hpp | 162 +++ .../include/guichan/widgets/dropdown.hpp | 318 +++++ .../guichan/include/guichan/widgets/icon.hpp | 118 ++ .../include/guichan/widgets/imagebutton.hpp | 123 ++ .../guichan/include/guichan/widgets/label.hpp | 133 ++ .../include/guichan/widgets/listbox.hpp | 253 ++++ .../include/guichan/widgets/radiobutton.hpp | 211 +++ .../include/guichan/widgets/scrollarea.hpp | 590 ++++++++ .../include/guichan/widgets/slider.hpp | 300 ++++ .../guichan/include/guichan/widgets/tab.hpp | 151 ++ .../include/guichan/widgets/tabbedarea.hpp | 280 ++++ .../include/guichan/widgets/textbox.hpp | 289 ++++ .../include/guichan/widgets/textfield.hpp | 177 +++ .../include/guichan/widgets/window.hpp | 255 ++++ project/jni/guichan/src/actionevent.cpp | 69 + project/jni/guichan/src/basiccontainer.cpp | 390 ++++++ project/jni/guichan/src/cliprectangle.cpp | 76 + project/jni/guichan/src/color.cpp | 143 ++ project/jni/guichan/src/defaultfont.cpp | 94 ++ project/jni/guichan/src/event.cpp | 68 + project/jni/guichan/src/exception.cpp | 101 ++ project/jni/guichan/src/focushandler.cpp | 587 ++++++++ project/jni/guichan/src/font.cpp | 71 + project/jni/guichan/src/genericinput.cpp | 165 +++ project/jni/guichan/src/graphics.cpp | 187 +++ project/jni/guichan/src/gui.cpp | 995 +++++++++++++ project/jni/guichan/src/guichan.cpp | 54 + project/jni/guichan/src/image.cpp | 85 ++ project/jni/guichan/src/imagefont.cpp | 375 +++++ project/jni/guichan/src/inputevent.cpp | 96 ++ project/jni/guichan/src/key.cpp | 91 ++ project/jni/guichan/src/keyevent.cpp | 91 ++ project/jni/guichan/src/keyinput.cpp | 134 ++ project/jni/guichan/src/mouseevent.cpp | 100 ++ project/jni/guichan/src/mouseinput.cpp | 114 ++ project/jni/guichan/src/rectangle.cpp | 133 ++ project/jni/guichan/src/sdl/sdl.cpp | 53 + project/jni/guichan/src/sdl/sdlgraphics.cpp | 694 +++++++++ project/jni/guichan/src/sdl/sdlimage.cpp | 185 +++ .../jni/guichan/src/sdl/sdlimageloader.cpp | 122 ++ project/jni/guichan/src/sdl/sdlinput.cpp | 441 ++++++ project/jni/guichan/src/selectionevent.cpp | 63 + project/jni/guichan/src/widget.cpp | 735 ++++++++++ project/jni/guichan/src/widgets/button.cpp | 284 ++++ project/jni/guichan/src/widgets/checkbox.cpp | 189 +++ project/jni/guichan/src/widgets/container.cpp | 112 ++ project/jni/guichan/src/widgets/dropdown.cpp | 635 +++++++++ project/jni/guichan/src/widgets/icon.cpp | 116 ++ .../jni/guichan/src/widgets/imagebutton.cpp | 166 +++ project/jni/guichan/src/widgets/label.cpp | 120 ++ project/jni/guichan/src/widgets/listbox.cpp | 350 +++++ .../jni/guichan/src/widgets/radiobutton.cpp | 298 ++++ .../jni/guichan/src/widgets/scrollarea.cpp | 1246 +++++++++++++++++ project/jni/guichan/src/widgets/slider.cpp | 369 +++++ project/jni/guichan/src/widgets/tab.cpp | 181 +++ .../jni/guichan/src/widgets/tabbedarea.cpp | 482 +++++++ project/jni/guichan/src/widgets/textbox.cpp | 517 +++++++ project/jni/guichan/src/widgets/textfield.cpp | 280 ++++ project/jni/guichan/src/widgets/window.cpp | 308 ++++ 133 files changed, 28296 insertions(+) create mode 100644 project/jni/application/guichan-widgets/AndroidAppSettings.cfg create mode 100644 project/jni/application/guichan-widgets/AndroidData/files.zip create mode 100644 project/jni/application/guichan-widgets/gui.xml create mode 100644 project/jni/application/guichan-widgets/icon.png create mode 100644 project/jni/application/guichan-widgets/sdl.hpp create mode 100644 project/jni/application/guichan-widgets/sdlwidgets.cpp create mode 100644 project/jni/application/guichan-widgets/widgets.hpp create mode 100644 project/jni/application/guichan-xml/AndroidAppSettings.cfg create mode 100644 project/jni/application/guichan-xml/AndroidData/files.zip create mode 100644 project/jni/application/guichan-xml/gui.xml create mode 100644 project/jni/application/guichan-xml/icon.png create mode 100644 project/jni/application/guichan-xml/sdlguiexample.cpp create mode 100644 project/jni/application/guichan-xml/tinyxml.cpp create mode 100644 project/jni/application/guichan-xml/tinyxml.h create mode 100644 project/jni/application/guichan-xml/tinyxmlerror.cpp create mode 100644 project/jni/application/guichan-xml/tinyxmlparser.cpp create mode 100644 project/jni/application/guichan-xml/xmlgui.cpp create mode 100644 project/jni/application/guichan-xml/xmlgui.h create mode 100644 project/jni/guichan/AUTHORS create mode 100644 project/jni/guichan/Android.mk create mode 100644 project/jni/guichan/COPYING create mode 100644 project/jni/guichan/ChangeLog create mode 100644 project/jni/guichan/NEWS create mode 100644 project/jni/guichan/README create mode 100644 project/jni/guichan/include/config.hpp create mode 100644 project/jni/guichan/include/config.hpp.in create mode 100644 project/jni/guichan/include/guichan.hpp create mode 100644 project/jni/guichan/include/guichan/actionevent.hpp create mode 100644 project/jni/guichan/include/guichan/actionlistener.hpp create mode 100644 project/jni/guichan/include/guichan/allegro.hpp create mode 100644 project/jni/guichan/include/guichan/basiccontainer.hpp create mode 100644 project/jni/guichan/include/guichan/cliprectangle.hpp create mode 100644 project/jni/guichan/include/guichan/color.hpp create mode 100644 project/jni/guichan/include/guichan/deathlistener.hpp create mode 100644 project/jni/guichan/include/guichan/defaultfont.hpp create mode 100644 project/jni/guichan/include/guichan/event.hpp create mode 100644 project/jni/guichan/include/guichan/exception.hpp create mode 100644 project/jni/guichan/include/guichan/focushandler.hpp create mode 100644 project/jni/guichan/include/guichan/focuslistener.hpp create mode 100644 project/jni/guichan/include/guichan/font.hpp create mode 100644 project/jni/guichan/include/guichan/genericinput.hpp create mode 100644 project/jni/guichan/include/guichan/glut.hpp create mode 100644 project/jni/guichan/include/guichan/graphics.hpp create mode 100644 project/jni/guichan/include/guichan/gui.hpp create mode 100644 project/jni/guichan/include/guichan/hge.hpp create mode 100644 project/jni/guichan/include/guichan/image.hpp create mode 100644 project/jni/guichan/include/guichan/imagefont.hpp create mode 100644 project/jni/guichan/include/guichan/imageloader.hpp create mode 100644 project/jni/guichan/include/guichan/input.hpp create mode 100644 project/jni/guichan/include/guichan/inputevent.hpp create mode 100644 project/jni/guichan/include/guichan/key.hpp create mode 100644 project/jni/guichan/include/guichan/keyevent.hpp create mode 100644 project/jni/guichan/include/guichan/keyinput.hpp create mode 100644 project/jni/guichan/include/guichan/keylistener.hpp create mode 100644 project/jni/guichan/include/guichan/listmodel.hpp create mode 100644 project/jni/guichan/include/guichan/mouseevent.hpp create mode 100644 project/jni/guichan/include/guichan/mouseinput.hpp create mode 100644 project/jni/guichan/include/guichan/mouselistener.hpp create mode 100644 project/jni/guichan/include/guichan/opengl.hpp create mode 100644 project/jni/guichan/include/guichan/openlayer.hpp create mode 100644 project/jni/guichan/include/guichan/platform.hpp create mode 100644 project/jni/guichan/include/guichan/rectangle.hpp create mode 100644 project/jni/guichan/include/guichan/sdl.hpp create mode 100644 project/jni/guichan/include/guichan/sdl/sdlgraphics.hpp create mode 100644 project/jni/guichan/include/guichan/sdl/sdlimage.hpp create mode 100644 project/jni/guichan/include/guichan/sdl/sdlimageloader.hpp create mode 100644 project/jni/guichan/include/guichan/sdl/sdlinput.hpp create mode 100644 project/jni/guichan/include/guichan/sdl/sdlpixel.hpp create mode 100644 project/jni/guichan/include/guichan/selectionevent.hpp create mode 100644 project/jni/guichan/include/guichan/selectionlistener.hpp create mode 100644 project/jni/guichan/include/guichan/widget.hpp create mode 100644 project/jni/guichan/include/guichan/widgetlistener.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/button.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/checkbox.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/container.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/dropdown.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/icon.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/imagebutton.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/label.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/listbox.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/radiobutton.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/scrollarea.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/slider.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/tab.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/tabbedarea.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/textbox.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/textfield.hpp create mode 100644 project/jni/guichan/include/guichan/widgets/window.hpp create mode 100644 project/jni/guichan/src/actionevent.cpp create mode 100644 project/jni/guichan/src/basiccontainer.cpp create mode 100644 project/jni/guichan/src/cliprectangle.cpp create mode 100644 project/jni/guichan/src/color.cpp create mode 100644 project/jni/guichan/src/defaultfont.cpp create mode 100644 project/jni/guichan/src/event.cpp create mode 100644 project/jni/guichan/src/exception.cpp create mode 100644 project/jni/guichan/src/focushandler.cpp create mode 100644 project/jni/guichan/src/font.cpp create mode 100644 project/jni/guichan/src/genericinput.cpp create mode 100644 project/jni/guichan/src/graphics.cpp create mode 100644 project/jni/guichan/src/gui.cpp create mode 100644 project/jni/guichan/src/guichan.cpp create mode 100644 project/jni/guichan/src/image.cpp create mode 100644 project/jni/guichan/src/imagefont.cpp create mode 100644 project/jni/guichan/src/inputevent.cpp create mode 100644 project/jni/guichan/src/key.cpp create mode 100644 project/jni/guichan/src/keyevent.cpp create mode 100644 project/jni/guichan/src/keyinput.cpp create mode 100644 project/jni/guichan/src/mouseevent.cpp create mode 100644 project/jni/guichan/src/mouseinput.cpp create mode 100644 project/jni/guichan/src/rectangle.cpp create mode 100644 project/jni/guichan/src/sdl/sdl.cpp create mode 100644 project/jni/guichan/src/sdl/sdlgraphics.cpp create mode 100644 project/jni/guichan/src/sdl/sdlimage.cpp create mode 100644 project/jni/guichan/src/sdl/sdlimageloader.cpp create mode 100644 project/jni/guichan/src/sdl/sdlinput.cpp create mode 100644 project/jni/guichan/src/selectionevent.cpp create mode 100644 project/jni/guichan/src/widget.cpp create mode 100644 project/jni/guichan/src/widgets/button.cpp create mode 100644 project/jni/guichan/src/widgets/checkbox.cpp create mode 100644 project/jni/guichan/src/widgets/container.cpp create mode 100644 project/jni/guichan/src/widgets/dropdown.cpp create mode 100644 project/jni/guichan/src/widgets/icon.cpp create mode 100644 project/jni/guichan/src/widgets/imagebutton.cpp create mode 100644 project/jni/guichan/src/widgets/label.cpp create mode 100644 project/jni/guichan/src/widgets/listbox.cpp create mode 100644 project/jni/guichan/src/widgets/radiobutton.cpp create mode 100644 project/jni/guichan/src/widgets/scrollarea.cpp create mode 100644 project/jni/guichan/src/widgets/slider.cpp create mode 100644 project/jni/guichan/src/widgets/tab.cpp create mode 100644 project/jni/guichan/src/widgets/tabbedarea.cpp create mode 100644 project/jni/guichan/src/widgets/textbox.cpp create mode 100644 project/jni/guichan/src/widgets/textfield.cpp create mode 100644 project/jni/guichan/src/widgets/window.cpp diff --git a/project/jni/application/guichan-widgets/AndroidAppSettings.cfg b/project/jni/application/guichan-widgets/AndroidAppSettings.cfg new file mode 100644 index 000000000..d80c938de --- /dev/null +++ b/project/jni/application/guichan-widgets/AndroidAppSettings.cfg @@ -0,0 +1,233 @@ +# The application settings for Android libSDL port + +AppSettingVersion=19 + +# libSDL version to use (1.2 or 1.3, specify 1.3 for SDL2) +LibSdlVersion=1.2 + +# Specify application name (e.x. My Application) +AppName="GuiChan" + +# Specify reversed site name of application (e.x. com.mysite.myapp) +AppFullName=com.guichan.sdl + +# Specify screen orientation: (v)ertical/(p)ortrait or (h)orizontal/(l)andscape +ScreenOrientation=h + +# Do not allow device to sleep when the application is in foreground, set this for video players or apps which use accelerometer +InhibitSuspend=n + +# Specify path to download application data in zip archive in the form 'Description|URL|MirrorURL^Description2|URL2|MirrorURL2^...' +# If you'll start Description with '!' symbol it will be enabled by default, other downloads should be selected by user from startup config menu +# If the URL in in the form ':dir/file.dat:http://URL/' it will be downloaded as binary BLOB to the application dir and not unzipped +# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir - +# these files are put inside .apk package by build system +# Also please avoid 'https://' URLs, many Android devices do not have trust certificates and will fail to connect to SF.net over HTTPS +AppDataDownloadUrl="data file|files.zip" + +# Video color depth - 16 BPP is the fastest and supported for all modes, 24 bpp is supported only +# with SwVideoMode=y, SDL_OPENGL mode supports everything. (16)/(24)/(32) +VideoDepthBpp=16 + +# Enable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedDepthBuffer=n + +# Enable OpenGL stencil buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedStencilBuffer=n + +# Try to use GLES 2.x context - will revert to GLES 1.X if unsupported by device +# you need this option only if you're developing 3-d app (y) or (n) +NeedGles2=n + +# Application uses software video buffer - you're calling SDL_SetVideoMode() without SDL_HWSURFACE and without SDL_OPENGL, +# this will allow small speed optimization. Enable this even when you're using SDL_HWSURFACE. (y) or (n) +SwVideoMode=y + +# Application video output will be resized to fit into native device screen (y)/(n) +SdlVideoResize=y + +# Application resizing will keep 4:3 aspect ratio, with black bars at sides (y)/(n) +SdlVideoResizeKeepAspect=n + +# Application does not call SDL_Flip() or SDL_UpdateRects() appropriately, or draws from non-main thread - +# enabling the compatibility mode will force screen update every 100 milliseconds, which is laggy and inefficient (y) or (n) +CompatibilityHacks=n + +# Application initializes SDL audio/video inside static constructors (which is bad, you won't be able to run ndk-gdb) (y)/(n) +CompatibilityHacksStaticInit=n + +# On-screen Android soft text input emulates hardware keyboard, this will only work with Hackers Keyboard app (y)/(n) +CompatibilityHacksTextInputEmulatesHwKeyboard=y + +# Hack for broken devices: prevent audio chopping, by sleeping a bit after pushing each audio chunk (y)/(n) +CompatibilityHacksPreventAudioChopping=n + +# Hack for broken apps: application ignores audio buffer size returned by SDL (y)/(n) +CompatibilityHacksAppIgnoresAudioBufferSize=n + +# Hack for VCMI: preload additional shared libraries before aplication start +CompatibilityHacksAdditionalPreloadedSharedLibraries="" + +# Hack for Free Heroes 2, which redraws the screen inside SDL_PumpEvents(): slow and compatible SDL event queue - +# do not use it with accelerometer/gyroscope, or your app may freeze at random (y)/(n) +CompatibilityHacksSlowCompatibleEventQueue=n + +# Save and restore OpenGL state when drawing on-screen keyboard for apps that use SDL_OPENGL +CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState= + +# Application uses SDL_UpdateRects() properly, and does not draw in any region outside those rects. +# This improves drawing speed, but I know only one application that does that, and it's written by me (y)/(n) +CompatibilityHacksProperUsageOfSDL_UpdateRects= + +# Application uses mouse (y) or (n), this will show mouse emulation dialog to the user +AppUsesMouse=y + +# Application needs two-button mouse, will also enable advanced point-and-click features (y) or (n) +AppNeedsTwoButtonMouse=y + +# Show SDL mouse cursor, for applications that do not draw cursor at all (y) or (n) +ShowMouseCursor=n + +# Generate more touch events, by default SDL generates one event per one video frame, this is useful for drawing apps (y) or (n) +GenerateSubframeTouchEvents= + +# Force relative (laptop) mouse movement mode, useful when both on-screen keyboard and mouse are needed (y) or (n) +ForceRelativeMouseMode=n + +# Application needs arrow keys (y) or (n), will show on-screen dpad/joystick (y) or (n) +AppNeedsArrowKeys=n + +# Application needs text input (y) or (n), enables button for text input on screen +AppNeedsTextInput=y + +# Application uses joystick (y) or (n), the on-screen DPAD will be used as joystick 0 axes 0-1 +AppUsesJoystick=n + +# Application uses second on-screen joystick, as SDL joystick 0 axes 2-3 (y)/(n) +AppUsesSecondJoystick=n + +# Application uses accelerometer (y) or (n), the accelerometer will be used as joystick 1 axes 0-1 and 5-7 +AppUsesAccelerometer=n + +# Application uses gyroscope (y) or (n), the gyroscope will be used as joystick 1 axes 2-4 +AppUsesGyroscope=n + +# Application uses multitouch (y) or (n), multitouch events are passed as SDL_JOYBALLMOTION events for the joystick 0 +AppUsesMultitouch=n + +# Application records audio (it will use any available source, such a s microphone) +# API is defined in file SDL_android.h: int SDL_ANDROID_OpenAudioRecording(SDL_AudioSpec *spec); void SDL_ANDROID_CloseAudioRecording(void); +# This option will add additional permission to Android manifest (y)/(n) +AppRecordsAudio=n + +# Application implements Android-specific routines to put to background, and will not draw anything to screen +# between SDL_ACTIVEEVENT lost / gained notifications - you should check for them +# rigth after SDL_Flip(), if (n) then SDL_Flip() will block till app in background (y) or (n) +# This option is reported to be buggy, sometimes failing to restore video state +NonBlockingSwapBuffers=y + +# Redefine common hardware keys to SDL keysyms +# BACK hardware key is available on all devices, MENU is available on pre-ICS devices, other keys may be absent +# SEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices +# Use word NO_REMAP if you want to preserve native functionality for certain key (volume keys are 3-rd and 4-th) +# Keys: TOUCHSCREEN (works only when AppUsesMouse=n), DPAD_CENTER/SEARCH, VOLUMEUP, VOLUMEDOWN, MENU, BACK, CAMERA +RedefinedKeys="SPACE" + +# Number of virtual keyboard keys (currently 6 is maximum) +AppTouchscreenKeyboardKeysAmount=0 + +# Number of virtual keyboard keys that support autofire (currently 2 is maximum) +AppTouchscreenKeyboardKeysAmountAutoFire=0 + +# Redefine on-screen keyboard keys to SDL keysyms - 6 keyboard keys + 4 multitouch gestures (zoom in/out and rotate left/right) +RedefinedKeysScreenKb="1 2 3 4 5 6 1 2 3 4" + +# Names for on-screen keyboard keys, such as Fire, Jump, Run etc, separated by spaces, they are used in SDL config menu +RedefinedKeysScreenKbNames="1 2 3 4 5 6 1 2 3 4" + +# On-screen keys theme +# 0 = Ultimate Droid by Sean Stieber (green, with gamepad joystick) +# 1 = Simple Theme by Beholder (white, with gamepad joystick) +# 2 = Sun by Sirea (yellow, with round joystick) +# 3 = Keen by Gerstrong (multicolor, with round joystick) +TouchscreenKeysTheme=2 + +# Redefine gamepad keys to SDL keysyms, button order is: +# A B X Y L1 R1 L2 R2 LThumb RThumb +RedefinedKeysGamepad="1 2 3 4 5 6 1 2 3 4" + +# How long to show startup menu button, in msec, 0 to disable startup menu +StartupMenuButtonTimeout=3000 + +# Menu items to hide from startup menu, available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout +HiddenMenuOptions='' + +# Menu items to show at startup - this is Java code snippet, leave empty for default +# new SettingsMenuMisc.ShowReadme(), (AppUsesMouse \&\& \! ForceRelativeMouseMode \? new SettingsMenuMouse.DisplaySizeConfig(true) : new SettingsMenu.DummyMenu()), new SettingsMenuMisc.OptionalDownloadConfig(true), new SettingsMenuMisc.GyroscopeCalibration() +# Available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout +FirstStartMenuOptions='' + +# Enable multi-ABI binary, with hardware FPU support - it will also work on old devices, +# but .apk size is 2x bigger (y) / (n) / (x86) / (all) +MultiABI=all + +# Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower +AppMinimumRAM=256 + +# Application version code (integer) +AppVersionCode=101 + +# Application user-visible version name (string) +AppVersionName="1.01" + +# Reset SDL config when updating application to the new version (y) / (n) +ResetSdlConfigForThisVersion=n + +# Delete application data files when upgrading (specify file/dir paths separated by spaces) +DeleteFilesOnUpgrade="%" + +# Optional shared libraries to compile - removing some of them will save space +# MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed +# Available libraries: mad (GPL-ed!) sdl_mixer sdl_image sdl_ttf sdl_net sdl_blitpool sdl_gfx sdl_sound intl xml2 lua jpeg png ogg flac tremor vorbis freetype xerces curl theora fluidsynth lzma lzo2 mikmod openal timidity zzip bzip2 yaml-cpp python boost_date_time boost_filesystem boost_iostreams boost_program_options boost_regex boost_signals boost_system boost_thread glu avcodec avdevice avfilter avformat avresample avutil swscale swresample bzip2 +CompiledLibraries="sdl_image guichan" + +# Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n) +CustomBuildScript=n + +# Aditional CFLAGS for application +AppCflags='-Wall -Wno-unused' + +# Additional LDFLAGS for application +AppLdflags='' + +# If application has headers with the same name as system headers, this option tries to fix compiler flags to make it compilable +AppOverlapsSystemHeaders= + +# Build only following subdirs (empty will build all dirs, ignored with custom script) +AppSubdirsBuild='' + +# Exclude these files from build +AppBuildExclude='' + +# Application command line parameters, including app name as 0-th param +AppCmdline='' + +# Here you may type readme text, which will be shown during startup. Format is: +# Text in English, use \\\\n to separate lines^de:Text in Deutsch^ru:Text in Russian, and so on (that's four backslashes, nice isn't it?) +ReadmeText='^Readme text' + +# Screen size is used by Google Play to prevent an app to be installed on devices with smaller screens +# Minimum screen size that application supports: (s)mall / (m)edium / (l)arge +MinimumScreenSize=s + +# Your AdMob Publisher ID, (n) if you don't want advertisements +AdmobPublisherId=n + +# Your AdMob test device ID, to receive a test ad +AdmobTestDeviceId= + +# Your AdMob banner size (BANNER/IAB_BANNER/IAB_LEADERBOARD/IAB_MRECT/IAB_WIDE_SKYSCRAPER/SMART_BANNER) +AdmobBannerSize= + diff --git a/project/jni/application/guichan-widgets/AndroidData/files.zip b/project/jni/application/guichan-widgets/AndroidData/files.zip new file mode 100644 index 0000000000000000000000000000000000000000..314551ebb13f0b6dea1bdc953a579aee6f1665b9 GIT binary patch literal 53273 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 Ghz9^Z!1-wa literal 0 HcmV?d00001 diff --git a/project/jni/application/guichan-widgets/gui.xml b/project/jni/application/guichan-widgets/gui.xml new file mode 100644 index 000000000..8514f2f4e --- /dev/null +++ b/project/jni/application/guichan-widgets/gui.xml @@ -0,0 +1,23 @@ + +