diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index 5375d3ac2..ad71b7396 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -533,6 +533,7 @@ public class MainActivity extends Activity { } } + // ----- VCMI hack ----- try { System.out.println("libSDL: Extracting VCMI server"); @@ -603,6 +604,7 @@ public class MainActivity extends Activity { { System.out.println("libSDL: Error: " + eee.toString()); } + // ----- VCMI hack ----- }; diff --git a/project/java/Video.java b/project/java/Video.java index 2ef024ced..fcd7b70a4 100644 --- a/project/java/Video.java +++ b/project/java/Video.java @@ -264,6 +264,18 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer // Thread.currentThread().setPriority((Thread.currentThread().getPriority() + Thread.MIN_PRIORITY)/2); mGlContextLost = false; + + // ----- VCMI hack ----- + try + { + File libpath = new File(context.getFilesDir(), "libvcmi.so"); + System.load(libpath.getPath()); + } + catch ( UnsatisfiedLinkError eee ) + { + System.out.println("libSDL: error loading lib: " + eee.toString()); + } + // ----- VCMI hack ----- String libs[] = { "application", "sdl_main" }; try @@ -275,13 +287,21 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer } catch ( UnsatisfiedLinkError e ) { - for(String l : libs) + System.out.println("libSDL: error loading lib: " + e.toString()); + try { - String libname = System.mapLibraryName(l); - File libpath = new File(context.getCacheDir(), libname); - System.out.println("libSDL: loading lib " + libpath.getPath()); - System.load(libpath.getPath()); - libpath.delete(); + for(String l : libs) + { + String libname = System.mapLibraryName(l); + File libpath = new File(context.getCacheDir(), libname); + System.out.println("libSDL: loading lib " + libpath.getPath()); + System.load(libpath.getPath()); + libpath.delete(); + } + } + catch ( UnsatisfiedLinkError ee ) + { + System.out.println("libSDL: error loading lib: " + ee.toString()); } } diff --git a/project/jni/application/openttd/readme.txt b/project/jni/application/openttd/readme.txt index c9fcae7a1..928a52e8b 100644 --- a/project/jni/application/openttd/readme.txt +++ b/project/jni/application/openttd/readme.txt @@ -3,7 +3,7 @@ Download my GIT repo from https://github.com/pelya/commandergenius, then install Android SDK 2.2, NDK r4b (NDK r5/r5b will not compile this), and "ant" tool, then launch commands rm project/jni/application/src - ln -s scummvm project/jni/application/src + ln -s vcmi project/jni/application/src cd project && android update project -p . then download OpenTTD 1.1.1 into the dir project/jni/application/openttd/openttd (or create a symlink to it if you already have downloaded it), then apply patch openttd-trunk-android.patch diff --git a/project/jni/application/setEnvironment-r5b.sh b/project/jni/application/setEnvironment-r5b.sh index 6840f61e7..a41543a7e 100755 --- a/project/jni/application/setEnvironment-r5b.sh +++ b/project/jni/application/setEnvironment-r5b.sh @@ -63,15 +63,19 @@ CFLAGS="\ `echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-I$LOCAL_PATH/../\1/include@g\"` \ $CRYSTAX_WCHAR_INCLUDE" -SHARED=-shared +SHARED="-shared -Wl,-soname,libapplication.so" if [ -n "$BUILD_EXECUTABLE" ]; then SHARED= fi +if [ -n "$NO_SHARED_LIBS" ]; then + APP_SHARED_LIBS= +fi + #-shared flag creates problems with damn libtool, so we're using -Wl,-shared instead LDFLAGS="\ -fexceptions -frtti $SHARED \ --Wl,-soname,libapplication.so --sysroot=$NDK/platforms/$PLATFORMVER/arch-arm \ +--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 \ diff --git a/project/jni/application/vcmi/AndroidAppSettings.cfg b/project/jni/application/vcmi/AndroidAppSettings.cfg index a741e0956..2cdd9900c 100644 --- a/project/jni/application/vcmi/AndroidAppSettings.cfg +++ b/project/jni/application/vcmi/AndroidAppSettings.cfg @@ -30,7 +30,7 @@ AppVersionName="0.85.01" CompiledLibraries="sdl_mixer sdl_image sdl_ttf avutil avcore avcodec avformat swscale boost_program_options boost_filesystem boost_iostreams boost_system boost_thread" CustomBuildScript=n AppCflags='-DDATA_DIR=\\\"/sdcard/app-data/eu.vcmi\\\" -DBIN_DIR=\\\"/data/data/eu.vcmi/files\\\" -DLIB_DIR=\\\"/data/data/eu.vcmi/files\\\" -DWITH_AVCODEC_DECODE_VIDEO2=1' -AppLdflags='-lz' -AppSubdirsBuild='vcmi vcmi/client vcmi/lib' +AppLdflags='-lz -Ljni/application/vcmi -lvcmi' +AppSubdirsBuild='vcmi vcmi/client' AppCmdline='' ReadmeText='^You may press "Home" now - the data will be downloaded in background' diff --git a/project/jni/application/vcmi/AndroidData/data1.zip b/project/jni/application/vcmi/AndroidData/data1.zip index 653b99d82..bfd6667d1 100644 Binary files a/project/jni/application/vcmi/AndroidData/data1.zip and b/project/jni/application/vcmi/AndroidData/data1.zip differ diff --git a/project/jni/application/vcmi/AndroidData/vcmiserver0 b/project/jni/application/vcmi/AndroidData/vcmiserver0 index aa9aeda25..084f581e6 100644 Binary files a/project/jni/application/vcmi/AndroidData/vcmiserver0 and b/project/jni/application/vcmi/AndroidData/vcmiserver0 differ diff --git a/project/jni/application/vcmi/AndroidData/vcmiserver1 b/project/jni/application/vcmi/AndroidData/vcmiserver1 new file mode 100644 index 000000000..5878abafe Binary files /dev/null and b/project/jni/application/vcmi/AndroidData/vcmiserver1 differ diff --git a/project/jni/application/vcmi/AndroidData/vcmiserver2 b/project/jni/application/vcmi/AndroidData/vcmiserver2 new file mode 100644 index 000000000..62769f9a3 Binary files /dev/null and b/project/jni/application/vcmi/AndroidData/vcmiserver2 differ diff --git a/project/jni/application/vcmi/Makefile b/project/jni/application/vcmi/Makefile index e060715ab..3b0471a68 100644 --- a/project/jni/application/vcmi/Makefile +++ b/project/jni/application/vcmi/Makefile @@ -1,34 +1,68 @@ -$(shell mkdir -p out/vcmi/lib out/vcmi/server) +$(shell mkdir -p debug out/vcmi/lib out/vcmi/server out/vcmi/AI/StupidAI out/vcmi/AI/GeniusAI) LOCAL_PATH=$(shell dirname $0) LOCAL_PATH=`cd $LOCAL_PATH && pwd` GCC_PREFIX=$(if $(shell which ndk-build | grep 'android-ndk-r5'),arm-linux-androideabi,arm-eabi) -SOURCES=$(wildcard vcmi/lib/*.cpp vcmi/server/*.cpp vcmi/CConsoleHandler.cpp vcmi/CThreadHelper.cpp) -OBJS=$(patsubst %.cpp, out/%.o, $(SOURCES)) -$(warning SOURCES $(SOURCES)) -$(warning OBJS $(OBJS)) +SOURCES_LIB=$(wildcard vcmi/lib/*.cpp vcmi/CConsoleHandler.cpp vcmi/CThreadHelper.cpp) +OBJS_LIB=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB)) -vcmiserver: $(OBJS) - env BUILD_EXECUTABLE=1 ../setEnvironment.sh sh -c \ - "$(GCC_PREFIX)-g++ \ - \$$LDFLAGS \ - $^ -o $@ \ - -lboost_filesystem -lboost_iostreams -lboost_system -lboost_thread" - mkdir -p debug - cp $@ debug/$@ - $(GCC_PREFIX)-strip $@ +SOURCES_SERVER=$(wildcard vcmi/server/*.cpp) +OBJS_SERVER=$(patsubst %.cpp, out/%.o, $(SOURCES_SERVER)) -$(OBJS): out/%.o: %.cpp +SOURCES_STUPIDAI=$(wildcard vcmi/AI/StupidAI/*.cpp) +OBJS_STUPIDAI=$(patsubst %.cpp, out/%.o, $(SOURCES_STUPIDAI)) + +SOURCES_GENIUSAI=$(filter-out %/ExpertSystem.cpp, $(wildcard vcmi/AI/GeniusAI/*.cpp)) +OBJS_GENIUSAI=$(patsubst %.cpp, out/%.o, $(SOURCES_GENIUSAI)) + +all: AndroidData/vcmiserver0 + +AndroidData/vcmiserver0: vcmiserver.zip + split -b 1048576 -d -a 1 $< AndroidData/vcmiserver + +vcmiserver.zip: vcmiserver libvcmi.so GeniusAI.so StupidAI.so + rm -f $@ + zip $@ $^ + +$(OBJS_SERVER) $(OBJS_LIB) $(OBJS_GENIUSAI) $(OBJS_STUPIDAI): out/%.o: %.cpp ../setEnvironment.sh sh -c \ "$(GCC_PREFIX)-g++ \ - -c \$$CXXFLAGS -Ivcmi -Ivcmi/lib -Ivcmi/server \ + -c \$$CXXFLAGS -Ivcmi -Ivcmi/lib \ -DDATA_DIR=\\\"/sdcard/app-data/eu.vcmi\\\" \ -DBIN_DIR=\\\"/data/data/eu.vcmi/files\\\" \ -DLIB_DIR=\\\"/data/data/eu.vcmi/files\\\" \ -DWITH_AVCODEC_DECODE_VIDEO2=1 \ $< -o $@" +vcmiserver: $(OBJS_SERVER) $(OBJS_LIB) + env BUILD_EXECUTABLE=1 NO_SHARED_LIBS=1 ../setEnvironment.sh sh -c \ + "$(GCC_PREFIX)-g++ \ + \$$LDFLAGS -L. \ + $^ -o $@ \ + -lboost_filesystem -lboost_iostreams -lboost_system -lboost_thread" && \ + cp $@ debug/$@ && \ + $(GCC_PREFIX)-strip $@ +LINK_LIB= \ + env BUILD_EXECUTABLE=1 NO_SHARED_LIBS=1 ../setEnvironment.sh sh -c \ + "$(GCC_PREFIX)-g++ \ + -shared \$$LDFLAGS -L. \ + $^ -o $@ \ + -lboost_filesystem -lboost_iostreams -lboost_system -lboost_thread" && \ + cp $@ debug/$@ && \ + $(GCC_PREFIX)-strip $@ + +GeniusAI.so: $(OBJS_GENIUSAI) -lvcmi + $(LINK_LIB) + +StupidAI.so: $(OBJS_STUPIDAI) -lvcmi + $(LINK_LIB) + +libvcmi.so: $(OBJS_LIB) + $(LINK_LIB) + +.PHONY: -lvcmi +-lvcmi: libvcmi.so diff --git a/project/jni/application/vcmi/readme.txt b/project/jni/application/vcmi/readme.txt new file mode 100644 index 000000000..bc07f2f1b --- /dev/null +++ b/project/jni/application/vcmi/readme.txt @@ -0,0 +1,13 @@ +Quick compilation guide: +Download my GIT repo from https://github.com/pelya/commandergenius, +then install Android SDK 2.2, NDK r5c from http://developer.android.com, +and "ant" tool, then launch commands + rm project/jni/application/src + ln -s vcmi project/jni/application/src + cd project && android update project -p . +then download VCMI into the dir project/jni/application/vcmi/vcmi +(or create a symlink to it if you already have downloaded it), then apply patch vcmi-android.diff, +launch "make" from directory project/jni/application/vcmi (it will create some shared libs), +then launch build.sh. +To run it you should have complete installation of Heroes 3: Wake of Gods on your SD card on your device, +in the directory app-data/eu.vcmi