1#!/bin/bash 2 3# 4# Build libwebsockets static library for Android 5# 6 7# path to NDK 8export NDK=/opt/ndk_r17/android-ndk-r17-beta2-linux-x86_64/android-ndk-r17-beta2 9export ANDROID_NDK=${NDK} 10export TOOLCHAIN=${NDK}/toolchain 11export CORSS_SYSROOT=${NDK}/sysroot 12export SYSROOT=${NDK}/platforms/android-22/arch-arm 13set -e 14 15# Download packages libz, libuv, mbedtls and libwebsockets 16#zlib-1.2.8 17#libuv-1.x 18#mbedtls-2.11.0 19#libwebsockets-3.0.0 20 21 22# create a local android toolchain 23API=${3:-24} 24 25$NDK/build/tools/make-standalone-toolchain.sh \ 26 --toolchain=arm-linux-androideabi-4.9 \ 27 --arch=arm \ 28 --install-dir=`pwd`/android-toolchain-arm \ 29 --platform=android-$API \ 30 --stl=libc++ \ 31 --force \ 32 --verbose 33 34# setup environment to use the gcc/ld from the android toolchain 35export INSTALL_PATH=/opt/libwebsockets_android/android-toolchain-arm 36export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm 37export TOOL=arm-linux-androideabi 38export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/bin/${TOOL} 39export PATH=`pwd`/android-toolchain-arm/bin:$PATH 40export CC=$NDK_TOOLCHAIN_BASENAME-gcc 41export CXX=$NDK_TOOLCHAIN_BASENAME-g++ 42export LINK=${CXX} 43export LD=$NDK_TOOLCHAIN_BASENAME-ld 44export AR=$NDK_TOOLCHAIN_BASENAME-ar 45export RANLIB=$NDK_TOOLCHAIN_BASENAME-ranlib 46export STRIP=$NDK_TOOLCHAIN_BASENAME-strip 47export PLATFORM=android 48export CFLAGS="D__ANDROID_API__=$API" 49 50# configure and build libuv 51[ ! -f ./android-toolchain-arm/lib/libuv.so ] && { 52cd libuv 53echo "=============================================>> build libuv" 54 55PATH=$TOOLCHAIN_PATH:$PATH make clean 56PATH=$TOOLCHAIN_PATH:$PATH make 57PATH=$TOOLCHAIN_PATH:$PATH make install 58echo "<<============================================= build libuv" 59cd .. 60} 61 62# configure and build zlib 63[ ! -f ./android-toolchain-arm/lib/libz.so ] && { 64cd zlib-1.2.8 65echo "=============================================>> build libz" 66 67PATH=$TOOLCHAIN_PATH:$PATH make clean 68PATH=$TOOLCHAIN_PATH:$PATH make 69PATH=$TOOLCHAIN_PATH:$PATH make install 70echo "<<============================================= build libz" 71cd .. 72} 73 74# configure and build mbedtls 75[ ! -f ./android-toolchain-arm/lib/libmbedtls.so ] && { 76echo "=============================================>> build mbedtls" 77PREFIX=$TOOLCHAIN_PATH 78cd mbedtls-2.11.0 79[ ! -d build ] && mkdir build 80cd build 81export CFLAGS="$CFLAGS -fomit-frame-pointer" 82 83PATH=$TOOLCHAIN_PATH:$PATH cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../cross-arm-android-gnueabi.cmake \ 84 -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PATH} \ 85 -DCMAKE_BUILD_TYPE=RELEASE -DUSE_SHARED_MBEDTLS_LIBRARY=On 86 87PATH=$TOOLCHAIN_PATH:$PATH make clean 88PATH=$TOOLCHAIN_PATH:$PATH make SHARED=1 89PATH=$TOOLCHAIN_PATH:$PATH make install 90echo "<<============================================= build mbedtls" 91cd ../.. 92} 93 94# configure and build libwebsockets 95[ ! -f ./android-toolchain-arm/lib/libwebsockets.so ] && { 96cd libwebsockets 97[ ! -d build ] && mkdir build 98cd build 99echo "=============================================>> build libwebsockets" 100 101PATH=$TOOLCHAIN_PATH:$PATH cmake .. -DCMAKE_TOOLCHAIN_FILE=`pwd`/../cross-arm-android-gnueabi.cmake \ 102 -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PATH} \ 103 -DLWS_WITH_LWSWS=1 \ 104 -DLWS_WITH_MBEDTLS=1 \ 105 -DLWS_WITHOUT_TESTAPPS=1 \ 106 -DLWS_MBEDTLS_LIBRARIES="${INSTALL_PATH}/lib/libmbedcrypto.a;${INSTALL_PATH}/lib/libmbedtls.a;${INSTALL_PATH}/lib/libmbedx509.a" \ 107 -DLWS_MBEDTLS_INCLUDE_DIRS=${INSTALL_PATH}/include \ 108 -DLWS_LIBUV_LIBRARIES=${INSTALL_PATH}/lib/libuv.so \ 109 -DLWS_LIBUV_INCLUDE_DIRS=${INSTALL_PATH}/include \ 110 -DLWS_ZLIB_LIBRARIES=${INSTALL_PATH}/lib/libz.so \ 111 -DLWS_ZLIB_INCLUDE_DIRS=${INSTALL_PATH}/include 112PATH=$TOOLCHAIN_PATH:$PATH make 113PATH=$TOOLCHAIN_PATH:$PATH make install 114echo "<<============================================= build libwebsockets" 115cd ../.. 116} 117