diff --git a/build.sh b/build.sh index f3d3c17b2..289ced803 100755 --- a/build.sh +++ b/build.sh @@ -1,13 +1,8 @@ #!/bin/sh # Set here your own NDK path if needed -# export PATH=$PATH:~/src/endless_space/android-ndk-r4b -# Set environment to CrystaX NDK with RTTI and exceptions instead of original NDK -# export PATH=$PATH:~/src/endless_space/android-ndk-r4-crystax/ndk-build +# export PATH=$PATH:~/src/endless_space/android-ndk-r5b NDKBUILDPATH=$PATH -if grep "AppUseCrystaXToolchain=y" AndroidAppSettings.cfg > /dev/null ; then - NDKBUILDPATH=`which ndk-build | sed 's@/[^/]*/ndk-build@/android-ndk-r4-crystax@'`:$PATH -fi export `grep "AppFullName=" AndroidAppSettings.cfg` if ( grep "package $AppFullName;" project/src/Globals.java > /dev/null && [ "`readlink AndroidAppSettings.cfg`" -ot "project/src/Globals.java" ] ) ; then true ; else ./ChangeAppSettings.sh -a @@ -15,5 +10,24 @@ if ( grep "package $AppFullName;" project/src/Globals.java > /dev/null && [ "`re touch project/src/Globals.java fi -cd project && env PATH=$NDKBUILDPATH nice -n19 ndk-build -j4 V=1 -k && ant `test -n "$1" && echo release || echo debug` && test -z "$1" && cd bin && adb install -r DemoActivity-debug.apk +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 + +cd project && env PATH=$NDKBUILDPATH nice -n19 ndk-build -j4 V=1 && \ + { grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \ + 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 \ + || true ; } && \ + ant `test -n "$1" && echo release || echo debug` && \ + test -z "$1" && cd bin && adb install -r DemoActivity-debug.apk diff --git a/project/jni/Application.mk b/project/jni/Application.mk index d688e82c3..543b413de 100644 --- a/project/jni/Application.mk +++ b/project/jni/Application.mk @@ -1,6 +1,6 @@ APP_PROJECT_PATH := $(call my-dir)/.. -APP_STL := system +APP_STL := gnustl_static include jni/Settings.mk diff --git a/project/jni/application/Android.mk b/project/jni/application/Android.mk index 2f6de9ce4..cb025b49b 100644 --- a/project/jni/application/Android.mk +++ b/project/jni/application/Android.mk @@ -16,7 +16,7 @@ endif LOCAL_CFLAGS := -ifeq ($(CRYSTAX_TOOLCHAIN),) +ifeq ($(CRYSTAX_TOOLCHAIN)$(NDK_R5_TOOLCHAIN),) LOCAL_CFLAGS += -I$(LOCAL_PATH)/../stlport/stlport endif @@ -44,8 +44,6 @@ LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBR LOCAL_STATIC_LIBRARIES += stlport LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lz -ifneq ($(NDK_R5_TOOLCHAIN),) -endif LOCAL_LDFLAGS := -Lobj/local/armeabi @@ -85,8 +83,7 @@ LOCAL_PATH_SDL_APPLICATION := $(LOCAL_PATH) .NOTPARALLEL: $(realpath $(LOCAL_PATH)/../../obj/local/armeabi/libapplication.so) $(LOCAL_PATH)/src/libapplication.so -$(shell rm $(LOCAL_PATH)/src/libapplication.so) # Enforce rebuilding -# $(shell rm $(LOCAL_PATH)/../../obj/local/armeabi/*.so) # libapplication.so may try to link with wrong libraries, prevent that +$(shell rm -f $(LOCAL_PATH)/src/libapplication.so) # Enforce rebuilding $(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 diff --git a/project/jni/application/openttd/AndroidBuild.sh b/project/jni/application/openttd/AndroidBuild.sh index 10da91de7..e5cfd9a63 100755 --- a/project/jni/application/openttd/AndroidBuild.sh +++ b/project/jni/application/openttd/AndroidBuild.sh @@ -18,4 +18,4 @@ fi if [ \! -f openttd/Makefile ] ; then ../setEnvironment.sh sh -c "cd openttd && ./configure --host=arm-linux-androideabi --with-sdl --with-freetype=sdl-config --with-png --with-zlib --with-libtimidity=$LOCAL_PATH/../../../obj/local/armeabi/libtimidity.so --with-lzo2=$LOCAL_PATH/../../../obj/local/armeabi/liblzo2.so --prefix-dir='.' --data-dir='' --without-allegro --without-fontconfig --endian=LE" fi -../setEnvironment.sh sh -c "cd openttd && make -j1 VERBOSE=1 STRIP='' LIBS='-lsdl-1.2 -llzo2 -lpng -ltimidity -lfreetype -lstlport -lz -lc -lstdc++ -lsupc++'" && cp -f openttd/objs/release/openttd libapplication.so +../setEnvironment.sh sh -c "cd openttd && make -j1 VERBOSE=1 STRIP='' LIBS='-lsdl-1.2 -llzo2 -lpng -ltimidity -lfreetype -lz -lc -lstdc++ -lsupc++'" && cp -f openttd/objs/release/openttd libapplication.so diff --git a/project/jni/application/setEnvironment.sh b/project/jni/application/setEnvironment.sh index c3f78a352..f6f547a91 100755 --- a/project/jni/application/setEnvironment.sh +++ b/project/jni/application/setEnvironment.sh @@ -54,9 +54,8 @@ CFLAGS="\ -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 -DNDEBUG -O2 -g \ --I$NDK/sources/cxx-stl/system/include \ +-I$NDK/sources/cxx-stl/gnu-libstdc++/include \ -I$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include \ --I$LOCAL_PATH/../stlport/stlport \ -I$LOCAL_PATH/../sdl-1.2/include \ `echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-I$LOCAL_PATH/../\1/include@g\"`" @@ -65,13 +64,16 @@ LDFLAGS="\ -Wl,-soname,libapplication.so -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/libstdc++.so \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libm.so \ --L$LOCAL_PATH/../../obj/local/armeabi -Wl,--no-undefined -Wl,-z,noexecstack \ +$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 -lstdc++ \ +$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libstdc++.a \ -L$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib \ --lGLESv1_CM -ldl -llog -lz \ --Wl,-rpath-link=$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib -lsupc++ \ --L$LOCAL_PATH/../../obj/local/armeabi $LOCAL_PATH/../../obj/local/armeabi/libstlport.a" +-L$LOCAL_PATH/../../obj/local/armeabi -Wl,--no-undefined -Wl,-z,noexecstack \ +-Wl,-rpath-link=$NDK/platforms/$PLATFORMVER/arch-arm/usr/lib -lsupc++" env PATH=$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \ CFLAGS="$CFLAGS" \ diff --git a/project/jni/stlport/Android.mk b/project/jni/stlport/Android.mk index c9269dad2..76ab6f7a6 100644 --- a/project/jni/stlport/Android.mk +++ b/project/jni/stlport/Android.mk @@ -4,7 +4,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := stlport -ifneq ($(CRYSTAX_TOOLCHAIN),) +ifneq ($(CRYSTAX_TOOLCHAIN)$(NDK_R5_TOOLCHAIN),) LOCAL_CPP_EXTENSION := .cpp LOCAL_SRC_FILES := dummy.c else diff --git a/project/jni/stlport/stlport/stl/_new.h b/project/jni/stlport/stlport/stl/_new.h index 81d1c011f..dabc5faf5 100644 --- a/project/jni/stlport/stlport/stl/_new.h +++ b/project/jni/stlport/stlport/stl/_new.h @@ -47,13 +47,6 @@ using _STLP_VENDOR_CSTD::malloc; # error Cannot include native new header as new is a macro. # endif -# ifdef ANDROID -# include _STLP_NATIVE_CPP_RUNTIME_HEADER(cstddef) -namespace std { -using ::ptrdiff_t; -using ::size_t; -} -# endif # include _STLP_NATIVE_CPP_RUNTIME_HEADER(new) # if defined (_STLP_BROKEN_BAD_ALLOC_CLASS) diff --git a/project/jni/stlport/stlport/stl/config/_android.h b/project/jni/stlport/stlport/stl/config/_android.h index 7e637fea8..65bc27a85 100644 --- a/project/jni/stlport/stlport/stl/config/_android.h +++ b/project/jni/stlport/stlport/stl/config/_android.h @@ -3,6 +3,8 @@ #define _STLP_PLATFORM "Android" +#include + // The Android C library is mostly glibc-like #define _STLP_USE_GLIBC 1 @@ -15,17 +17,19 @@ // Have pthreads support. #define _PTHREADS +#define _STLP_THREADS +#define _STLP_PTHREADS // Don't have native headers -#define _STLP_HAS_NO_NEW_C_HEADERS 1 +// #define _STLP_HAS_NO_NEW_C_HEADERS 1 // #define _STLP_USE_NEW_C_HEADERS 1 // #define _STLP_NO_NEW_NEW_HEADER 1 // #define _STLP_NO_NEW_HEADER 1 -#define _STLP_NEW_DONT_THROW_BAD_ALLOC 1 -#define _STLP_NO_BAD_ALLOC 1 +// #define _STLP_NEW_DONT_THROW_BAD_ALLOC 1 +// #define _STLP_NO_BAD_ALLOC 1 // No headers -#define _STLP_NO_EXCEPTION_HEADER 1 -#define _STLP_OWN_STDEXCEPT 1 // Already inside libsupc++, but we'll define it under different namespace +// #define _STLP_NO_EXCEPTION_HEADER 1 +// #define _STLP_OWN_STDEXCEPT 1 // Already inside libsupc++, but we'll define it under different namespace // Don't use wchar.h etc #define _STLP_NO_WCHAR_T 1 @@ -73,8 +77,8 @@ // Define how to include our native headers. #if defined(__ANDROID__) /* NDK r5 */ -# define _STLP_NATIVE_CPP_C_INCLUDE_PATH ../../../cxx-stl/system/include -# define _STLP_NATIVE_CPP_RUNTIME_INCLUDE_PATH ../../../cxx-stl/system/include +# define _STLP_NATIVE_CPP_C_INCLUDE_PATH ../../../cxx-stl/gnu-libstdc++/include +# define _STLP_NATIVE_CPP_RUNTIME_INCLUDE_PATH ../../../cxx-stl/gnu-libstdc++/include //# warning ("Detected Android NDK r5 or newer") #else /* NDK r4b */ # define _STLP_NATIVE_CPP_C_INCLUDE_PATH ../../usr/include