1 Star 0 Fork 0

LXM/android_openssl

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
build_ssl.sh 7.69 KB
一键复制 编辑 原始数据 按行查看 历史
BogDan Vatra 提交于 2020-04-21 18:13 . Say hello to OpenSSL 1.1.1g
#!/bin/bash
BUILD_DIR=$(pwd)
DEFAULT_PATH=$PATH
declare -a params=( 'no-asm' '' )
declare -A ssl_versions=( ["1.1.1g"]=~/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 param in ${!params[@]}
do
if [ ${params[$param]} ]; then
rm -fr ${params[$param]}
mkdir ${params[$param]}
pushd ${params[$param]}
fi
rm -fr static
mkdir -p static/lib/multiabi
mkdir -p static/include
for ssl_version in ${!ssl_versions[@]}
do
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 qt_version in ${!qt_versions[@]}
do
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=""
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 ${params[$param]} 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 ${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
# 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
rm -fr openssl-$ssl_version
rm openssl-$ssl_version.tar.gz
done
if [ ${params[$param]} ]; then
popd
fi
done
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lxm-space/android_openssl.git
git@gitee.com:lxm-space/android_openssl.git
lxm-space
android_openssl
android_openssl
master

搜索帮助