• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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