VCMI compiles

This commit is contained in:
Sergii Pylypenko
2013-02-21 20:33:52 +02:00
parent d0ee583da2
commit 4971d35d50
16 changed files with 97 additions and 185 deletions

View File

@@ -41,8 +41,8 @@ HiddenMenuOptions='OptionalDownloadConfig DisplaySizeConfig'
FirstStartMenuOptions=''
MultiABI=y
AppMinimumRAM=300
AppVersionCode=08819
AppVersionName="0.8.8.19"
AppVersionCode=08820
AppVersionName="0.8.8.20"
ResetSdlConfigForThisVersion=n
DeleteFilesOnUpgrade="libsdl-DownloadFinished-10.flag"
CompiledLibraries="sdl_mixer sdl_image freetype curl vorbis ogg"

View File

@@ -6,3 +6,4 @@ out
vcmiserver
vcmiserver.zip
build.log
AndroidData/binaries.zip

View File

@@ -1,23 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := vcmi
# VCMI compilation process is atrocious
$(shell touch $(LOCAL_PATH)/libvcmi.so)
#$(warning Please ignore the error about libvcmi.so, just recompile)
ifneq ($(NDK_R5_TOOLCHAIN),)
LOCAL_SRC_FILES := libvcmi.so
include $(PREBUILT_SHARED_LIBRARY)
else
LOCAL_SRC_FILES := dummy.c
include $(BUILD_SHARED_LIBRARY)
$(abspath $(LOCAL_PATH)/../../obj/local/armeabi/libvcmi.so): $(LOCAL_PATH)/libvcmi.so OVERRIDE_CUSTOM_LIB
cp -f $< $@
$(abspath $(LOCAL_PATH)/../../obj/local/armeabi-v7a/libvcmi.so): $(LOCAL_PATH)/libvcmi.so OVERRIDE_CUSTOM_LIB
cp -f $< $@
.PHONY: OVERRIDE_CUSTOM_LIB
OVERRIDE_CUSTOM_LIB:
endif

View File

@@ -5,7 +5,7 @@ AppName="VCMI"
AppFullName=eu.vcmi
ScreenOrientation=h
InhibitSuspend=n
AppDataDownloadUrl="!Data files|data1.zip^!Data files|data2.zip^!Data files|data3.zip^"
AppDataDownloadUrl="!Data files|vcmi_091.zip"
VideoDepthBpp=16
NeedDepthBuffer=n
NeedStencilBuffer=n
@@ -18,6 +18,9 @@ CompatibilityHacksStaticInit=n
CompatibilityHacksTextInputEmulatesHwKeyboard=n
CompatibilityHacksPreventAudioChopping=n
CompatibilityHacksAppIgnoresAudioBufferSize=n
CompatibilityHacksAdditionalPreloadedSharedLibraries="vcmi"
CompatibilityHacksSlowCompatibleEventQueue=n
CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState=
AppUsesMouse=y
AppNeedsTwoButtonMouse=y
ShowMouseCursor=n
@@ -26,6 +29,7 @@ AppNeedsArrowKeys=n
AppNeedsTextInput=y
AppUsesJoystick=n
AppUsesAccelerometer=n
AppUsesGyroscope=n
AppUsesMultitouch=n
NonBlockingSwapBuffers=n
RedefinedKeys="LALT RETURN NO_REMAP NO_REMAP E"
@@ -40,12 +44,14 @@ AppMinimumRAM=64
AppVersionCode=09100
AppVersionName="0.91.00"
ResetSdlConfigForThisVersion=n
DeleteFilesOnUpgrade=""
CompiledLibraries="mad sdl_mixer sdl_image sdl_ttf avutil avcore avcodec avformat swscale boost_program_options boost_filesystem boost_iostreams boost_system boost_thread vcmi android"
DeleteFilesOnUpgrade="%"
CompiledLibraries="mad sdl_mixer sdl_image sdl_ttf avcodec avformat avutil swscale boost_program_options boost_filesystem boost_iostreams boost_system boost_thread android"
CustomBuildScript=y
AppCflags='-DM_DATA_DIR=\"/sdcard/app-data/eu.vcmi\" -DM_BIN_DIR=\"/data/data/eu.vcmi/files\" -DM_LIB_DIR=\"/data/data/eu.vcmi/files\" -DWITH_AVCODEC_DECODE_VIDEO2=1 -Wstrict-aliasing -Wcast-align -Wpointer-arith -Waddress'
AppLdflags='-lz -Ljni/application/vcmi -lvcmi'
AppOverlapsSystemHeaders=
AppSubdirsBuild='vcmi/client vcmi/CCallback.cpp'
AppBuildExclude=''
AppCmdline=''
ReadmeText='^You may press "Home" now - the data will be downloaded in background'
MinimumScreenSize=s

View File

@@ -1,4 +1,6 @@
#!/bin/sh
make -j4 2>&1 | tee build.log
# With default -O3 optimization each G++ process eats 2Gb RAM, so tone optimization down to -O2, and limit make to two jobs
make -j2 2>&1 | tee build.log
[ -f libapplication.so ] || exit 1
exit 0

Binary file not shown.

View File

@@ -1,10 +1,10 @@
$(shell mkdir -p AI debug/AI Scripting debug/Scripting \
$(shell mkdir -p AI Scripting debug/AI debug/Scripting \
out/vcmi/lib out/vcmi/lib/Filesystem out/vcmi/lib/Mapping \
out/vcmi/lib/RMG out/vcmi/server out/vcmi/AI/StupidAI \
out/vcmi/AI/BattleAI out/vcmi/AI/FuzzyLite out/vcmi/AI/VCAI \
out/vcmi/AI/EmptyAI out/vcmi/client out/vcmi/Scripting/ERM)
#$(shell rm -f ../../../obj/local/armeabi/libvcmi.so)
out/vcmi/AI/EmptyAI out/vcmi/Scripting/ERM out/vcmi/client \
out/vcmi/client/BattleInterface out/vcmi/client/UIFramework)
LOCAL_PATH=$(shell dirname $0)
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
@@ -14,61 +14,58 @@ GCC_PREFIX=$(if $(shell which ndk-build | grep 'android-ndk-r8'),arm-linux-andro
SOURCES_LIB=$(wildcard vcmi/lib/*.cpp vcmi/CConsoleHandler.cpp vcmi/CThreadHelper.cpp)
OBJS_LIB=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB))
SOURCES_LIB_FILESYSTEM=$(wildcard vcmi/lib/Filesystem/*.cpp)
OBJS_LIB_FILESYSTEM=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB_FILESYSTEM))
SOURCES_LIB_FILESYSTEM:=$(wildcard vcmi/lib/Filesystem/*.cpp)
OBJS_LIB_FILESYSTEM:=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB_FILESYSTEM))
SOURCES_LIB_MAPPING=$(wildcard vcmi/lib/Mapping/*.cpp)
OBJS_LIB_MAPPING=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB_MAPPING))
SOURCES_LIB_MAPPING:=$(wildcard vcmi/lib/Mapping/*.cpp)
OBJS_LIB_MAPPING:=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB_MAPPING))
SOURCES_LIB_RMG=$(wildcard vcmi/lib/RMG/*.cpp)
OBJS_LIB_RMG=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB_RMG))
SOURCES_LIB_RMG:=$(wildcard vcmi/lib/RMG/*.cpp)
OBJS_LIB_RMG:=$(patsubst %.cpp, out/%.o, $(SOURCES_LIB_RMG))
SOURCES_SERVER=$(wildcard vcmi/server/*.cpp)
OBJS_SERVER=$(patsubst %.cpp, out/%.o, $(SOURCES_SERVER))
SOURCES_SERVER:=$(wildcard vcmi/server/*.cpp)
OBJS_SERVER:=$(patsubst %.cpp, out/%.o, $(SOURCES_SERVER))
SOURCES_CLIENT=$(wildcard vcmi/client/*.cpp vcmi/client/BattleInterface/*.cpp vcmi/client/UIFramework/*.cpp)
OBJS_CLIENT=$(patsubst %.cpp, out/%.o, $(SOURCES_CLIENT))
SOURCES_CLIENT:=$(wildcard vcmi/client/*.cpp vcmi/client/BattleInterface/*.cpp vcmi/client/UIFramework/*.cpp vcmi/*.cpp)
OBJS_CLIENT:=$(patsubst %.cpp, out/%.o, $(SOURCES_CLIENT))
SOURCES_BATTLEAI=$(wildcard vcmi/AI/BattleAI/*.cpp)
OBJS_BATTLEAI=$(patsubst %.cpp, out/%.o, $(SOURCES_BATTLEAI))
SOURCES_BATTLEAI:=$(wildcard vcmi/AI/BattleAI/*.cpp)
OBJS_BATTLEAI:=$(patsubst %.cpp, out/%.o, $(SOURCES_BATTLEAI))
SOURCES_EMPTYAI=$(wildcard vcmi/AI/EmptyAI/*.cpp)
OBJS_EMPTYAI=$(patsubst %.cpp, out/%.o, $(SOURCES_EMPTYAI))
SOURCES_EMPTYAI:=$(wildcard vcmi/AI/EmptyAI/*.cpp)
OBJS_EMPTYAI:=$(patsubst %.cpp, out/%.o, $(SOURCES_EMPTYAI))
SOURCES_FUZZYLITE=$(wildcard vcmi/AI/FuzzyLite/*.cpp)
OBJS_FUZZYLITE=$(patsubst %.cpp, out/%.o, $(SOURCES_FUZZYLITE))
SOURCES_FUZZYLITE:=$(wildcard vcmi/AI/FuzzyLite/*.cpp)
OBJS_FUZZYLITE:=$(patsubst %.cpp, out/%.o, $(SOURCES_FUZZYLITE))
SOURCES_STUPIDAI=$(wildcard vcmi/AI/StupidAI/*.cpp)
OBJS_STUPIDAI=$(patsubst %.cpp, out/%.o, $(SOURCES_STUPIDAI))
SOURCES_STUPIDAI:=$(wildcard vcmi/AI/StupidAI/*.cpp)
OBJS_STUPIDAI:=$(patsubst %.cpp, out/%.o, $(SOURCES_STUPIDAI))
SOURCES_VCAI=$(wildcard vcmi/AI/VCAI/*.cpp)
OBJS_VCAI=$(patsubst %.cpp, out/%.o, $(SOURCES_VCAI))
SOURCES_VCAI:=$(wildcard vcmi/AI/VCAI/*.cpp)
OBJS_VCAI:=$(patsubst %.cpp, out/%.o, $(SOURCES_VCAI))
SOURCES_ERM=$(wildcard vcmi/Scripting/ERM/*.cpp)
OBJS_ERM=$(patsubst %.cpp, out/%.o, $(SOURCES_ERM))
SOURCES_CLIENT=$(wildcard vcmi/client/*.cpp vcmi/CCallback.cpp)
OBJS_CLIENT=$(patsubst %.cpp, out/%.o, $(SOURCES_CLIENT))
SOURCES_ERM:=$(wildcard vcmi/Scripting/ERM/*.cpp)
OBJS_ERM:=$(patsubst %.cpp, out/%.o, $(SOURCES_ERM))
all: AndroidData/binaries.zip libapplication.so
AndroidData/binaries.zip: vcmiserver debug/libvcmi.so AI/libAI.so Scripting/libvcmiERM.so
AndroidData/binaries.zip: vcmiserver libvcmi.so Scripting/libvcmiERM.so AI/libBattleAI.so AI/libEmptyAI.so AI/libStupidAI.so AI/libVCAI.so
rm -f $@
zip -r $@ $^
# With default -O3 optimization each G++ process eats 2Gb RAM, so tone optimization down to -O2, and limit make to two jobs
$(OBJS_SERVER) $(OBJS_LIB) $(OBJS_LIB_FILESYSTEM) $(OBJS_LIB_MAPPING) $(OBJS_LIB_RMG) $(OBJS_BATTLEAI) $(OBJS_EMPTYAI) $(OBJS_FUZZYLITE) $(OBJS_VCAI) $(OBJS_CLIENT) $(OBJS_ERM): out/%.o: %.cpp
../setEnvironment.sh sh -c \
"$(GCC_PREFIX)-g++ \
-c \$$CXXFLAGS -Ivcmi -std=c++11 -Ivcmi/lib \
-DM_DATA_DIR=\\\"/sdcard/app-data/eu.vcmi\\\" \
-c \$$CXXFLAGS -O2 -Ivcmi -std=c++11 -Ivcmi/lib \
-DM_DATA_DIR=\\\".\\\" \
-DM_BIN_DIR=\\\"/data/data/eu.vcmi/files\\\" \
-DM_LIB_DIR=\\\"/data/data/eu.vcmi/files\\\" \
-DWITH_AVCODEC_DECODE_VIDEO2=1 \
-Wstrict-aliasing -Wcast-align -Wpointer-arith -Waddress \
$< -o $@"
# -Werror=strict-aliasing -Werror=cast-align -Werror=pointer-arith -Werror=address
vcmiserver: $(OBJS_SERVER) $(OBJS_LIB) $(OBJS_LIB_FILESYSTEM) $(OBJS_LIB_MAPPING) $(OBJS_LIB_RMG)
vcmiserver: $(OBJS_SERVER) -lvcmi
env BUILD_EXECUTABLE=1 NO_SHARED_LIBS=1 ../setEnvironment.sh sh -c \
"$(GCC_PREFIX)-g++ \
$^ -o $@ \
@@ -89,7 +86,16 @@ LINK_LIB= \
.PHONY: -lvcmi
-lvcmi: libvcmi.so
AI/libAI.so: $(OBJS_BATTLEAI) $(OBJS_EMPTYAI) $(OBJS_FUZZYLITE) $(OBJS_VCAI) -lvcmi
AI/libBattleAI.so: $(OBJS_BATTLEAI) -lvcmi
$(LINK_LIB)
AI/libEmptyAI.so: $(OBJS_EMPTYAI) -lvcmi
$(LINK_LIB)
AI/libStupidAI.so: $(OBJS_STUPID) -lvcmi
$(LINK_LIB)
AI/libVCAI.so: $(OBJS_VCAI) $(OBJS_FUZZYLITE) -lvcmi
$(LINK_LIB)
Scripting/libvcmiERM.so: $(OBJS_ERM) -lvcmi
@@ -99,9 +105,9 @@ libvcmi.so: $(OBJS_LIB) $(OBJS_LIB_FILESYSTEM) $(OBJS_LIB_MAPPING) $(OBJS_LIB_RM
$(LINK_LIB)
libapplication.so: $(OBJS_CLIENT) libvcmi.so
env BUILD_EXECUTABLE=1 ../setEnvironment.sh sh -c \
env ../setEnvironment.sh sh -c \
"$(GCC_PREFIX)-g++ $^ -o $@ \
\$$LDFLAGS -L. -L../../boost/lib/arm-linux-androideabi-4.6 -lboost_filesystem -lboost_iostreams -lboost_system -lboost_thread -lgnustl_static"
\$$LDFLAGS -L. -L../../boost/lib/arm-linux-androideabi-4.6 -lboost_program_options -lboost_filesystem -lboost_iostreams -lboost_system -lboost_thread -lgnustl_static"
clean:
rm -rf out debug *.so vcmiserver* AndroidData/vcmiserver* libapplication.so AI Scripting

View File

@@ -1,16 +1,11 @@
Quick compilation guide:
Download my GIT repo from https://github.com/pelya/commandergenius,
then install Android SDK 3.1 from http://developer.android.com,
NDK r5 from http://crystax.net/ and "ant" tool, then launch commands
then install Android SDK and NDK from http://developer.android.com,
ANT, patch and Subversion tools, then launch commands
android update project -p project
rm project/jni/application/src
ln -s vcmi project/jni/application/src
echo > project/jni/application/vcmi/libvcmi.so
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,
then launch build.sh - it will fail at link stage, remove dummy libvcmi.so from
project/jni/application/vcmi/vcmi and from project/obj/local/armeabi, launch "make" from directory
project/jni/application/vcmi, then launch build.sh again.
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
To run it you should have complete installation of Heroes 3: Wake of Gods
on your SD card, in the directory Android/data/eu.vcmi/files

View File

@@ -1 +0,0 @@
../../../../../vcmi

View File

@@ -1,113 +1,39 @@
Index: client/CVideoHandler.h
===================================================================
--- client/CVideoHandler.h (Revision 3221)
+++ client/CVideoHandler.h (Arbeitskopie)
@@ -236,6 +236,7 @@
#include <libswscale/swscale.h>
}
+
class CVideoPlayer : public IMainVideoPlayer
{
private:
@@ -247,7 +248,7 @@
struct SwsContext *sws;
unsigned char* buffer;
- AVIOContext * context;
+ ByteIOContext * context;
// Destination. Either overlay or dest.
SDL_Overlay *overlay;
Index: rpm/vcmi.spec
===================================================================
--- rpm/vcmi.spec (Revision 3221)
+++ rpm/vcmi.spec (Arbeitskopie)
@@ -1,19 +1,19 @@
-Summary: VCMI is an open-source project aiming to reimplement the entire H3:WoG game engine, giving it new and extended possibilities
+Summary: VCMI is an open-source project aiming to reimplement HMM3:WoG game engine, giving it new and extended possibilities.
Name: vcmi
-Version: 0.9.1
+Version: 0.9
Release: 2%{?dist}
License: GPLv2+
+Group: Amusements/Games
# The source for this package was pulled from upstream's vcs. Use the
# following commands to generate the tarball:
-# svn export -r HEAD https://vcmi.svn.sourceforge.net/svnroot/vcmi/tags/0.91 vcmi-0.9.1-2
-# tar -cJf vcmi-0.9.1-2.tar.xz vcmi-0.9.1-2
-Source: vcmi-0.9.1-2.tar.xz
+# svn export -r HEAD https://vcmi.svn.sourceforge.net/svnroot/vcmi/tags/0.9 vcmi-0.9-2
+# tar -cJf vcmi-0.9-2.tar.xz vcmi-0.9-2
+Source: vcmi-0.9-2.tar.xz
URL: http://forum.vcmi.eu/portal.php
-BuildRequires: cmake
BuildRequires: gcc-c++ >= 4.7.2
-BuildRequires: SDL-devel
+BuildRequires: SDL-devel
BuildRequires: SDL_image-devel
BuildRequires: SDL_ttf-devel
BuildRequires: SDL_mixer-devel >= 1.2.8
@@ -29,15 +29,11 @@
BuildRequires: ffmpeg-libs
%description
-The purpose of VCMI project is to rewrite the entire H3:WoG engine from scratch,
-giving it new and extended possibilities.
+The purpose of VCMI project is to rewrite entire HOMM 3: WoG engine from scratch, giving it new and extended possibilities. We hope to support mods and new towns already made by fans but abandoned because of game code limitations.
-VCMI is fan-made open-source project in progress. We already allow support for
-maps of any sizes, higher resolutions, extended engine limits, modding support
-for custom towns, artifacts, heroes, etc...
+VCMI is fan-made open-source project in progress. We already allow support for maps of any sizes, higher resolutions and extended engine limits. However, although working, the game is not finished. There are still many features and functionalities to add, both old and brand new.
-As yet VCMI is not a standalone program, it uses Wake of Gods files and
-graphics. You need to install WoG before running VCMI.
+As yet VCMI is not standalone program, it uses Wake of Gods files and graphics. You need to install WoG before running VCMI.
%prep
%setup -q -n %{name}-%{version}-2
@@ -47,13 +43,13 @@
make %{?_smp_mflags}
%install
+rm -rf %{buildroot}
make DESTDIR=%{buildroot} install
%files
-%doc README COPYING AUTHORS ChangeLog
+%doc README README.linux COPYING AUTHORS ChangeLog
%{_bindir}/vcmiclient
%{_bindir}/vcmiserver
-%{_bindir}/vcmibuilder
%{_libdir}/%{name}/*
%{_datadir}/%{name}/*
@@ -61,12 +57,6 @@
%{_datadir}/icons/*
%changelog
-* Fri Feb 01 2013 VCMI - 0.9.1-2
-- New upstream release
-
-* Wed Jan 30 2013 VCMI - 0.9.1-1
-- Development release
-
* Sun Oct 21 2012 VCMI - 0.9-2
- Second release of 0.9, Fixed battles crash
Index: lib/VCMIDirs.h
===================================================================
--- lib/VCMIDirs.h (Revision 3221)
+++ lib/VCMIDirs.h (Arbeitskopie)
@@ -30,7 +30,7 @@
--- lib/VCMIDirs.h (revision 3221)
+++ lib/VCMIDirs.h (working copy)
@@ -29,7 +29,7 @@
#else
try {
#ifdef ANDROID
- UserPath = DATA_DIR;
+ UserPath = GameConstants::DATA_DIR;
#else
// Find vcmi user directory and create it if necessary
std::string home_dir = ".";
#elif defined(__APPLE__)
// This is Cocoa code that should be normally used to get path to Application Support folder but can't use it here for now...
// NSArray* urls = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask];
Index: lib/vcmi_endian.h
===================================================================
--- lib/vcmi_endian.h (revision 3221)
+++ lib/vcmi_endian.h (working copy)
@@ -19,7 +19,7 @@
* memory. On big endian machines, the value will be byteswapped.
*/
-#if defined(linux) && (defined(sparc) || defined(__arm__))
+#if defined(ANDROID) || defined(linux) && (defined(sparc) || defined(__arm__))
/* SPARC does not support unaligned memory access. Let gcc know when
* to emit the right code. */
struct unaligned_Uint16 { ui16 val __attribute__(( packed )); };
Index: client/CMT.cpp
===================================================================
--- client/CMT.cpp (revision 3221)
+++ client/CMT.cpp (working copy)
@@ -177,7 +177,7 @@
#ifdef _WIN32
int _tmain(int argc, _TCHAR* argv[])
-#elif defined(__APPLE__)
+#elif defined(__APPLE__) || defined(ANDROID)
int SDL_main(int argc, char *argv[])
#else
int main(int argc, char** argv)