From 9d9c90bc5bedfbb86fde8871f9fc3560c338c819 Mon Sep 17 00:00:00 2001 From: dennisWind <240259788@qq.com> Date: Wed, 31 Oct 2018 10:09:35 +0800 Subject: [PATCH] Update android-make-script.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit build libwebsockets for android ndk standalone toolchain,test in ndk-r17 --- contrib/android-make-script.sh | 144 +++++++++++++++++---------------- 1 file changed, 73 insertions(+), 71 deletions(-) diff --git a/contrib/android-make-script.sh b/contrib/android-make-script.sh index 0c35d05b..1ef86074 100755 --- a/contrib/android-make-script.sh +++ b/contrib/android-make-script.sh @@ -3,52 +3,40 @@ # # Build libwebsockets static library for Android # -# requires debian package xutils-dev for makedepend (openssl make depend) -# - -# This is based on http://stackoverflow.com/questions/11929773/compiling-the-latest-openssl-for-android/ -# via https://github.com/warmcat/libwebsockets/pull/502 # path to NDK -export NDK=/opt/Android/SDK/ndk-bundle - +export NDK=/opt/ndk_r17/android-ndk-r17-beta2-linux-x86_64/android-ndk-r17-beta2 +export ANDROID_NDK=${NDK} +export TOOLCHAIN=${NDK}/toolchain +export CORSS_SYSROOT=${NDK}/sysroot +export SYSROOT=${NDK}/platforms/android-22/arch-arm set -e -# Download packages libz, openssl and libwebsockets - -[ ! -f zlib-1.2.8.tar.gz ] && { -wget http://prdownloads.sourceforge.net/libpng/zlib-1.2.8.tar.gz -} - -[ ! -f openssl-1.0.2g.tar.gz ] && { -wget https://openssl.org/source/openssl-1.0.2g.tar.gz -} - -[ ! -f libwebsockets.tar.gz ] && { -git clone https://github.com/warmcat/libwebsockets.git -tar caf libwebsockets.tar.gz libwebsockets -} +# Download packages libz, libuv, mbedtls and libwebsockets +#zlib-1.2.8 +#libuv-1.x +#mbedtls-2.11.0 +#libwebsockets-3.0.0 -# Clean then Unzip - -[ -d zlib-1.2.8 ] && rm -fr zlib-1.2.8 -[ -d openssl-1.0.2g ] && rm -fr openssl-1.0.2g -[ -d libwebsockets ] && rm -fr libwebsockets -[ -d android-toolchain-arm ] && rm -fr android-toolchain-arm -tar xf zlib-1.2.8.tar.gz -tar xf openssl-1.0.2g.tar.gz -tar xf libwebsockets.tar.gz # create a local android toolchain +API=${3:-24} + $NDK/build/tools/make-standalone-toolchain.sh \ - --platform=android-9 \ --toolchain=arm-linux-androideabi-4.9 \ - --install-dir=`pwd`/android-toolchain-arm + --arch=arm \ + --install-dir=`pwd`/android-toolchain-arm \ + --platform=android-$API \ + --stl=libc++ \ + --force \ + --verbose # setup environment to use the gcc/ld from the android toolchain -export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm/bin +export INSTALL_PATH=/opt/libwebsockets_android/android-toolchain-arm +export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm export TOOL=arm-linux-androideabi -export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/${TOOL} +export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/bin/${TOOL} +export PATH=`pwd`/android-toolchain-arm/bin:$PATH export CC=$NDK_TOOLCHAIN_BASENAME-gcc export CXX=$NDK_TOOLCHAIN_BASENAME-g++ export LINK=${CXX} @@ -56,59 +44,73 @@ export LD=$NDK_TOOLCHAIN_BASENAME-ld export AR=$NDK_TOOLCHAIN_BASENAME-ar export RANLIB=$NDK_TOOLCHAIN_BASENAME-ranlib export STRIP=$NDK_TOOLCHAIN_BASENAME-strip +export PLATFORM=android +export CFLAGS="D__ANDROID_API__=$API" -# setup buildflags -export ARCH_FLAGS="-mthumb" -export ARCH_LINK= -export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 " -export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions " -export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 " -export LDFLAGS=" ${ARCH_LINK} " +# configure and build libuv +[ ! -f ./android-toolchain-arm/lib/libuv.so ] && { +cd libuv +echo "=============================================>> build libuv" -# configure and build zlib -[ ! -f ./android-toolchain-arm/lib/libz.a ] && { -cd zlib-1.2.8 -PATH=$TOOLCHAIN_PATH:$PATH ./configure --static --prefix=$TOOLCHAIN_PATH/.. +PATH=$TOOLCHAIN_PATH:$PATH make clean PATH=$TOOLCHAIN_PATH:$PATH make PATH=$TOOLCHAIN_PATH:$PATH make install +echo "<<============================================= build libuv" cd .. } -# configure and build openssl -[ ! -f ./android-toolchain-arm/lib/libssl.a ] && { -PREFIX=$TOOLCHAIN_PATH/.. -cd openssl-1.0.2g -./Configure android --prefix=${PREFIX} no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp -PATH=$TOOLCHAIN_PATH:$PATH make depend +# configure and build zlib +[ ! -f ./android-toolchain-arm/lib/libz.so ] && { +cd zlib-1.2.8 +echo "=============================================>> build libz" + +PATH=$TOOLCHAIN_PATH:$PATH make clean PATH=$TOOLCHAIN_PATH:$PATH make -PATH=$TOOLCHAIN_PATH:$PATH make install_sw +PATH=$TOOLCHAIN_PATH:$PATH make install +echo "<<============================================= build libz" cd .. } +# configure and build mbedtls +[ ! -f ./android-toolchain-arm/lib/libmbedtls.so ] && { +echo "=============================================>> build mbedtls" +PREFIX=$TOOLCHAIN_PATH +cd mbedtls-2.11.0 +[ ! -d build ] && mkdir build +cd build +export CFLAGS="$CFLAGS -fomit-frame-pointer" + +PATH=$TOOLCHAIN_PATH:$PATH cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../cross-arm-android-gnueabi.cmake \ + -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PATH} \ + -DCMAKE_BUILD_TYPE=RELEASE -DUSE_SHARED_MBEDTLS_LIBRARY=On + +PATH=$TOOLCHAIN_PATH:$PATH make clean +PATH=$TOOLCHAIN_PATH:$PATH make SHARED=1 +PATH=$TOOLCHAIN_PATH:$PATH make install +echo "<<============================================= build mbedtls" +cd ../.. +} + # configure and build libwebsockets -[ ! -f ./android-toolchain-arm/lib/libwebsockets.a ] && { +[ ! -f ./android-toolchain-arm/lib/libwebsockets.so ] && { cd libwebsockets [ ! -d build ] && mkdir build cd build -PATH=$TOOLCHAIN_PATH:$PATH cmake \ - -DCMAKE_C_COMPILER=$CC \ - -DCMAKE_AR=$AR \ - -DCMAKE_RANLIB=$RANLIB \ - -DCMAKE_C_FLAGS="$CFLAGS" \ - -DCMAKE_INSTALL_PREFIX=$TOOLCHAIN_PATH/.. \ - -DLWS_WITH_SHARED=OFF \ - -DLWS_WITH_STATIC=ON \ - -DLWS_WITHOUT_DAEMONIZE=ON \ - -DLWS_WITHOUT_TESTAPPS=ON \ - -DLWS_IPV6=OFF \ - -DLWS_WITH_BUNDLED_ZLIB=OFF \ - -DLWS_WITH_SSL=ON \ - -DLWS_WITH_HTTP2=ON \ - -DLWS_OPENSSL_LIBRARIES="$TOOLCHAIN_PATH/../lib/libssl.a;$TOOLCHAIN_PATH/../lib/libcrypto.a" \ - -DLWS_OPENSSL_INCLUDE_DIRS=$TOOLCHAIN_PATH/../include \ - -DCMAKE_BUILD_TYPE=Debug \ - .. +echo "=============================================>> build libwebsockets" + +PATH=$TOOLCHAIN_PATH:$PATH cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../cross-arm-android-gnueabi.cmake \ + -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PATH} \ + -DLWS_WITH_LWSWS=1 \ + -DLWS_WITH_MBEDTLS=1 \ + -DLWS_WITHOUT_TESTAPPS=1 \ + -DLWS_MBEDTLS_LIBRARIES="${INSTALL_PATH}/lib/libmbedcrypto.a;${INSTALL_PATH}/lib/libmbedtls.a;${INSTALL_PATH}/lib/libmbedx509.a" \ + -DLWS_MBEDTLS_INCLUDE_DIRS=${INSTALL_PATH}/include \ + -DLWS_LIBUV_LIBRARIES=${INSTALL_PATH}/lib/libuv.so \ + -DLWS_LIBUV_INCLUDE_DIRS=${INSTALL_PATH}/include \ + -DLWS_ZLIB_LIBRARIES=${INSTALL_PATH}/lib/libz.so \ + -DLWS_ZLIB_INCLUDE_DIRS=${INSTALL_PATH}/include PATH=$TOOLCHAIN_PATH:$PATH make PATH=$TOOLCHAIN_PATH:$PATH make install +echo "<<============================================= build libwebsockets" cd ../.. } -- GitLab