Skip to content

Commit 929820f

Browse files
committed
x86 and MIPS arch support
1 parent 28145f0 commit 929820f

File tree

5 files changed

+241
-70
lines changed

5 files changed

+241
-70
lines changed

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ There are no sources and no patches - everything is done with magical build scri
99
just run build.sh and enjoy.
1010
Don't forget to strip them, because they are huge with debug info included.
1111

12-
Only armeabi and armeabi-v7a architectures are supported at the moment.
13-
14-
If yuou need libintl, you may download it here:
12+
If you need libintl, you may download it here:
1513
https://github.com/pelya/commandergenius/tree/sdl_android/project/jni/intl

build.sh

Lines changed: 76 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ NDK=`which ndk-build`
1111
NDK=`dirname $NDK`
1212
NDK=`readlink -f $NDK`
1313

14-
for ARCH in armeabi armeabi-v7a; do
14+
for ARCH in armeabi armeabi-v7a x86 mips; do
1515

1616
cd $BUILDDIR
1717
mkdir -p $ARCH
@@ -25,7 +25,7 @@ cd android_support
2525
ln -sf $NDK/sources/android/support jni
2626

2727
ndk-build -j$NCPU APP_ABI=$ARCH || exit 1
28-
ln -sf android_support/obj/local/$ARCH/libandroid_support.a ../
28+
cp -f obj/local/$ARCH/libandroid_support.a ../
2929

3030
} || exit 1
3131

@@ -35,81 +35,91 @@ cd $BUILDDIR/$ARCH
3535

3636
[ -e libiconv.so ] || {
3737

38-
[ -d libiconv-1.14 ] || curl http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz | tar xvz || exit 1
38+
[ -d libiconv-1.14 ] || curl http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz | tar xvz || exit 1
3939

40-
cd libiconv-1.14
40+
cd libiconv-1.14
4141

42-
cp -f $BUILDDIR/config.sub build-aux/
43-
cp -f $BUILDDIR/config.guess build-aux/
44-
cp -f $BUILDDIR/config.sub libcharset/build-aux/
45-
cp -f $BUILDDIR/config.guess libcharset/build-aux/
42+
cp -f $BUILDDIR/config.sub build-aux/
43+
cp -f $BUILDDIR/config.guess build-aux/
44+
cp -f $BUILDDIR/config.sub libcharset/build-aux/
45+
cp -f $BUILDDIR/config.guess libcharset/build-aux/
4646

47-
env CFLAGS="-I$NDK/sources/android/support/include" \
48-
LDFLAGS="-L$BUILDDIR/$ARCH -landroid_support" \
49-
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
50-
./configure \
51-
--host=arm-linux-androideabi \
52-
--prefix=`pwd`/.. \
53-
--enable-static --enable-shared \
54-
|| exit 1
47+
env CFLAGS="-I$NDK/sources/android/support/include" \
48+
LDFLAGS="-L$BUILDDIR/$ARCH -landroid_support" \
49+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
50+
./configure \
51+
--host=arm-linux-androideabi \
52+
--prefix=`pwd`/.. \
53+
--enable-static --enable-shared \
54+
|| exit 1
5555

56-
env PATH=`pwd`:$PATH \
57-
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
58-
make -j$NCPU V=1 || exit 1
56+
env PATH=`pwd`:$PATH \
57+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
58+
make -j$NCPU V=1 || exit 1
5959

60-
env PATH=`pwd`:$PATH \
61-
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
62-
make V=1 install || exit 1
60+
env PATH=`pwd`:$PATH \
61+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
62+
make V=1 install || exit 1
6363

64-
ln -sf lib/libiconv.so ../
65-
ln -sf lib/libcharset.so ../
64+
cd ..
65+
66+
for f in libiconv libcharset; do
67+
cp -f lib/$f.so ./
68+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
69+
sh -c '$STRIP'" $f.so"
70+
done
6671

6772
} || exit 1
6873

6974
cd $BUILDDIR/$ARCH
7075

71-
# =========== libicu.so ===========
72-
73-
[ -e libicudata.so ] || {
74-
75-
[ -d icu ] || curl http://download.icu-project.org/files/icu4c/52.1/icu4c-52_1-src.tgz | tar xvz || exit 1
76-
77-
cd icu/source
78-
79-
cp -f $BUILDDIR/config.sub .
80-
cp -f $BUILDDIR/config.guess .
81-
82-
[ -d cross ] || {
83-
mkdir cross
84-
cd cross
85-
../configure || exit 1
86-
make -j$NCPU VERBOSE=1 || exit 1
87-
cd ..
88-
} || exit 1
89-
90-
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
91-
LDFLAGS="-frtti -fexceptions" \
92-
LIBS="-L$BUILDDIR/$ARCH -landroid_support -lgnustl_static -lstdc++" \
93-
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
94-
./configure \
95-
--host=arm-linux-androideabi \
96-
--prefix=`pwd`/../.. \
97-
--with-cross-build=`pwd`/cross \
98-
--enable-static --enable-shared \
99-
|| exit 1
100-
101-
env PATH=`pwd`:$PATH \
102-
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
103-
make -j$NCPU VERBOSE=1 || exit 1
104-
105-
env PATH=`pwd`:$PATH \
106-
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
107-
make V=1 install || exit 1
108-
109-
for f in libicudata libicui18n libicuio libicule libiculx libicutest libicutu libicuuc; do
110-
ln -sf lib/$f.so ../../
111-
ln -sf lib/$f.a ../../
112-
done
76+
# =========== libicuXX.so ===========
77+
78+
[ -e libicuuc.so ] || {
79+
80+
[ -d icu ] || curl http://download.icu-project.org/files/icu4c/52.1/icu4c-52_1-src.tgz | tar xvz || exit 1
81+
82+
cd icu/source
83+
84+
cp -f $BUILDDIR/config.sub .
85+
cp -f $BUILDDIR/config.guess .
86+
87+
[ -d cross ] || {
88+
mkdir cross
89+
cd cross
90+
../configure || exit 1
91+
make -j$NCPU VERBOSE=1 || exit 1
92+
cd ..
93+
} || exit 1
94+
95+
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
96+
LDFLAGS="-frtti -fexceptions" \
97+
LIBS="-L$BUILDDIR/$ARCH -landroid_support -lgnustl_static -lstdc++" \
98+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
99+
./configure \
100+
--host=arm-linux-androideabi \
101+
--prefix=`pwd`/../../ \
102+
--with-cross-build=`pwd`/cross \
103+
--enable-static --enable-shared \
104+
--with-data-packaging=archive \
105+
|| exit 1
106+
107+
env PATH=`pwd`:$PATH \
108+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
109+
make -j$NCPU VERBOSE=1 || exit 1
110+
111+
env PATH=`pwd`:$PATH \
112+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
113+
make V=1 install || exit 1
114+
115+
#cp -f -a share ../../
116+
117+
for f in libicudata libicui18n libicuio libicule libiculx libicutu libicuuc; do
118+
cp -f lib/$f.so ../../
119+
cp -f lib/$f.a ../../
120+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
121+
sh -c '$STRIP'" ../../$f.so"
122+
done
113123

114124
} || exit 1
115125

setCrossEnvironment-armeabi-v7a.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ if which realpath > /dev/null ; then
3030
else
3131
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
3232
fi
33-
#ARCH=armeabi
3433
ARCH=armeabi-v7a
3534

3635
CFLAGS="\

setCrossEnvironment-mips.sh

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#!/bin/sh
2+
3+
IFS='
4+
'
5+
6+
MYARCH=linux-x86
7+
if uname -s | grep -i "linux" > /dev/null ; then
8+
MYARCH=linux-x86
9+
fi
10+
if uname -s | grep -i "darwin" > /dev/null ; then
11+
MYARCH=darwin-x86
12+
fi
13+
if uname -s | grep -i "windows" > /dev/null ; then
14+
MYARCH=windows-x86
15+
fi
16+
17+
NDK=`which ndk-build`
18+
NDK=`dirname $NDK`
19+
NDK=`readlink -f $NDK`
20+
21+
grep "64.bit" "$NDK/RELEASE.TXT" >/dev/null 2>&1 && MYARCH="${MYARCH}_64"
22+
23+
[ -z "$NDK" ] && { echo "You need Andorid NDK r8 or newer installed to run this script" ; exit 1 ; }
24+
GCCPREFIX=mipsel-linux-android
25+
GCCVER=4.6
26+
PLATFORMVER=android-14
27+
LOCAL_PATH=`dirname $0`
28+
if which realpath > /dev/null ; then
29+
LOCAL_PATH=`realpath $LOCAL_PATH`
30+
else
31+
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
32+
fi
33+
ARCH=mips
34+
35+
CFLAGS="\
36+
-fpic -fno-strict-aliasing -finline-functions -ffunction-sections \
37+
-funwind-tables -fmessage-length=0 -fno-inline-functions-called-once \
38+
-fgcse-after-reload -frerun-cse-after-loop -frename-registers \
39+
-no-canonical-prefixes -O2 -g -DNDEBUG -fomit-frame-pointer \
40+
-funswitch-loops -finline-limit=300 \
41+
-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \
42+
-isystem$NDK/platforms/$PLATFORMVER/arch-mips/usr/include \
43+
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \
44+
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \
45+
$CFLAGS"
46+
47+
48+
UNRESOLVED="-Wl,--no-undefined"
49+
SHARED="-Wl,--gc-sections -Wl,-z,nocopyreloc"
50+
if [ -n "$BUILD_LIBRARY" ]; then
51+
[ -z "$SHARED_LIBRARY_NAME" ] && SHARED_LIBRARY_NAME=libapplication.so
52+
SHARED="-shared -Wl,-soname,$SHARED_LIBRARY_NAME"
53+
fi
54+
if [ -n "$ALLOW_UNRESOLVED_SYMBOLS" ]; then
55+
UNRESOLVED=
56+
fi
57+
58+
LDFLAGS="\
59+
$SHARED \
60+
--sysroot=$NDK/platforms/$PLATFORMVER/arch-mips \
61+
-L$NDK/platforms/$PLATFORMVER/arch-mips/usr/lib \
62+
-lc -lm -ldl -lz \
63+
-L$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH \
64+
-lgnustl_static \
65+
-no-canonical-prefixes $UNRESOLVED -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now \
66+
-lsupc++ \
67+
$LDFLAGS"
68+
69+
env PATH=$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \
70+
CFLAGS="$CFLAGS" \
71+
CXXFLAGS="$CXXFLAGS $CFLAGS" \
72+
LDFLAGS="$LDFLAGS" \
73+
CC="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc" \
74+
CXX="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \
75+
RANLIB="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ranlib" \
76+
LD="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ld" \
77+
AR="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ar" \
78+
CPP="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp $CFLAGS" \
79+
CXXCPP="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp -x c++ $CFLAGS" \
80+
NM="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-nm" \
81+
AS="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \
82+
STRIP="$NDK/toolchains/$GCCPREFIX-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-strip" \
83+
"$@"

setCrossEnvironment-x86.sh

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/bin/sh
2+
3+
IFS='
4+
'
5+
6+
MYARCH=linux-x86
7+
if uname -s | grep -i "linux" > /dev/null ; then
8+
MYARCH=linux-x86
9+
fi
10+
if uname -s | grep -i "darwin" > /dev/null ; then
11+
MYARCH=darwin-x86
12+
fi
13+
if uname -s | grep -i "windows" > /dev/null ; then
14+
MYARCH=windows-x86
15+
fi
16+
17+
NDK=`which ndk-build`
18+
NDK=`dirname $NDK`
19+
NDK=`readlink -f $NDK`
20+
21+
grep "64.bit" "$NDK/RELEASE.TXT" >/dev/null 2>&1 && MYARCH="${MYARCH}_64"
22+
23+
[ -z "$NDK" ] && { echo "You need Andorid NDK r8 or newer installed to run this script" ; exit 1 ; }
24+
GCCPREFIX=i686-linux-android
25+
GCCVER=4.6
26+
PLATFORMVER=android-14
27+
LOCAL_PATH=`dirname $0`
28+
if which realpath > /dev/null ; then
29+
LOCAL_PATH=`realpath $LOCAL_PATH`
30+
else
31+
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
32+
fi
33+
ARCH=x86
34+
35+
CFLAGS="\
36+
-ffunction-sections -funwind-tables -no-canonical-prefixes \
37+
-fstack-protector -O2 -g -DNDEBUG \
38+
-fomit-frame-pointer -fstrict-aliasing -funswitch-loops \
39+
-finline-limit=300 \
40+
-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \
41+
-isystem$NDK/platforms/$PLATFORMVER/arch-x86/usr/include \
42+
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \
43+
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \
44+
$CFLAGS"
45+
46+
UNRESOLVED="-Wl,--no-undefined"
47+
SHARED="-Wl,--gc-sections -Wl,-z,nocopyreloc"
48+
if [ -n "$BUILD_LIBRARY" ]; then
49+
[ -z "$SHARED_LIBRARY_NAME" ] && SHARED_LIBRARY_NAME=libapplication.so
50+
SHARED="-shared -Wl,-soname,$SHARED_LIBRARY_NAME"
51+
fi
52+
if [ -n "$ALLOW_UNRESOLVED_SYMBOLS" ]; then
53+
UNRESOLVED=
54+
fi
55+
56+
LDFLAGS="\
57+
$SHARED \
58+
--sysroot=$NDK/platforms/$PLATFORMVER/arch-x86 \
59+
-L$NDK/platforms/$PLATFORMVER/arch-x86/usr/lib \
60+
-lc -lm -ldl -lz \
61+
-L$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH \
62+
-lgnustl_static \
63+
-no-canonical-prefixes $UNRESOLVED -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now \
64+
-lsupc++ \
65+
$LDFLAGS"
66+
67+
env PATH=$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \
68+
CFLAGS="$CFLAGS" \
69+
CXXFLAGS="$CXXFLAGS $CFLAGS" \
70+
LDFLAGS="$LDFLAGS" \
71+
CC="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc" \
72+
CXX="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \
73+
RANLIB="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ranlib" \
74+
LD="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ld" \
75+
AR="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ar" \
76+
CPP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp $CFLAGS" \
77+
CXXCPP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp -x c++ $CFLAGS" \
78+
NM="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-nm" \
79+
AS="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \
80+
STRIP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-strip" \
81+
"$@"

0 commit comments

Comments
 (0)