1+ #! /bin/bash
2+
3+ # 当一个命令执行失败时,shell会立即退出
4+ set -e
5+ # path to NDK
6+ export NDK=/opt/android-ndk
7+
8+ [ ! -d libwebsockets ] && {
9+ git clone https://github.com/warmcat/libwebsockets.git
10+ cd libwebsockets && git checkout -b v2.3.0 v2.3.0 && cd ..
11+ }
12+
13+
14+ echo $" Choose arch you like to build, arm(1) or arm64(2)? (1/2)"
15+ read ans;
16+
17+ case $ans in
18+ 1)
19+ ARCH=arm
20+ TOOLCHAIN_NAME=arm-linux-android-4.9
21+ TOOL_PREFIX=arm-linux-androideabi-;;
22+ 2)
23+ ARCH=arm64
24+ TOOLCHAIN_NAME=aarch64-linux-android-4.9
25+ TOOL_PREFIX=aarch64-linux-android-;;
26+ * )
27+ exit ;;
28+ esac
29+
30+ # create a local android toolchain
31+ $NDK /build/tools/make-standalone-toolchain.sh \
32+ --force \
33+ --arch=${ARCH} \
34+ --platform=android-21 \
35+ --toolchain=${TOOLCHAIN_NAME} \
36+ --install-dir=` pwd` /${ARCH}
37+
38+ # setup environment to use the gcc/ld from the android toolchain
39+ export TOOLCHAIN_PATH=` pwd` /${ARCH} /bin
40+ export TOOL=${TOOL_PREFIX}
41+ export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH} /${TOOL}
42+ export CC=${NDK_TOOLCHAIN_BASENAME} gcc
43+ export CXX=${NDK_TOOLCHAIN_BASENAME} g++
44+ export LINK=${CXX}
45+ export LD=${NDK_TOOLCHAIN_BASENAME} ld
46+ export AR=${NDK_TOOLCHAIN_BASENAME} ar
47+ export RANLIB=${NDK_TOOLCHAIN_BASENAME} ranlib
48+ export STRIP=${NDK_TOOLCHAIN_BASENAME} strip
49+
50+ echo ' add zlib'
51+ # configure and build zlib
52+ cp -r thirdparty/zlib/${ARCH} /include ${ARCH}
53+ cp thirdparty/zlib/${ARCH} /lib/libz.a ${ARCH} /lib/libz.a
54+ echo ' add zlib done'
55+
56+ echo ' add openssl'
57+ # configure and build openssl
58+ cp -r thirdparty/openssl/${ARCH} /include/openssl ${ARCH} /include/openssl
59+ cp thirdparty/openssl/${ARCH} /lib/libcrypto.a ${ARCH} /lib/libcrypto.a
60+ cp thirdparty/openssl/${ARCH} /lib/libssl.a ${ARCH} /lib/libssl.a
61+ echo ' add openssl done'
62+
63+ echo ' add libuv'
64+ # configure and build libuv
65+ cp -r thirdparty/libuv/${ARCH} /include/libuv ${ARCH} /include/libuv
66+ cp thirdparty/libuv/${ARCH} /lib/libuv.a ${ARCH} /lib/libuv.a
67+ echo ' add libuv done'
68+
69+ # configure and build libwebsockets
70+ cd libwebsockets
71+ [ -d build ] && {
72+ rm -rf build
73+ }
74+ mkdir -p build
75+ cd build
76+ PATH=$TOOLCHAIN_PATH :$PATH cmake \
77+ -DCMAKE_C_COMPILER=$CC \
78+ -DCMAKE_AR=$AR \
79+ -DCMAKE_RANLIB=$RANLIB \
80+ -DCMAKE_C_FLAGS=" $CFLAGS " \
81+ -DCMAKE_INSTALL_PREFIX=$TOOLCHAIN_PATH /.. \
82+ -DLWS_WITH_SHARED=ON \
83+ -DLWS_WITH_STATIC=ON \
84+ -DLWS_WITHOUT_DAEMONIZE=ON \
85+ -DLWS_WITHOUT_TESTAPPS=ON \
86+ -DLWS_IPV6=OFF \
87+ -DLWS_WITHOUT_TEST_SERVER=OFF \
88+ -DLWS_USE_BUNDLED_ZLIB=OFF \
89+ -DLWS_WITH_SSL=ON \
90+ -DLWS_WITH_HTTP2=ON \
91+ -DLWS_WITH_LIBUV=ON \
92+ -DLWS_WITH_PLUGINS=ON \
93+ -DLWS_WITH_LWSWS=ON \
94+ -DLWS_OPENSSL_LIBRARIES=" $TOOLCHAIN_PATH /../lib/libssl.a;$TOOLCHAIN_PATH /../lib/libcrypto.a" \
95+ -DLWS_OPENSSL_INCLUDE_DIRS=" $TOOLCHAIN_PATH /../include" \
96+ -DLWS_LIBUV_LIBRARIES=" ${TOOLCHAIN_PATH} /../lib/libuv.a" \
97+ -DLWS_LIBUV_INCLUDE_DIRS=" ${TOOLCHAIN_PATH} /../include/libuv" \
98+ -DCMAKE_BUILD_TYPE=Debug \
99+ ..
100+ PATH=$TOOLCHAIN_PATH :$PATH make
101+ PATH=$TOOLCHAIN_PATH :$PATH make install
102+ cd ../..
0 commit comments