#!/bin/bash # # Build libwebsockets static library for Android # # path to NDK 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, libuv, mbedtls and libwebsockets #zlib-1.2.8 #libuv-1.x #mbedtls-2.11.0 #libwebsockets-3.0.0 # create a local android toolchain API=${3:-24} $NDK/build/tools/make-standalone-toolchain.sh \ --toolchain=arm-linux-androideabi-4.9 \ --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 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}/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} 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" # configure and build libuv [ ! -f ./android-toolchain-arm/lib/libuv.so ] && { cd libuv echo "=============================================>> build libuv" PATH=$TOOLCHAIN_PATH:$PATH make clean PATH=$TOOLCHAIN_PATH:$PATH make PATH=$TOOLCHAIN_PATH:$PATH make install echo "<<============================================= build libuv" cd .. } # 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 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.so ] && { cd libwebsockets [ ! -d build ] && mkdir build cd build 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 ../.. }