make build_ssl.sh a little bit more easier to maintain

Use latest ssl version for all Qt versions
This commit is contained in:
BogDan Vatra
2020-03-05 14:33:14 +02:00
parent f18df2616e
commit bf38cb6cc5
44 changed files with 153 additions and 123 deletions
+2 -2
View File
@@ -9,8 +9,8 @@ if (QT_VERSION LESS 5.12.3)
if (ANDROID_TARGET_ARCH STREQUAL "arm64-v8a")
set(ANDROID_EXTRA_LIBS
${CMAKE_CURRENT_LIST_DIR}/Qt-5.12.3/aarch64/libcrypto.so
${CMAKE_CURRENT_LIST_DIR}/Qt-5.12.3/aarch64/libssl.so
${CMAKE_CURRENT_LIST_DIR}/Qt-5.12.3/arm64/libcrypto.so
${CMAKE_CURRENT_LIST_DIR}/Qt-5.12.3/arm64/libssl.so
CACHE INTERNAL "")
endif()
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+146 -116
View File
@@ -1,134 +1,164 @@
#!/bin/bash
rm -fr static
mkdir -p static/lib
mkdir -p static/lib/multiabi
mkdir -p static/include
BUILD_DIR=$(pwd)
DEFAULT_PATH=$PATH
# This has been tested with NDK 20.0.5594570 (r20b) and NDK r10e (for old GCC toolchian)
# Set the correct NDK paths for the mentioned NDK versions first
declare -A version_for_ndk=( ["1.1.1d"]=~/Android/Sdk/ndk/20.0.5594570 ["1.1.1c"]=~/Android/Sdk/ndk/20.0.5594570 ["1.0.2u"]=~/Android/Sdk/ndk/android-ndk-r10e)
declare -A version_for_path=( ["1.1.1d"]="latest" ["1.1.1c"]="Qt-5.12.4_5.13.0" ["1.0.2u"]="Qt-5.12.3" )
declare -A ssl_versions=( ["1.1.1d"]=~/android/ndk-bundle ["1.0.2u"]=~/android/android-ndk-r10e )
# 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*" )
declare -A qt_architectures=( ["x86_64"]="x86_64" ["x86"]="x86" ["arm64"]="arm64-v8a" ["arm"]="armeabi-v7a" )
declare hosts=( "linux-x86_64" "linux-x86" "darwin-x86_64" "darwin-x86" )
for version in ${!version_for_ndk[@]}
for ssl_version in ${!ssl_versions[@]}
do
export ANDROID_NDK_HOME=${version_for_ndk[$version]}
if [ ! -f "openssl-$version.tar.gz" ]; then
wget https://www.openssl.org/source/openssl-$version.tar.gz
echo "SSL version = $ssl_version"
if [ ! -f "openssl-$ssl_version.tar.gz" ]; then
wget https://www.openssl.org/source/openssl-$ssl_version.tar.gz
fi
export ANDROID_NDK_HOME=${ssl_versions[$ssl_version]}
for arch in ${!qt_architectures[@]}
for qt_version in ${!qt_versions[@]}
do
rm -fr $arch
mkdir -p ${version_for_path[$version]}/$arch
rm -fr openssl-$version
tar xfa openssl-$version.tar.gz
cd openssl-$version
ANDROID_TOOLCHAIN=""
if [ $version == "1.1.1c" ] || [ $version == "1.1.1d" ]; then
case $arch in
arm)
ANDROID_API=16
;;
x86)
ANDROID_API=16
;;
arm64)
ANDROID_API=21
;;
x86_64)
ANDROID_API=21
;;
esac
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
export PATH="$ANDROID_TOOLCHAIN:$DEFAULT_PATH"
./Configure shared android-${arch} -D__ANDROID_API__=${ANDROID_API} || exit 1
make depend
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
else
# For Older 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
;;
aarch64)
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
;;
*)
break
esac
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"
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
export PATH="$ANDROID_TOOLCHAIN:$DEFAULT_PATH"
./Configure shared $CONF_PARAM || exit 1
make depend
make -j$(nproc) CALC_VERSIONS="SHLIB_COMPAT=; SHLIB_SOVER=" build_libs || exit 1
${CROSS_COMPILE}strip -s libcrypto.so
${CROSS_COMPILE}strip -s libssl.so
# Unset variables so they don't interfere with different versions
unset CXXFLAGS CPPFLAGS CFLAGS ANDROID_DEV ANDROID_SYSROOT SYSTEM ANDROID_PLATFORM CONF_PARAM CROSS_COMPILE ANDROID_EABI
if [[ $ssl_version != ${qt_versions[$qt_version]} ]]; then
continue;
fi
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=""
# Only for latest OpenSSL with Qt 5.14.1+
if [ $version == "1.1.1d" ]; then
cp libcrypto_1_1.so libssl_1_1.so ../${version_for_path[$version]}/$arch
mv libcrypto.a ../static/lib/libcrypto_${qt_architectures[$arch]}.a
mv libssl.a ../static/lib/libssl_${qt_architectures[$arch]}.a
else
cp libcrypto.so libssl.so ../${version_for_path[$version]}/$arch
fi
cd ..
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
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
export PATH="$ANDROID_TOOLCHAIN:$DEFAULT_PATH"
./Configure shared android-${arch} -D__ANDROID_API__=${ANDROID_API} || exit 1
make depend
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
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"
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
export PATH="$ANDROID_TOOLCHAIN:$DEFAULT_PATH"
./Configure 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
# 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
done
# Copy include files to static folder
cd $BUILD_DIR
if [ $version == "1.1.1d" ]; then
cp -a openssl-$version/include/openssl static/include
fi
rm -fr openssl-$version openssl-$version.tar.gz
rm -fr openssl-$ssl_version
rm openssl-$ssl_version.tar.gz
done
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More