Removed sdl_fake_stdout hack - it prevents standalone executables to link

This commit is contained in:
pelya
2011-06-08 13:30:31 +03:00
parent 4a79eb6bde
commit c684662e0e
19 changed files with 32 additions and 229 deletions

View File

@@ -33,8 +33,6 @@ 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 += -include $(LOCAL_PATH)/../sdl_fake_stdout/include/SDL_android_printf.h
LOCAL_CFLAGS += $(APPLICATION_ADDITIONAL_CFLAGS)
#Change C++ file extension as appropriate
@@ -48,11 +46,11 @@ LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) $(filter-out $(APP_AVAILABLE_STATIC
LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_STATIC_LIBRARIES += stlport sdl_fake_stdout
LOCAL_STATIC_LIBRARIES += stlport
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lz
LOCAL_LDFLAGS := -Lobj/local/armeabi -Wl,-u,_SDL_ANDROID_initFakeStdout
LOCAL_LDFLAGS := -Lobj/local/armeabi
LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS)

View File

@@ -48,7 +48,6 @@ CFLAGS="-I$NDK/build/platforms/$PLATFORMVER/arch-arm/usr/include \
-Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -O2 \
-fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \
-Wa,--noexecstack -DNDEBUG -g \
-include $LOCAL_PATH/../sdl_fake_stdout/include/SDL_android_printf.h \
-I$LOCAL_PATH/../sdl-1.2/include $STL_INCLUDE \
`echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-I$LOCAL_PATH/../\1/include@g\"`"
@@ -62,7 +61,7 @@ $NDK/build/platforms/$PLATFORMVER/arch-arm/usr/lib/libm.so \
-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 -lsdl_fake_stdout -Wl,-u,_SDL_ANDROID_initFakeStdout"
-L$LOCAL_PATH/../../obj/local/armeabi $STL_LIB"
env PATH=$NDK/build/prebuilt/$MYARCH/arm-eabi-$GCCVER/bin:$LOCAL_PATH:$PATH \
CFLAGS="$CFLAGS" \

View File

@@ -47,7 +47,7 @@ done
if [ -n "$CRYSTAX_WCHAR" ]; then
CRYSTAX_WCHAR_INCLUDE=-I$NDK/sources/wchar-support/include
CRYSTAX_WCHAR_LIB="$NDK/sources/wchar-support/libs/armeabi/libwchar_static.a"
CRYSTAX_WCHAR_LIB="-L$NDK/sources/wchar-support/libs/armeabi -lwchar_static"
fi
CFLAGS="\
@@ -55,7 +55,7 @@ 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 -include $LOCAL_PATH/../sdl_fake_stdout/include/SDL_android_printf.h \
-DANDROID \
-DNDEBUG -O2 -g \
-I$NDK/sources/cxx-stl/gnu-libstdc++/include \
-I$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include \
@@ -77,7 +77,7 @@ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libz.so \
$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libstdc++.a \
-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++ -lsdl_fake_stdout -Wl,-u,_SDL_ANDROID_initFakeStdout \
-Wl,-rpath-link=$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib -lsupc++ \
$CRYSTAX_WCHAR_LIB"
env PATH=$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \

View File

@@ -9,11 +9,17 @@ ln -sf libsdl-1.2.so $LOCAL_PATH/../../../obj/local/armeabi/libpthread.so
ln -sf libsdl_mixer.so $LOCAL_PATH/../../../obj/local/armeabi/libSDL_mixer.so
ln -sf libsdl_image.so $LOCAL_PATH/../../../obj/local/armeabi/libSDL_image.so
ln -sf libsdl_ttf.so $LOCAL_PATH/../../../obj/local/armeabi/libSDL_ttf.so
rm -f libapplication.so
GCC_PREFIX=arm-eabi
if echo $CXX | grep 'arm-linux-androideabi'; then
GCC_PREFIX=arm-linux-androideabi
fi
if [ \! -f vcmi/Makefile -o $0 -nt vcmi/Makefile ] ; then
../setEnvironment.sh sh -c "cd vcmi && \
env LIBS='-lavcodec -lavutil -lavcore -lgcc' \
./configure --host=arm-eabi --enable-static \
./configure --host=$GCC_PREFIX --enable-static \
--with-boost-system=boost_system \
--with-boost-filesystem=boost_filesystem \
--with-boost-thread=boost_thread \
@@ -24,10 +30,11 @@ fi
../setEnvironment.sh sh -c "cd vcmi && \
make -j4 AM_DEFAULT_VERBOSITY=1 \
pkgdatadir=. pkglibdir=/data/data/eu.vcmi/lib bindir=/data/data/eu.vcmi/lib" && \
cp -f vcmi/client/vcmiclient libapplication.so &&
cp -f vcmi/client/vcmiclient libapplication.so || exit 1
rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL.so
rm -f $LOCAL_PATH/../../../obj/local/armeabi/libpthread.so
rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL_mixer.so
rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL_image.so
rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL_ttf.so
exit 0

View File

@@ -5,15 +5,15 @@ include $(CLEAR_VARS)
LOCAL_MODULE := bzip2
LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/include
LOCAL_CFLAGS := -O3 -D__sF=__SDL_fake_stdout
LOCAL_CFLAGS := -O3
LOCAL_CPP_EXTENSION := .cpp
LOCAL_SRC_FILES := $(notdir $(wildcard $(LOCAL_PATH)/*.c))
LOCAL_STATIC_LIBRARIES :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS :=

View File

@@ -49,8 +49,8 @@ LOCAL_PATH:= $(call my-dir)
common_CFLAGS := \
-Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes \
-Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels \
-Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers -DHAVE_CONFIG_H -std=gnu99 \
-D__sF=__SDL_fake_stdout
-Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers -DHAVE_CONFIG_H -std=gnu99
#########################
# Build the libcurl library
@@ -75,7 +75,7 @@ LOCAL_CFLAGS += $(common_CFLAGS)
LOCAL_MODULE:= libcurl
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS := -lz

View File

@@ -7,7 +7,7 @@ LOCAL_MODULE := fluidsynth
APP_SUBDIRS := $(patsubst $(LOCAL_PATH)/%, %, $(shell find $(LOCAL_PATH)/src -type d))
LOCAL_C_INCLUDES := $(foreach D, $(APP_SUBDIRS), $(LOCAL_PATH)/$(D)) $(LOCAL_PATH)/include $(LOCAL_PATH)/../sdl-$(SDL_VERSION)/include
LOCAL_CFLAGS := -O3 -DHAVE_CONFIG_H -include stdint.h -Werror=implicit -D__sF=__SDL_fake_stdout
LOCAL_CFLAGS := -O3 -DHAVE_CONFIG_H -include stdint.h -Werror=implicit
LOCAL_CPP_EXTENSION := .cpp

View File

@@ -17,14 +17,13 @@ LOCAL_CFLAGS := -Os -DBUILDING_LIBINTL -DBUILDING_DLL \
-DLOCALEDIR=\"\" \
-DLIBDIR=\"\" \
-DLOCALE_ALIAS_PATH=\"\" \
-DINSTALLDIR=\"\" \
-D__sF=__SDL_fake_stdout
-DINSTALLDIR=\"\"
# -DLOCALE_ALIAS_PATH=\"/usr/local/share/locale\" \
# -DINSTALLDIR=\"/usr/local/lib\"
LOCAL_SRC_FILES := $(foreach F, $(APP_SUBDIRS), $(addprefix $(F)/,$(notdir $(wildcard $(LOCAL_PATH)/$(F)/*.c))))
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)

View File

@@ -5,15 +5,15 @@ include $(CLEAR_VARS)
LOCAL_MODULE := lua
LOCAL_C_INCLUDES := $(LOCAL_PATH)/src $(LOCAL_PATH)/include
LOCAL_CFLAGS := -O3 -D__sF=__SDL_fake_stdout
LOCAL_CFLAGS := -O3
LOCAL_CPP_EXTENSION := .cpp
LOCAL_SRC_FILES := $(addprefix src/, $(notdir $(wildcard $(LOCAL_PATH)/src/*.c) $(wildcard $(LOCAL_PATH)/src/*.cpp)))
LOCAL_STATIC_LIBRARIES :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS :=

View File

@@ -1 +0,0 @@
../../../../sdl-1.3/src/video/android/SDL_fake_stdout.c

View File

@@ -272,8 +272,6 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInitJavaCallbacks) ( JNIEnv* env, jobject t
JavaShowScreenKeyboard = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "showScreenKeyboard", "(Ljava/lang/String;I)V");
ANDROID_InitOSKeymap();
SDL_ANDROID_initFakeStdout();
}
int SDL_ANDROID_SetApplicationPutToBackgroundCallback(

View File

@@ -1,40 +0,0 @@
/*
Writing to stdout will crash your program on some particular Android tablets.
Although this is the device bug I've put a workaround here,
it is heavily dependent on NDK internals and is not portable in any way.
*/
#include <stdio.h>
#include <android/log.h>
extern FILE __SDL_fake_stdout[];
extern int __SDL_android_printf(const char * fmt, ...);
FILE __SDL_fake_stdout[3];
extern void SDL_ANDROID_initFakeStdout()
{
FILE * ff = NULL;
__SDL_fake_stdout[0] = * fopen("/dev/null", "r");
__SDL_fake_stdout[1] = * fopen("/dev/null", "w");
__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;
}

View File

@@ -1,26 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sdl_fake_stdout
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../sdl-$(SDL_VERSION)/include
LOCAL_CFLAGS :=
ifeq ($(CRYSTAX_TOOLCHAIN)$(NDK_R5_TOOLCHAIN),)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../stlport/stlport
endif
LOCAL_CPP_EXTENSION := .cpp
LOCAL_SRC_FILES := SDL_fake_stdout.cpp
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS := -llog
ifneq ($(CRYSTAX_R5B3_TOOLCHAIN),)
LOCAL_C_INCLUDES += $(NDK_PATH)/sources/wchar-support/include
LOCAL_LDFLAGS += sources/wchar-support/libs/armeabi/libwchar_static.a
endif
include $(BUILD_STATIC_LIBRARY)

View File

@@ -1,82 +0,0 @@
#include <stdio.h>
#include <android/log.h>
#include <iostream>
/* 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.
*/
namespace std {
class _android_debugbuf: public std::streambuf
{
public:
_android_debugbuf()
{
pos = 0;
buf[0] = 0;
}
protected:
virtual int overflow(int c = EOF)
{
if (EOF == c)
{
return '\0'; // returning EOF indicates an error
}
else
{
outputchar(c);
return c;
}
};
// we dont do input so always return EOF
virtual int uflow() {return EOF;}
// we dont do input so always return 0 chars read
virtual int xsgetn(char *, int) {return 0;}
// Calls outputchar() for each character.
virtual int xsputn(const char *s, int n)
{
for (int i = 0; i < n; ++i)
{
outputchar(s[i]);
}
return n;// we always process all of the chars
};
private:
// the buffer
char buf[256];
int pos;
void outputchar(char c)
{
// TODO: mutex
if( pos >= sizeof(buf)-1 || c == '\n' || c == '\r' || c == 0 )
{
buf[pos] = 0;
__android_log_print(ANDROID_LOG_INFO, "libSDL", "%s", buf);
pos = 0;
buf[pos] = 0;
return;
};
buf[pos] = c;
pos++;
};
};
ostream __SDL_fake_cout(new _android_debugbuf());
ostream __SDL_fake_cerr(new _android_debugbuf());
ostream __SDL_fake_clog(new _android_debugbuf());
}

View File

@@ -1,49 +0,0 @@
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2009 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
#ifndef __SDL_android_printf_h
#define __SDL_android_printf_h
#ifdef __cplusplus
extern "C" {
#endif
/* Outputs to logcat */
extern int __SDL_android_printf(const char * fmt, ...) __attribute__((format(printf, 1, 2)));
#define __sF __SDL_fake_stdout
#ifdef __cplusplus
#define cout __SDL_fake_cout
#define cerr __SDL_fake_cerr
#define clog __SDL_fake_clog
}
/* Generates lot of warning messages in standard headers, enable only for ultra debug mode */
/*
#include <stdio.h>
#define printf __SDL_android_printf
*/
#endif
#endif

View File

@@ -9,7 +9,7 @@ LOCAL_CPP_EXTENSION := .cpp
LOCAL_SRC_FILES := dummy.c
else
LOCAL_C_INCLUDES := $(LOCAL_PATH)/stlport $(LOCAL_PATH)/src
LOCAL_CFLAGS := -O3 -DANDROID_NO_COUT=1
LOCAL_CFLAGS := -O3
LOCAL_CPP_EXTENSION := .cpp
LOCAL_SRC_FILES := $(addprefix src/,$(notdir $(wildcard $(LOCAL_PATH)/src/*.cpp $(LOCAL_PATH)/src/*.c)))

View File

@@ -11,7 +11,7 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/src $(LOCAL_PATH)/include \
$(LOCAL_PATH)/include/xercesc/dom/ $(LOCAL_PATH)/include/xercesc/dom/impl \
$(LOCAL_PATH)/include/xercesc/validators/schema/identity $(LOCAL_PATH)/include/xercesc/util/Transcoders/IconvGNU/ \
$(LOCAL_PATH)/include/xercesc/sax
LOCAL_CFLAGS := -Os -DHAVE_CONFIG_H -D__sF=__SDL_fake_stdout
LOCAL_CFLAGS := -Os -DHAVE_CONFIG_H
LOCAL_CPP_EXTENSION := .cpp

View File

@@ -5,7 +5,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := xml2
LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/include
LOCAL_CFLAGS := -Os -D__sF=__SDL_fake_stdout
LOCAL_CFLAGS := -Os
LOCAL_CPP_EXTENSION := .cpp
@@ -21,7 +21,7 @@ LOCAL_SRC_FILES := \
triostr.c trio.c trionan.c
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION)
LOCAL_SHARED_LIBRARIES :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_LDLIBS := -lz -ldl