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
|