Skip to content

Commit fedfaa6

Browse files
committed
NDK r16 support
1 parent 134bf1b commit fedfaa6

7 files changed

+321
-309
lines changed

build.sh

Lines changed: 86 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set -x
44

55
export BUILDDIR=`pwd`
66

7-
NCPU=4
7+
NCPU=8
88
uname -s | grep -i "linux" && NCPU=`cat /proc/cpuinfo | grep -c -i processor`
99

1010
NDK=`which ndk-build`
@@ -17,7 +17,7 @@ for ARCH in armeabi armeabi-v7a arm64-v8a x86 x86_64; do
1717

1818
cd $BUILDDIR
1919

20-
GCCPREFIX="`env CLANG= ./setCrossEnvironment-$ARCH.sh sh -c 'basename $CC | sed s/-gcc//'`"
20+
GCCPREFIX="`./setCrossEnvironment-$ARCH.sh sh -c 'basename $STRIP | sed s/-strip//'`"
2121
echo "ARCH $ARCH GCCPREFIX $GCCPREFIX"
2222

2323
mkdir -p $ARCH
@@ -53,7 +53,9 @@ cd $BUILDDIR/$ARCH
5353
cp -f $BUILDDIR/config.sub libcharset/build-aux/
5454
cp -f $BUILDDIR/config.guess libcharset/build-aux/
5555

56-
env CFLAGS="-I$NDK/sources/android/support/include" \
56+
sed -i 's/MB_CUR_MAX/1/g' lib/loop_wchar.h
57+
58+
env CFLAGS="-I$NDK/sources/android/support/include -D_IO_getc=getc" \
5759
LDFLAGS="-L$BUILDDIR/$ARCH -landroid_support" \
5860
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
5961
./configure \
@@ -114,19 +116,29 @@ cd $BUILDDIR/$ARCH
114116
cp -f $BUILDDIR/config.sub .
115117
cp -f $BUILDDIR/config.guess .
116118

119+
sed -i 's/ld_shlibs=no/ld_shlibs=yes/g' ./configure
120+
117121
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions -I$BUILDDIR/$ARCH/include" \
118122
LDFLAGS="-frtti -fexceptions -L$BUILDDIR/$ARCH/lib" \
119-
LIBS="-L$BUILDDIR/$ARCH -landroid_support -lgnustl_static -lstdc++ -latomic" \
123+
LIBS="-L$BUILDDIR/$ARCH -landroid_support" \
120124
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
121125
./configure \
122126
--host=$GCCPREFIX \
123127
--prefix=`pwd`/../ \
124-
--enable-static --disable-shared \
128+
--enable-static --enable-shared \
125129
--with-glib=no --with-gobject=no \
126130
--with-cairo=no --with-fontconfig=no \
127131
--with-icu=no --with-freetype=no \
128132
|| exit 1
129133

134+
env PATH=`pwd`:$PATH \
135+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
136+
make -j$NCPU V=1 || echo "Crappy libtool cannot link anything"
137+
138+
env PATH=`pwd`:$PATH \
139+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
140+
sh -c '$LD $CFLAGS $LDFLAGS -shared src/.libs/*.o src/hb-ucdn/.libs/*.o -o src/.libs/libharfbuzz.so' || exit 1
141+
130142
env PATH=`pwd`:$PATH \
131143
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
132144
make -j$NCPU V=1 || exit 1
@@ -135,6 +147,10 @@ cd $BUILDDIR/$ARCH
135147
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
136148
make V=1 install || exit 1
137149

150+
env PATH=`pwd`:$PATH \
151+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
152+
sh -c '$AR rcs ../lib/libharfbuzz.a src/.libs/*.o src/hb-ucdn/.libs/*.o' || exit 1
153+
138154
cd ..
139155
cp -f lib/libharfbuzz.a ./
140156
}
@@ -165,9 +181,9 @@ cd $BUILDDIR/$ARCH
165181
sed -i "s@LD_SONAME *=.*@LD_SONAME =@g" config/mh-linux
166182
sed -i "s%ln -s *%cp -f \$(dir \$@)/%g" config/mh-linux
167183

168-
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions -include $BUILDDIR/ndk-r15-64-bit-fix.h" \
184+
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
169185
LDFLAGS="-frtti -fexceptions -L$BUILDDIR/$ARCH/lib" \
170-
LIBS="-L$BUILDDIR/$ARCH -landroid_support -lgnustl_static -lstdc++ -latomic" \
186+
LIBS="-L$BUILDDIR/$ARCH -landroid_support `$BUILDDIR/setCrossEnvironment-$ARCH.sh sh -c 'echo $LDFLAGS'`" \
171187
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
172188
./configure \
173189
--host=$GCCPREFIX \
@@ -214,10 +230,12 @@ cd $BUILDDIR/$ARCH
214230
cp -f $BUILDDIR/config.sub .
215231
cp -f $BUILDDIR/config.guess .
216232

233+
sed -i 's/ld_shlibs=no/ld_shlibs=yes/g' ./configure
234+
217235
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
218236
CXXFLAGS="-std=c++11" \
219237
LDFLAGS="-frtti -fexceptions" \
220-
LIBS="-L$BUILDDIR/$ARCH -landroid_support -lgnustl_static -lstdc++ -latomic" \
238+
LIBS="-L$BUILDDIR/$ARCH -landroid_support" \
221239
HARFBUZZ_CFLAGS="-I$BUILDDIR/$ARCH/include/harfbuzz" \
222240
HARFBUZZ_LIBS="-L$BUILDDIR/$ARCH/lib -lharfbuzz" \
223241
ICU_CFLAGS="-I$BUILDDIR/$ARCH/include" \
@@ -226,9 +244,66 @@ cd $BUILDDIR/$ARCH
226244
./configure \
227245
--host=$GCCPREFIX \
228246
--prefix=`pwd`/../ \
229-
--enable-static --disable-shared \
247+
--enable-static --enable-shared \
230248
|| exit 1
231249

250+
env PATH=`pwd`:$PATH \
251+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
252+
make V=1 || \
253+
env PATH=`pwd`:$PATH \
254+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
255+
sh -c '$LD $CFLAGS -shared src/.libs/*.o -o src/.libs/libicu-le-hb.so.0.0.0 -L../lib -lharfbuzz -licuuc $LDFLAGS' || exit 1
256+
257+
env PATH=`pwd`:$PATH \
258+
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
259+
sh -c '$AR rcs ../lib/libicu-le-hb.a src/.libs/*.o' || exit 1
260+
261+
cat > src/libicu-le-hb.la <<EOF
262+
# libicu-le-hb.so - a libtool library file
263+
# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1
264+
#
265+
# Please DO NOT delete this file!
266+
# It is necessary for linking the library.
267+
268+
# The name that we can dlopen(3).
269+
dlname='libicu-le-hb.so.0'
270+
271+
# Names of this library.
272+
library_names='libicu-le-hb.so.0.0.0 libicu-le-hb.so.0 libicu-le-hb.so'
273+
274+
# The name of the static archive.
275+
old_library=''
276+
277+
# Linker flags that can not go in dependency_libs.
278+
inherited_linker_flags=''
279+
280+
# Libraries that this one depends upon.
281+
dependency_libs=''
282+
283+
# Names of additional weak libraries provided by this library
284+
weak_library_names=''
285+
286+
# Version information for libharfbuzz.
287+
current=0
288+
age=0
289+
revision=0
290+
291+
# Is this an already installed library?
292+
installed=no
293+
294+
# Should we warn about portability when linking against -modules?
295+
shouldnotlink=no
296+
297+
# Files to dlopen/dlpreopen
298+
dlopen=''
299+
dlpreopen=''
300+
301+
# Directory that this library needs to be installed in:
302+
libdir='/usr/lib'
303+
EOF
304+
305+
cp -f src/libicu-le-hb.la src/.libs/libicu-le-hb.lai
306+
232307
env PATH=`pwd`:$PATH \
233308
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
234309
make V=1 || exit 1
@@ -249,9 +324,9 @@ cd $BUILDDIR/$ARCH
249324

250325
cd icu/source
251326

252-
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions -include $BUILDDIR/ndk-r15-64-bit-fix.h" \
327+
env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
253328
LDFLAGS="-frtti -fexceptions -L$BUILDDIR/$ARCH/lib" \
254-
LIBS="-L$BUILDDIR/$ARCH -landroid_support -lgnustl_static -lstdc++ -latomic" \
329+
LIBS="-L$BUILDDIR/$ARCH -landroid_support `$BUILDDIR/setCrossEnvironment-$ARCH.sh sh -c 'echo $LDFLAGS'`" \
255330
ICULEHB_CFLAGS="-I$BUILDDIR/$ARCH/include/icu-le-hb" \
256331
ICULEHB_LIBS="-licu-le-hb" \
257332
$BUILDDIR/setCrossEnvironment-$ARCH.sh \

ndk-r15-64-bit-fix.h

Lines changed: 0 additions & 1 deletion
This file was deleted.

setCrossEnvironment-arm64-v8a.sh

Lines changed: 43 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -31,73 +31,57 @@ fi
3131
ARCH=arm64-v8a
3232

3333

34-
APP_MODULES=
35-
APP_SHARED_LIBS=
36-
MISSING_INCLUDE=
37-
MISSING_LIB=
38-
39-
CFLAGS="\
40-
-fpic -ffunction-sections -funwind-tables -fstack-protector-strong \
41-
-no-canonical-prefixes \
42-
-O2 -g -DNDEBUG \
43-
-fomit-frame-pointer -fno-strict-aliasing -finline-limit=300 \
44-
-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \
45-
-isystem$NDK/platforms/$PLATFORMVER/arch-arm64/usr/include \
46-
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$NDK_TOOLCHAIN_VERSION/include \
47-
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$NDK_TOOLCHAIN_VERSION/libs/$ARCH/include \
48-
-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$NDK_TOOLCHAIN_VERSION/include/backward \
49-
-isystem$LOCAL_PATH/../sdl-1.2/include \
50-
`echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-isystem$LOCAL_PATH/../\1/include@g\"` \
51-
$MISSING_INCLUDE $CFLAGS"
52-
53-
UNRESOLVED="-Wl,--no-undefined"
54-
if [ -n "$BUILD_EXECUTABLE" ]; then
55-
SHARED="-Wl,--gc-sections -Wl,-z,nocopyreloc -pie"
56-
fi
57-
if [ -n "$NO_SHARED_LIBS" ]; then
58-
APP_SHARED_LIBS=
59-
fi
60-
if [ -n "$ALLOW_UNRESOLVED_SYMBOLS" ]; then
61-
UNRESOLVED=
62-
fi
63-
64-
LDFLAGS="\
65-
$SHARED \
66-
--sysroot=$NDK/platforms/$PLATFORMVER/arch-arm64 \
67-
-L$LOCAL_PATH/../../obj/local/$ARCH \
68-
`echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/$ARCH/lib\1.so@g\"` \
69-
-L$NDK/platforms/$PLATFORMVER/arch-arm64/usr/lib \
70-
-lc -lm -ldl -llog -lz \
71-
-L$NDK/sources/cxx-stl/gnu-libstdc++/$NDK_TOOLCHAIN_VERSION/libs/$ARCH \
72-
-lgnustl_static \
73-
-no-canonical-prefixes $UNRESOLVED -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now \
74-
-Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings \
75-
-lsupc++ \
76-
$MISSING_LIB $LDFLAGS"
77-
78-
CC="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc"
79-
CXX="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-g++"
80-
CPP="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp $CFLAGS"
34+
CFLAGS="
35+
-fexceptions
36+
-frtti
37+
-ffunction-sections
38+
-funwind-tables
39+
-fstack-protector-strong
40+
-Wno-invalid-command-line-argument
41+
-Wno-unused-command-line-argument
42+
-no-canonical-prefixes
43+
-I$NDK/sources/cxx-stl/llvm-libc++/include
44+
-I$NDK/sources/cxx-stl/llvm-libc++abi/include
45+
-I$NDK/sources/android/support/include
46+
-DANDROID
47+
-Wa,--noexecstack
48+
-Wformat
49+
-Werror=format-security
50+
-DNDEBUG
51+
-O2
52+
-g
53+
-gcc-toolchain
54+
$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
55+
-target
56+
aarch64-none-linux-android
57+
-fpic
58+
--sysroot $NDK/platforms/android-21/arch-arm64
59+
-isystem $NDK/sysroot/usr/include
60+
-isystem $NDK/sysroot/usr/include/aarch64-linux-android
61+
-D__ANDROID_API__=21
62+
$CFLAGS"
8163

82-
if [ -n "$CLANG" ]; then
64+
CFLAGS="`echo $CFLAGS | tr '\n' ' '`"
8365

84-
CFLAGS="\
85-
-gcc-toolchain $NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH \
86-
-target aarch64-none-linux-android -Wno-invalid-command-line-argument -Wno-unused-command-line-argument \
87-
$CFLAGS"
66+
LDFLAGS="
67+
-shared
68+
--sysroot $NDK/platforms/android-21/arch-arm64
69+
$NDK/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a
70+
$NDK/sources/cxx-stl/llvm-libc++abi/../llvm-libc++/libs/arm64-v8a/libc++abi.a
71+
$NDK/sources/android/support/../../cxx-stl/llvm-libc++/libs/arm64-v8a/libandroid_support.a
72+
-latomic -Wl,--exclude-libs,libatomic.a
73+
-gcc-toolchain $NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
74+
-target aarch64-none-linux-android -no-canonical-prefixes
75+
-Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings
76+
-lc -lm -lstdc++
77+
$LDFLAGS"
8878

89-
LDFLAGS="$LDFLAGS \
90-
-lgcc \
91-
-latomic \
92-
-gcc-toolchain $NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH \
93-
-target aarch64-none-linux-android"
79+
LDFLAGS="`echo $LDFLAGS | tr '\n' ' '`"
9480

9581
CC="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/clang"
9682
CXX="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/clang++"
9783
CPP="$CC -E $CFLAGS"
9884

99-
fi
100-
10185
env PATH=$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \
10286
CFLAGS="$CFLAGS" \
10387
CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \

0 commit comments

Comments
 (0)