Subject: LWS_UNUSED
[platform/upstream/libwebsockets.git] / contrib / android-make-script.sh
1 #!/bin/bash
2
3 #
4 # Build libwebsockets static library for Android
5 #
6 # requires debian package xutils-dev for makedepend (openssl make depend)
7 #
8
9 # This is based on http://stackoverflow.com/questions/11929773/compiling-the-latest-openssl-for-android/
10 # via https://github.com/warmcat/libwebsockets/pull/502
11
12 # path to NDK
13 export NDK=/opt/Android/SDK/ndk-bundle
14
15 set -e
16
17 # Download packages libz, openssl and libwebsockets
18
19 [ ! -f zlib-1.2.8.tar.gz ] && {
20 wget http://prdownloads.sourceforge.net/libpng/zlib-1.2.8.tar.gz
21 }
22
23 [ ! -f openssl-1.0.2g.tar.gz ] && {
24 wget https://openssl.org/source/openssl-1.0.2g.tar.gz
25 }
26
27 [ ! -f libwebsockets.tar.gz ] && {
28 git clone https://github.com/warmcat/libwebsockets.git
29 tar caf libwebsockets.tar.gz libwebsockets
30 }
31
32 # Clean then Unzip
33
34 [ -d zlib-1.2.8 ] && rm -fr zlib-1.2.8
35 [ -d openssl-1.0.2g ] && rm -fr openssl-1.0.2g
36 [ -d libwebsockets ] && rm -fr libwebsockets
37 [ -d android-toolchain-arm ] && rm -fr android-toolchain-arm
38 tar xf zlib-1.2.8.tar.gz
39 tar xf openssl-1.0.2g.tar.gz
40 tar xf libwebsockets.tar.gz
41
42 # create a local android toolchain
43 $NDK/build/tools/make-standalone-toolchain.sh \
44  --platform=android-9 \
45  --toolchain=arm-linux-androideabi-4.9 \
46  --install-dir=`pwd`/android-toolchain-arm
47
48 # setup environment to use the gcc/ld from the android toolchain
49 export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm/bin
50 export TOOL=arm-linux-androideabi
51 export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/${TOOL}
52 export CC=$NDK_TOOLCHAIN_BASENAME-gcc
53 export CXX=$NDK_TOOLCHAIN_BASENAME-g++
54 export LINK=${CXX}
55 export LD=$NDK_TOOLCHAIN_BASENAME-ld
56 export AR=$NDK_TOOLCHAIN_BASENAME-ar
57 export RANLIB=$NDK_TOOLCHAIN_BASENAME-ranlib
58 export STRIP=$NDK_TOOLCHAIN_BASENAME-strip
59
60 # setup buildflags
61 export ARCH_FLAGS="-mthumb"
62 export ARCH_LINK=
63 export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "
64 export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions "
65 export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "
66 export LDFLAGS=" ${ARCH_LINK} "
67
68 # configure and build zlib
69 [ ! -f ./android-toolchain-arm/lib/libz.a ] && {
70 cd zlib-1.2.8
71 PATH=$TOOLCHAIN_PATH:$PATH ./configure --static --prefix=$TOOLCHAIN_PATH/..
72 PATH=$TOOLCHAIN_PATH:$PATH make
73 PATH=$TOOLCHAIN_PATH:$PATH make install
74 cd ..
75 }
76
77 # configure and build openssl
78 [ ! -f ./android-toolchain-arm/lib/libssl.a ] && {
79 PREFIX=$TOOLCHAIN_PATH/..
80 cd openssl-1.0.2g
81 ./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
82 PATH=$TOOLCHAIN_PATH:$PATH make depend
83 PATH=$TOOLCHAIN_PATH:$PATH make
84 PATH=$TOOLCHAIN_PATH:$PATH make install_sw
85 cd ..
86 }
87
88 # configure and build libwebsockets
89 [ ! -f ./android-toolchain-arm/lib/libwebsockets.a ] && {
90 cd libwebsockets
91 [ ! -d build ] && mkdir build
92 cd build
93 PATH=$TOOLCHAIN_PATH:$PATH cmake \
94   -DCMAKE_C_COMPILER=$CC \
95   -DCMAKE_AR=$AR \
96   -DCMAKE_RANLIB=$RANLIB \
97   -DCMAKE_C_FLAGS="$CFLAGS" \
98   -DCMAKE_INSTALL_PREFIX=$TOOLCHAIN_PATH/.. \
99   -DLWS_WITH_SHARED=OFF \
100   -DLWS_WITH_STATIC=ON \
101   -DLWS_WITHOUT_DAEMONIZE=ON \
102   -DLWS_WITHOUT_TESTAPPS=ON \
103   -DLWS_IPV6=OFF \
104   -DLWS_USE_BUNDLED_ZLIB=OFF \
105   -DLWS_WITH_SSL=ON  \
106   -DLWS_WITH_HTTP2=ON \
107   -DLWS_OPENSSL_LIBRARIES="$TOOLCHAIN_PATH/../lib/libssl.a;$TOOLCHAIN_PATH/../lib/libcrypto.a" \
108   -DLWS_OPENSSL_INCLUDE_DIRS=$TOOLCHAIN_PATH/../include \
109   -DCMAKE_BUILD_TYPE=Debug \
110   ..
111 PATH=$TOOLCHAIN_PATH:$PATH make
112 PATH=$TOOLCHAIN_PATH:$PATH make install
113 cd ../..
114 }