diff --git a/.gitignore b/.gitignore index 9ea989787..c2e204279 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ project/res/values* project/AndroidManifest.xml project/jni/Settings.mk libapplication.so +project/proguard.cfg diff --git a/project/jni/application/Android.mk b/project/jni/application/Android.mk index 4e0f1afc0..3e68f99c5 100644 --- a/project/jni/application/Android.mk +++ b/project/jni/application/Android.mk @@ -25,7 +25,7 @@ LOCAL_C_INCLUDES += $(foreach D, $(APP_SUBDIRS), $(LOCAL_PATH)/$(D)) \ $(LOCAL_PATH)/../sdl-$(SDL_VERSION)/include \ $(foreach L, $(COMPILED_LIBRARIES), $(LOCAL_PATH)/../$(L)/include) -LOCAL_CFLAGS += -D__sF=__SDL_fake_stdout -Dcout=__SDL_fake_cout -Dcerr=__SDL_fake_cerr -Dclog=__SDL_fake_clog +LOCAL_CFLAGS += -D__sF=__SDL_fake_stdout -Dcout=__SDL_fake_cout -Dcerr=__SDL_fake_cerr -Dclog=__SDL_fake_clog -Dprintf=__SDL_android_printf LOCAL_CFLAGS += $(APPLICATION_ADDITIONAL_CFLAGS) @@ -51,28 +51,30 @@ LOCAL_LDFLAGS := -Lobj/local/armeabi LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS) -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 \ -) ) +# Disabled for now 'till I not confirmed it -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 +#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 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)) diff --git a/project/jni/application/setEnvironment-r4b.sh b/project/jni/application/setEnvironment-r4b.sh index c161b213f..1def20665 100755 --- a/project/jni/application/setEnvironment-r4b.sh +++ b/project/jni/application/setEnvironment-r4b.sh @@ -47,7 +47,8 @@ CFLAGS="-I$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/include \ -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 -D__sF=__SDL_fake_stdout -Dcout=__SDL_fake_cout -Dcerr=__SDL_fake_cerr -Dclog=__SDL_fake_clog \ +-Wa,--noexecstack -DNDEBUG -g \ +-D__sF=__SDL_fake_stdout -Dcout=__SDL_fake_cout -Dcerr=__SDL_fake_cerr -Dclog=__SDL_fake_clog -Dprintf=__SDL_android_printf \ -I$LOCAL_PATH/../sdl-1.2/include $STL_INCLUDE \ `echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-I$LOCAL_PATH/../\1/include@g\"`" diff --git a/project/jni/application/setEnvironment-r5b.sh b/project/jni/application/setEnvironment-r5b.sh index b5a6a7687..efea1c689 100755 --- a/project/jni/application/setEnvironment-r5b.sh +++ b/project/jni/application/setEnvironment-r5b.sh @@ -50,7 +50,8 @@ 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 \ -I$NDK/platforms/$PLATFORMVER/arch-arm/usr/include -Wa,--noexecstack \ --DANDROID -D__sF=__SDL_fake_stdout -Dcout=__SDL_fake_cout -Dcerr=__SDL_fake_cerr -Dclog=__SDL_fake_clog -DNDEBUG -O2 -g \ +-DANDROID -D__sF=__SDL_fake_stdout -Dcout=__SDL_fake_cout -Dcerr=__SDL_fake_cerr -Dclog=__SDL_fake_clog -Dprintf=__SDL_android_printf \ +-DNDEBUG -O2 -g \ -I$NDK/sources/cxx-stl/gnu-libstdc++/include \ -I$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include \ -I$LOCAL_PATH/../sdl-1.2/include \ diff --git a/project/jni/sdl-1.3/Android.mk b/project/jni/sdl-1.3/Android.mk index a4fe4d229..6760e5504 100644 --- a/project/jni/sdl-1.3/Android.mk +++ b/project/jni/sdl-1.3/Android.mk @@ -38,6 +38,7 @@ SDL_SRCS := \ src/audio/android/*.c \ src/cdrom/dummy/*.c \ src/video/android/*.c \ + src/video/android/*.cpp \ src/haptic/dummy/*.c \ src/loadso/dlopen/*.c \ src/atomic/dummy/*.c \ diff --git a/project/jni/sdl-1.3/src/video/android/SDL_fake_stdout.cpp b/project/jni/sdl-1.3/src/video/android/SDL_fake_stdout.cpp index 80552e9fd..592d5f1c5 100644 --- a/project/jni/sdl-1.3/src/video/android/SDL_fake_stdout.cpp +++ b/project/jni/sdl-1.3/src/video/android/SDL_fake_stdout.cpp @@ -8,14 +8,13 @@ it is heavily dependent on NDK internals and is not portable in any way. #define _SDL_fake_stdout_h #include #include +#include extern "C" FILE __SDL_fake_stdout[]; FILE __SDL_fake_stdout[3]; -extern "C" void SDL_ANDROID_initFakeStdout(); - -void SDL_ANDROID_initFakeStdout() +extern "C" void SDL_ANDROID_initFakeStdout() { FILE * ff = NULL; __SDL_fake_stdout[0] = * fopen("/dev/null", "r"); @@ -23,13 +22,34 @@ void SDL_ANDROID_initFakeStdout() __SDL_fake_stdout[2] = * fopen("/dev/null", "w"); } +int __SDL_android_printf(const char * fmt, ...) +{ + int return_value; + char buff[1024]; + va_list ap; + va_start(ap, fmt); + /* + int characters = vfprintf(stdout, fmt, ap); // get buffer size + if(characters<0) return; + char* buff = new char[characters+1]; + return_value = vsprintf(buff, fmt, ap); + */ + return_value = vsnprintf(buff, sizeof(buff), fmt, ap); + va_end(ap); + __android_log_print(ANDROID_LOG_INFO, "libSDL", buff); + //delete buff; + return return_value; +} + /* Outputting anything to cout/cerr WILL CRASH YOUR PROGRAM on specific devices - x5a/x6d Android 2.1 tablet, and some other tablets, however the same code runs on my HTC Evo without problem. So I've just disabled cin/cout/cerr altogether. */ -class _android_debugbuf: public streambuf +namespace std { + +class _android_debugbuf: public std::streambuf { public: _android_debugbuf() @@ -94,7 +114,6 @@ void outputchar(char c) }; -namespace std { ostream __SDL_fake_cout(new _android_debugbuf()); ostream __SDL_fake_cerr(new _android_debugbuf()); ostream __SDL_fake_clog(new _android_debugbuf());