11#! /bin/bash
22
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-
3+ # 当一个命令执行失败时,shell会立即退出
4+ set -e
125# path to NDK
136export NDK=/opt/android-ndk
14-
15- set -e
16-
17- # Download packages libz, openssl, libuv 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 libuv.tar.gz ] && {
28- git clone https://github.com/libuv/libuv.git
29- tar caf libuv.tar.gz libuv
30- }
31-
32- [ ! -f gyp.tar.gz ] && {
33- git clone https://github.com/bnoordhuis/gyp.git
34- tar caf gyp.tar.gz gyp
35- }
36-
37- [ ! -f libwebsockets.tar.gz ] && {
38- git clone https://github.com/warmcat/libwebsockets.git
39- tar caf libwebsockets.tar.gz libwebsockets
40- }
41-
42- # Clean then Unzip
43-
44- [ -d zlib-1.2.8 ] && rm -fr zlib-1.2.8
45- [ -d openssl-1.0.2g ] && rm -fr openssl-1.0.2g
46- [ -d libwebsockets ] && rm -fr libwebsockets
47- [ -d libuv ] && rm -fr libuv
48- [ -d gyp ] && rm -fr gyp
49- [ -d android-toolchain-aarch64 ] && rm -fr android-toolchain-aarch64
50- tar xf zlib-1.2.8.tar.gz
51- tar xf openssl-1.0.2g.tar.gz
52- tar xf libuv.tar.gz
53- mkdir -p libuv/build
54- mkdir -p libuv/out
55- tar xf gyp.tar.gz -C libuv/build
56- tar xf libwebsockets.tar.gz
57-
58- # create a local android toolchain
7+ # create a local android toolchain
598$NDK /build/tools/make-standalone-toolchain.sh \
60- --arch=arm64 \
61- --platform=android-21 \
62- --toolchain=aarch64-linux-android-4.9 \
63- --install-dir=` pwd` /android-toolchain-aarch64
9+ --force \
10+ --arch=arm64 \
11+ --platform=android-21 \
12+ --toolchain=aarch64-linux-android-4.9 \
13+ --install-dir=` pwd` /android-toolchain-aarch64
6414
65- # setup environment to use the gcc/ld from the android toolchain
15+ # setup environment to use the gcc/ld from the android toolchain
6616export TOOLCHAIN_PATH=` pwd` /android-toolchain-aarch64/bin
6717export TOOL=aarch64-linux-android
6818export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH} /${TOOL}
@@ -96,7 +46,7 @@ echo 'build zlib done'
9646
9747echo ' build openssl'
9848# configure and build openssl
99- [ ! -f ./android-toolchain-aarch64/lib/libssl.a ] && {
49+ {
10050PREFIX=$TOOLCHAIN_PATH /..
10151cd openssl-1.0.2g
10252./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
@@ -135,10 +85,11 @@ PATH=$TOOLCHAIN_PATH:$PATH cmake \
13585 -DLWS_WITHOUT_TESTAPPS=ON \
13686 -DLWS_IPV6=OFF \
13787 -DLWS_USE_BUNDLED_ZLIB=OFF \
138- -DLWS_WITH_SSL=OFF \
88+ -DLWS_WITH_SSL=ON \
13989 -DLWS_WITH_HTTP2=ON \
14090 -DLWS_WITH_LIBUV=ON \
14191 -DLWS_WITH_PLUGINS=ON \
92+ -DLWS_WITH_LWSWS=ON \
14293 -DLWS_OPENSSL_LIBRARIES=" $TOOLCHAIN_PATH /../lib/libssl.a;$TOOLCHAIN_PATH /../lib/libcrypto.a" \
14394 -DLWS_OPENSSL_INCLUDE_DIRS=$TOOLCHAIN_PATH /../include \
14495 -DLWS_LIBUV_LIBRARIES=" ${TOOLCHAIN_PATH} /../../libuv/out/Debug/libuv.a" \
@@ -148,4 +99,4 @@ PATH=$TOOLCHAIN_PATH:$PATH cmake \
14899PATH=$TOOLCHAIN_PATH :$PATH make
149100PATH=$TOOLCHAIN_PATH :$PATH make install
150101cd ../..
151- }
102+ }
0 commit comments