Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge upstream changes #14

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 40 additions & 44 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ fi

export CLANG=1

if [ ! $ARCHS ]; then
ARCHS='armeabi armeabi-v7a arm64-v8a x86 x86_64'
if [ -z "$ARCHS" ]; then
ARCHS='arm64-v8a armeabi-v7a x86 x86_64'
fi

for ARCH in $ARCHS; do
Expand All @@ -36,21 +36,6 @@ echo "ARCH $ARCH GCCPREFIX $GCCPREFIX"
mkdir -p $ARCH
cd $BUILDDIR/$ARCH

# =========== libandroid_support.a ===========

[ -e libandroid_support.a ] || {
mkdir -p android_support
cd android_support
ln -sf $NDK/sources/android/support jni

#ndk-build -j$NCPU APP_ABI=$ARCH APP_MODULES=android_support LIBCXX_FORCE_REBUILD=true CLANG=1 || exit 1
#cp -f obj/local/$ARCH/libandroid_support.a ../
ln -sf $NDK/sources/cxx-stl/llvm-libc++/libs/$ARCH/libandroid_support.a ../

} || exit 1

cd $BUILDDIR/$ARCH

# =========== libiconv.so ===========

[ -e libiconv.so ] || [ $SKIP_ICONV ] || {
Expand All @@ -68,8 +53,8 @@ cd $BUILDDIR/$ARCH

sed -i,tmp 's/MB_CUR_MAX/1/g' lib/loop_wchar.h

env CFLAGS="-I$NDK/sources/android/support/include -D_IO_getc=getc" \
LDFLAGS="-L$BUILDDIR/$ARCH -landroid_support" \
env CFLAGS="-D_IO_getc=getc" \
LDFLAGS="-L$BUILDDIR/$ARCH" \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
./configure \
--host=$GCCPREFIX \
Expand All @@ -83,22 +68,25 @@ cd $BUILDDIR/$ARCH

env PATH=`pwd`:$PATH \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
sh -c '$LD $CFLAGS $LDFLAGS -shared libcharset/lib/.libs/*.o -o libcharset/lib/.libs/libcharset.so' || exit 1
sh -c '$LD $CFLAGS $LDFLAGS -shared -Wl,-soname=libcharset.so libcharset/lib/.libs/*.o -o libcharset/lib/.libs/libcharset.so' || exit 1

env PATH=`pwd`:$PATH \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
make V=1 || echo "Libtool works worse than cat /dev/urandom | head 10000 > library.so, because this will at least generate a target file, linking libiconv.so manually"

env PATH=`pwd`:$PATH \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
sh -c '$LD $CFLAGS $LDFLAGS -shared lib/.libs/*.o -o lib/.libs/libiconv.so' || exit 1
sh -c '$LD $CFLAGS $LDFLAGS -shared -Wl,-soname=libiconv.so lib/.libs/*.o -o lib/.libs/libiconv.so' || exit 1

env PATH=`pwd`:$PATH \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
make V=1 || echo "Did you know that libtool contributes to global warming by overheating your CPU?"

cp -f lib/.libs/libiconv.so preload/preloadable_libiconv.so

echo 'all install:' > src/Makefile
echo ' touch $@' >> src/Makefile

env PATH=`pwd`:$PATH \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
make V=1 || exit 1
Expand All @@ -110,6 +98,8 @@ cd $BUILDDIR/$ARCH
cd ..

for f in libiconv libcharset; do
cp -f lib64/$f.so ./ # libtool invents new dumb places to install libraries to
cp -f lib32/$f.so ./
cp -f lib/$f.so ./
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
sh -c '$STRIP'" $f.so"
Expand All @@ -131,9 +121,9 @@ cd $BUILDDIR/$ARCH

sed -i,tmp 's/ld_shlibs=no/ld_shlibs=yes/g' ./configure

env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions -I$BUILDDIR/$ARCH/include" \
env CFLAGS="-frtti -fexceptions -I$BUILDDIR/$ARCH/include" \
LDFLAGS="-frtti -fexceptions -L$BUILDDIR/$ARCH/lib" \
LIBS="-L$BUILDDIR/$ARCH -landroid_support" \
LIBS="-L$BUILDDIR/$ARCH" \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
./configure \
--host=$GCCPREFIX \
Expand All @@ -160,6 +150,8 @@ cd $BUILDDIR/$ARCH
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
make V=1 install || exit 1

mkdir -p ../lib

env PATH=`pwd`:$PATH \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
sh -c '$AR rcs ../lib/libharfbuzz.a src/.libs/*.o src/hb-ucdn/.libs/*.o' || exit 1
Expand All @@ -176,7 +168,7 @@ cd $BUILDDIR/$ARCH

rm -rf icu

tar xvf ../icu4c-59_1-src.tgz
tar xvf ../icu4c-62_1-src.tgz

# The ENVVAR LIBSUFFIX should add the suffix only to the libname and not to the symbols.
# ToDo: Find the right way in Swift to refer to an alternative library with symbol prefixing or any other method to
Expand All @@ -187,9 +179,6 @@ cd $BUILDDIR/$ARCH

cd icu/source

cp -f $BUILDDIR/config.sub .
cp -f $BUILDDIR/config.guess .

[ -d cross ] || {
mkdir cross
cd cross
Expand All @@ -198,19 +187,23 @@ cd $BUILDDIR/$ARCH
cd ..
} || exit 1

cp -f $BUILDDIR/config.sub .
cp -f $BUILDDIR/config.guess .

sed -i,tmp "s@LD_SONAME *=.*@LD_SONAME =@g" config/mh-linux
sed -i,tmp "s%ln -s *%cp -f \$(dir \$@)/%g" config/mh-linux
sed -i,tmp "s/#define U_OVERRIDE_CXX_ALLOCATION 1/#define U_OVERRIDE_CXX_ALLOCATION 0/g" common/unicode/uconfig.h

if [ $SHARED_ICU ]; then
libtype='--enable-shared --disable-static'
else
libtype='--enable-static --disable-shared'
fi

env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
env CFLAGS="-frtti -fexceptions" \
LDFLAGS="-frtti -fexceptions -L$BUILDDIR/$ARCH/lib" \
LIBS="-L$BUILDDIR/$ARCH -landroid_support `$BUILDDIR/setCrossEnvironment-$ARCH.sh sh -c 'echo $LDFLAGS'`" \
env ac_cv_func_strtod_l=no \
LIBS="-L$BUILDDIR/$ARCH `$BUILDDIR/setCrossEnvironment-$ARCH.sh sh -c 'echo $LDFLAGS'`" \
ac_cv_func_strtod_l=no \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
./configure \
--host=$GCCPREFIX \
Expand All @@ -221,10 +214,6 @@ cd $BUILDDIR/$ARCH
--with-data-packaging=archive \
|| exit 1

# ICULEHB_CFLAGS="-I$BUILDDIR/$ARCH/include" \
# ICULEHB_LIBS="-licu-le-hb" \
# --enable-layoutex \

sed -i,tmp "s@^prefix *= *.*@prefix = .@" icudefs.mk || exit 1

env PATH=`pwd`:$PATH \
Expand All @@ -239,12 +228,14 @@ cd $BUILDDIR/$ARCH

for f in libicudata$LIBSUFFIX libicutest$LIBSUFFIX libicui18n$LIBSUFFIX libicuio$LIBSUFFIX libicutu$LIBSUFFIX libicuuc$LIBSUFFIX; do
if [ $SHARED_ICU ]; then
cp -f -H ../../lib64/$f.so ../../ # Maybe it's here, maybe not, who knows
cp -f -H ../../lib32/$f.so ../../
cp -f -H ../../lib/$f.so ../../
else
cp -f ../../lib64/$f.a ../../ # Different libtool versions do things differently
cp -f ../../lib32/$f.a ../../
cp -f ../../lib/$f.a ../../
fi
#$BUILDDIR/setCrossEnvironment-$ARCH.sh \
# sh -c '$STRIP'" ../../$f.so"
done

} || exit 1
Expand All @@ -263,10 +254,16 @@ cd $BUILDDIR/$ARCH

sed -i,tmp 's/ld_shlibs=no/ld_shlibs=yes/g' ./configure

env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
touch dummy.c
env PATH=`pwd`:$PATH \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
sh -c '$CC $CFLAGS -c dummy.c -o src/crtbegin_so.o' || exit 1
cp -f src/crtbegin_so.o src/crtend_so.o

env CFLAGS="-frtti -fexceptions" \
CXXFLAGS="-std=c++11" \
LDFLAGS="-frtti -fexceptions" \
LIBS="-L$BUILDDIR/$ARCH -landroid_support" \
LIBS="-L$BUILDDIR/$ARCH" \
HARFBUZZ_CFLAGS="-I$BUILDDIR/$ARCH/include/harfbuzz" \
HARFBUZZ_LIBS="-L$BUILDDIR/$ARCH/lib -lharfbuzz" \
ICU_CFLAGS="-I$BUILDDIR/$ARCH/include" \
Expand Down Expand Up @@ -347,6 +344,8 @@ EOF
make V=1 install || exit 1

cd ..
cp -f lib64/libicu-le-hb.a ./ # Try every possibility
cp -f lib32/libicu-le-hb.a ./
cp -f lib/libicu-le-hb.a ./
}

Expand All @@ -358,9 +357,9 @@ cd $BUILDDIR/$ARCH

cd icu/source

env CFLAGS="-I$NDK/sources/android/support/include -frtti -fexceptions" \
env CFLAGS="-frtti -fexceptions" \
LDFLAGS="-frtti -fexceptions -L$BUILDDIR/$ARCH/lib" \
LIBS="-L$BUILDDIR/$ARCH -landroid_support `$BUILDDIR/setCrossEnvironment-$ARCH.sh sh -c 'echo $LDFLAGS'`" \
LIBS="-L$BUILDDIR/$ARCH `$BUILDDIR/setCrossEnvironment-$ARCH.sh sh -c 'echo $LDFLAGS'`" \
ICULEHB_CFLAGS="-I$BUILDDIR/$ARCH/include/icu-le-hb" \
ICULEHB_LIBS="-licu-le-hb" \
$BUILDDIR/setCrossEnvironment-$ARCH.sh \
Expand All @@ -386,10 +385,7 @@ cd $BUILDDIR/$ARCH
make V=1 install || exit 1

for f in libicudata libicutest libicui18n libicuio libicutu libicuuc libiculx; do
#cp -f -H ../../lib/$f.so ../../
cp -f ../../lib/$f.a ../../ || exit 1
#$BUILDDIR/setCrossEnvironment-$ARCH.sh \
# sh -c '$STRIP'" ../../$f.so"
cp -f ../../lib/$f.a ../../ || cp -f ../../lib64/$f.a ../../ || cp -f ../../lib32/$f.a ../../ || exit 1
done

} || exit 1
Expand Down
Binary file renamed icu4c-59_1-src.tgz → icu4c-62_1-src.tgz
Binary file not shown.
76 changes: 36 additions & 40 deletions setCrossEnvironment-arm64-v8a.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,80 +16,76 @@ elif uname -s | grep -i "windows" > /dev/null ; then
fi

#echo NDK $NDK
GCCPREFIX=aarch64-linux-android
[ -z "$NDK_TOOLCHAIN_VERSION" ] && NDK_TOOLCHAIN_VERSION=4.9
[ -z "$PLATFORMVER" ] && PLATFORMVER=android-21
LOCAL_PATH=`dirname $0`
if which realpath > /dev/null ; then
LOCAL_PATH=`realpath $LOCAL_PATH`
else
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
fi
ARCH=arm64-v8a
GCCPREFIX=aarch64-linux-android
APILEVEL=21


CFLAGS="
-fexceptions
-frtti
-g
-ffunction-sections
-fdata-sections
-funwind-tables
-fstack-protector-strong
-Wno-invalid-command-line-argument
-Wno-unused-command-line-argument
-no-canonical-prefixes
-I$NDK/sources/cxx-stl/llvm-libc++/include
-I$NDK/sources/cxx-stl/llvm-libc++abi/include
-I$NDK/sources/android/support/include
-DANDROID
-Wa,--noexecstack
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-O2
-g
-gcc-toolchain
$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
-target
aarch64-none-linux-android
-fpic
--sysroot $NDK/platforms/android-21/arch-arm64
-isystem $NDK/sysroot/usr/include
-isystem $NDK/sysroot/usr/include/aarch64-linux-android
-D__ANDROID_API__=21
-fPIC
$CFLAGS"

CFLAGS="`echo $CFLAGS | tr '\n' ' '`"

LDFLAGS="
-fPIC
-g
-ffunction-sections
-fdata-sections
-Wl,--gc-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-Oz
-Wl,--build-id
-Wl,--warn-shared-textrel
-Wl,--fatal-warnings
-Wl,--no-undefined
-Wl,-z,noexecstack
-Qunused-arguments
-Wl,-z,relro
-Wl,-z,now
-shared
--sysroot $NDK/platforms/android-21/arch-arm64
$NDK/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a
$NDK/sources/cxx-stl/llvm-libc++abi/../llvm-libc++/libs/arm64-v8a/libc++abi.a
$NDK/sources/android/support/../../cxx-stl/llvm-libc++/libs/arm64-v8a/libandroid_support.a
-latomic -Wl,--exclude-libs,libatomic.a
-gcc-toolchain $NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
-target aarch64-none-linux-android -no-canonical-prefixes
-Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings
-lc -lm -lstdc++
-landroid
-llog
-latomic
-lm
$LDFLAGS"

LDFLAGS="`echo $LDFLAGS | tr '\n' ' '`"

CC="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/clang"
CXX="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/clang++"
CC="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang"
CXX="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang++"
CPP="$CC -E $CFLAGS"

env PATH=$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \
env \
CFLAGS="$CFLAGS" \
CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \
LDFLAGS="$LDFLAGS" \
CC="$CC" \
CXX="$CXX" \
RANLIB="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-ranlib" \
LD="$CC" \
AR="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-ar" \
RANLIB="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-ranlib" \
LD="$CXX" \
AR="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-ar" \
CPP="$CPP" \
NM="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-nm" \
AS="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \
STRIP="$NDK/toolchains/$GCCPREFIX-$NDK_TOOLCHAIN_VERSION/prebuilt/$MYARCH/bin/$GCCPREFIX-strip" \
NM="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-nm" \
AS="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \
STRIP="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-strip" \
"$@"
Loading