2019-01-16 13:36:53 +02:00
#!/bin/bash
2020-03-03 21:32:21 +02:00
BUILD_DIR = $( pwd )
DEFAULT_PATH = $PATH
2020-01-06 16:04:08 +02:00
2020-04-12 19:17:38 +03:00
declare -a params =( 'no-asm' '' )
2020-04-21 18:13:19 +03:00
declare -A ssl_versions =( [ "1.1.1g" ]= ~/android/ndk-bundle [ "1.0.2u" ]= ~/android/android-ndk-r10e )
2020-03-05 14:33:14 +02:00
# Qt up to Qt-5.12.3 are using openssl 1.0.x
# Qt 5.12.4 and 5.13.0 are using 1.1.x without any suffix, this will make he andorid linker to load system libs on Andorid 5 which will make Qt SSL support unusable in this combination
# Qt 5.12.5+ and 5.13.1+ are using OpenSSL 1.1.x but the library is suffixed with _1_1.so
# Qt 5.14.0+ same as above, but the static ssl libs are stored in a multiabi folder
declare -A qt_versions =( [ "latest" ]= "1.1*" [ "Qt-5.12.3" ]= "1.0*" [ "Qt-5.12.4_5.13.0" ]= "1.1*" )
2020-01-06 16:04:08 +02:00
declare -A qt_architectures =( [ "x86_64" ]= "x86_64" [ "x86" ]= "x86" [ "arm64" ]= "arm64-v8a" [ "arm" ]= "armeabi-v7a" )
2020-03-03 21:32:21 +02:00
declare hosts =( "linux-x86_64" "linux-x86" "darwin-x86_64" "darwin-x86" )
2020-01-06 16:04:08 +02:00
2020-04-12 19:17:38 +03:00
for param in ${ !params[@] }
2019-01-16 13:36:53 +02:00
do
2020-04-12 19:17:38 +03:00
if [ ${ params [ $param ] } ] ; then
rm -fr ${ params [ $param ] }
mkdir ${ params [ $param ] }
pushd ${ params [ $param ] }
2020-03-03 21:32:21 +02:00
fi
2020-04-12 19:17:38 +03:00
rm -fr static
mkdir -p static/lib/multiabi
mkdir -p static/include
for ssl_version in ${ !ssl_versions[@] }
2019-01-16 13:36:53 +02:00
do
2020-04-12 19:17:38 +03:00
echo "SSL version = $ssl_version "
if [ ! -f "openssl- $ssl_version .tar.gz" ] ; then
wget https://www.openssl.org/source/openssl-$ssl_version .tar.gz
2019-01-16 13:36:53 +02:00
fi
2020-04-12 19:17:38 +03:00
export ANDROID_NDK_HOME = ${ ssl_versions [ $ssl_version ] }
for qt_version in ${ !qt_versions[@] }
2020-03-05 14:33:14 +02:00
do
2020-04-12 19:17:38 +03:00
if [[ $ssl_version != ${ qt_versions [ $qt_version ] } ]] ; then
continue ;
2020-03-05 14:33:14 +02:00
fi
2020-04-12 19:17:38 +03:00
echo "Build $ssl_version for $qt_version "
for arch in ${ !qt_architectures[@] }
do
rm -fr $arch $qt_version /$arch
mkdir -p $qt_version /$arch || exit 1
if [ $qt_version != "multiabi" ] ; then
mkdir -p static/lib/$arch
fi
rm -fr openssl-$ssl_version
tar xfa openssl-$ssl_version .tar.gz || exit 1
pushd openssl-$ssl_version || exit 1
ANDROID_TOOLCHAIN = ""
2020-03-03 21:32:21 +02:00
2020-04-12 19:17:38 +03:00
if [[ $ssl_version == 1.1* ]] ; then
case $arch in
arm)
ANDROID_API = 16
;;
x86)
ANDROID_API = 16
;;
arm64)
ANDROID_API = 21
;;
x86_64)
ANDROID_API = 21
;;
esac
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
for host in ${ hosts [@] }
do
if [ -d " $ANDROID_NDK_HOME /toolchains/llvm/prebuilt/ $host /bin" ] ; then
ANDROID_TOOLCHAIN = " $ANDROID_NDK_HOME /toolchains/llvm/prebuilt/ $host /bin"
break
fi
done
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
export PATH = " $ANDROID_TOOLCHAIN : $DEFAULT_PATH "
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
./Configure ${ params [ $param ] } shared android-${ arch } -D__ANDROID_API__= ${ ANDROID_API } || exit 1
make depend
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
case $qt_version in
latest)
make -j$( nproc) SHLIB_VERSION_NUMBER = SHLIB_EXT = _1_1.so build_libs || exit 1
llvm-strip --strip-all libcrypto_1_1.so
llvm-strip --strip-all libssl_1_1.so
cp libcrypto_1_1.so libssl_1_1.so ../$qt_version /$arch || exit 1
cp libcrypto.a ../static/lib/multiabi/libcrypto_${ qt_architectures [ $arch ] } .a || exit 1
cp libssl.a ../static/lib/multiabi/libssl_${ qt_architectures [ $arch ] } .a || exit 1
mv libcrypto.a ../static/lib/$arch /libcrypto.a || exit 1
mv libssl.a ../static/lib/$arch /libssl.a || exit 1
;;
Qt-5.12.4_5.13.0)
make -j$( nproc) SHLIB_VERSION_NUMBER = build_libs || exit 1
llvm-strip --strip-all libcrypto.so
llvm-strip --strip-all libssl.so
cp libcrypto.so libssl.so ../$qt_version /$arch || exit 1
;;
*)
echo "Unhandled Qt version $qt_version "
exit 1
;;
esac
else
# For 1.0 use NDK r10e
case $arch in
arm)
export ANDROID_EABI = "arm-linux-androideabi-4.9"
export CROSS_COMPILE = "arm-linux-androideabi-"
export ANDROID_API = android-9
CONF_PARAM = android
;;
arm64)
export ANDROID_EABI = "aarch64-linux-android-4.9"
export CROSS_COMPILE = "aarch64-linux-android-"
export ANDROID_API = android-21
CONF_PARAM = android
;;
x86)
export ANDROID_EABI = "x86-4.9"
export CROSS_COMPILE = "i686-linux-android-"
export ANDROID_API = android-9
CONF_PARAM = android-x86
;;
x86_64)
popd
continue
;;
*)
echo "Unhandled arch $arch "
exit 1
;;
esac
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
export ANDROID_PLATFORM = arch-$arch
export SYSTEM = android
export ANDROID_SYSROOT = $ANDROID_NDK_HOME /platforms/$ANDROID_API /$ANDROID_PLATFORM
export ANDROID_DEV = $ANDROID_SYSROOT /usr
export CFLAGS = "--sysroot= $ANDROID_SYSROOT "
export CPPFLAGS = "--sysroot= $ANDROID_SYSROOT "
export CXXFLAGS = "--sysroot= $ANDROID_SYSROOT "
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
for host in ${ hosts [@] }
do
if [ -d " $ANDROID_NDK_HOME /toolchains/ $ANDROID_EABI /prebuilt/ $host /bin" ] ; then
ANDROID_TOOLCHAIN = " $ANDROID_NDK_HOME /toolchains/ $ANDROID_EABI /prebuilt/ $host /bin"
break
fi
done
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
export PATH = " $ANDROID_TOOLCHAIN : $DEFAULT_PATH "
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
./Configure ${ params [ $param ] } shared $CONF_PARAM || exit 1
make depend
make -j$( nproc) CALC_VERSIONS = "SHLIB_COMPAT=; SHLIB_SOVER=" build_libs || exit 1
${ CROSS_COMPILE } strip --strip-all libcrypto.so
${ CROSS_COMPILE } strip --strip-all libssl.so
2020-03-05 14:33:14 +02:00
2020-04-12 19:17:38 +03:00
# Unset variables so they don't interfere with different ssl_versions
unset CXXFLAGS CPPFLAGS CFLAGS ANDROID_DEV ANDROID_SYSROOT SYSTEM ANDROID_PLATFORM CONF_PARAM CROSS_COMPILE ANDROID_EABI
cp libcrypto.so libssl.so ../$qt_version /$arch || exit 1
fi
popd
if [[ $ssl_version == 1.1* ]] && [ ! -d static/include/openssl ] ; then
cp -a openssl-$ssl_version /include/openssl static/include || exit 1
fi
done
2020-03-05 14:33:14 +02:00
done
2020-04-12 19:17:38 +03:00
rm -fr openssl-$ssl_version
rm openssl-$ssl_version .tar.gz
2019-01-16 13:36:53 +02:00
done
2020-04-12 19:17:38 +03:00
if [ ${ params [ $param ] } ] ; then
popd
fi
2019-01-16 13:36:53 +02:00
done