summaryrefslogtreecommitdiffstats
path: root/crawl-ref/AndroidBuild.sh
blob: af687962a66ba01cd5696e7e60a2e294f203d57a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/bin/bash

########################################################################
# get all (ALL!) of the environment variables set properly
IFS='
'
# host arch
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

# where the NDK lives
NDK=`which ndk-build`
NDK=`dirname $NDK`

# are we using crystax?
#CRYSTAX=1

# GCC & toolchain
GCCPREFIX=arm-linux-androideabi
GCCVER=4.6.3
PLATFORMVER=android-14
TOOLCHAIN_DIR=$NDK/custom-toolchain-14
if [ ! -d "$TOOLCHAIN_DIR" ]; then
	echo "$NDK/build/tools/make-standalone-toolchain.sh --platform=$PLATFORMVER --install-dir=$TOOLCHAIN_DIR"
	$NDK/build/tools/make-standalone-toolchain.sh --platform=$PLATFORMVER --install-dir=$TOOLCHAIN_DIR
fi

SYSROOT=$TOOLCHAIN_DIR/sysroot

# where we are
LOCAL_PATH=`dirname $0`/..
LOCAL_PATH=`cd $LOCAL_PATH && pwd`

# all libraries that are available
APP_MODULES=`grep 'APP_MODULES [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@' | sed 's/sdl_main//;s/stdout-test//;s/application//;s/stlport//'`
# static libraries that are available
APP_AVAILABLE_STATIC_LIBS=`grep 'APP_AVAILABLE_STATIC_LIBS [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@'`
# shared libraries we're going to use
APP_SHARED_LIBS=$(
echo $APP_MODULES | xargs -n 1 echo | while read LIB ; do
	STATIC=`echo $APP_AVAILABLE_STATIC_LIBS application sdl_main stdout-test | grep "\\\\b$LIB\\\\b"`
	if [ -n "$STATIC" ] ; then true
	else
		echo $LIB
	fi
done
)
# static libraries we're going to use
APP_STATIC_LIBS=$(
echo $APP_MODULES | xargs -n 1 echo | while read LIB ; do
	STATIC=`echo $APP_AVAILABLE_STATIC_LIBS application sdl_main stdout-test | grep "\\\\b$LIB\\\\b"`
	if [ -n "$STATIC" ] ; then
		echo $LIB
	fi
done
)

# libraries that have a missing "include" directory (including some CrystaX integration)
MISSING_INCLUDE="-isystem$LOCAL_PATH/../sqlite  -isystem$NDK/sources/crystax/include"
MISSING_LIB=

# tell tools what the final shared library will be called
SHARED="-shared -Wl,-soname,libapplication.so"
if [ -n "$BUILD_EXECUTABLE" ]; then
	SHARED=
fi
if [ -n "$NO_SHARED_LIBS" ]; then
	APP_SHARED_LIBS=
fi

# CFLAGS
CFLAGS="\
-fexceptions -frtti \
-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 \
-isystem$SYSROOT/usr/include -Wa,--noexecstack \
-DANDROID \
-DNDEBUG -O2 -g \
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/include \
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include \
-isystem$LOCAL_PATH/../sdl-1.2/include \
`echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-isystem$LOCAL_PATH/../\1/include@g\"` \
$MISSING_INCLUDE"

# LDFLAGS
LDFLAGS="\
-fexceptions -frtti $SHARED \
--sysroot=$NDK/platforms/$PLATFORMVER/arch-arm \
-Wl,-rpath-link=$SYSROOT/usr/lib \
-Wl,--no-undefined -Wl,-z,noexecstack \
"

# LIBS
LIBS="\
`[ ! -z \"$CRYSTAX\"  ] && echo '-lcrystax_static'` \
`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/armeabi/lib\1.so@g\"` \
`echo $APP_STATIC_LIBS | sed 's/\([-a-zA-Z0-9_.]*\)/-l\1/g'` \
$SYSROOT/usr/lib/libc.so \
$SYSROOT/usr/lib/libm.so \
$SYSROOT/usr/lib/libGLESv1_CM.so \
$SYSROOT/usr/lib/libdl.so \
$SYSROOT/usr/lib/liblog.so \
$SYSROOT/usr/lib/libz.so \
-L$NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/4.6.3 \
-L$LOCAL_PATH/../../obj/local/armeabi \
$MISSING_LIB"

# set environment for a command
function setEnv {
env PATH=$TOOLCHAIN_DIR/bin:$LOCAL_PATH:$PATH \
CFLAGS="$CFLAGS" \
CXXFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS" \
LIBS="$LIBS" \
CC="$TOOLCHAIN_DIR/bin/$GCCPREFIX-gcc" \
CXX="$TOOLCHAIN_DIR/bin/$GCCPREFIX-g++" \
RANLIB="$TOOLCHAIN_DIR/bin/$GCCPREFIX-ranlib" \
LD="$TOOLCHAIN_DIR/bin/$GCCPREFIX-g++" \
AR="$TOOLCHAIN_DIR/bin/$GCCPREFIX-ar" \
CPP="$TOOLCHAIN_DIR/bin/$GCCPREFIX-cpp $CFLAGS" \
NM="$TOOLCHAIN_DIR/bin/$GCCPREFIX-nm" \
AS="$TOOLCHAIN_DIR/bin/$GCCPREFIX-as" \
STRIP="$TOOLCHAIN_DIR/bin/$GCCPREFIX-strip" \
"$@"
}

########################################################################
# actually do the compile(!)

CRAWL_PATH=`dirname $0`/source
CRAWL_PATH=`cd $CRAWL_PATH && pwd`

# remove the final artefact
rm -f libapplication.so

# these are probably right
PREFIX_P="/sdcard/Android/data/org.develz.crawl/files"
DATADIR_P="."
SAVES_P="."
GLES=1

# "make install"
cd $CRAWL_PATH && setEnv nice make -j2 install TILES=1 TOUCH_UI=1 CROSSHOST=arm-linux-androideabi ANDROID=1  prefix=$PREFIX_P DATADIR=$DATADIR_P SAVEDIR=$SAVES_P GLES=$GLES COPY_FONTS=1
cd $CRAWL_PATH/..

if [ -e bin/crawl ]; then
	# crawl compiles to bin/crawl - put the lib in the right place
	cp -f bin/crawl libapplication.so

	# compile all the tiles data into a zip archive for the .apk
	cd AndroidData && rm -f crawl-data.zip* && zip -q -r crawl-data.zip * && cd -

	# put all the android icons in the right places to be picked up
	for RES in ldpi mdpi hdpi xhdpi; do
		for ICON in icon; do
			if [ -f source/dat/tiles/android/$ICON-$RES.png ]; then
				mkdir -p ../../../res/drawable-$RES
				cp source/dat/tiles/android/$ICON-$RES.png ../../../res/drawable-$RES/$ICON.png
			fi
		done
	done

	# symlink a default icon
	ln -s -f source/dat/tiles/stone_soup_icon-512x512.png icon.png

  # fixup version string
  VER=$(sed '/LONG/!d; s/^.*"\(.*\)"$/\1/' < source/build.h)
  echo `pwd`
  sed -i "/android:versionName/s/GEN_FROM_HEADER/$VER/" $LOCAL_PATH/../../AndroidManifest.xml
fi