123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #!/bin/bash
- #
- # Build libwebsockets static library for Android
- #
- # requires debian package xutils-dev for makedepend (openssl make depend)
- #
- # This is based on http://stackoverflow.com/questions/11929773/compiling-the-latest-openssl-for-android/
- # via https://github.com/warmcat/libwebsockets/pull/502
- # path to NDK
- export NDK=/opt/Android/SDK/ndk-bundle
- set -e
- # Download packages libz, openssl and libwebsockets
- [ ! -f zlib-1.2.8.tar.gz ] && {
- wget http://prdownloads.sourceforge.net/libpng/zlib-1.2.8.tar.gz
- }
- [ ! -f openssl-1.0.2g.tar.gz ] && {
- wget https://openssl.org/source/openssl-1.0.2g.tar.gz
- }
- [ ! -f libwebsockets.tar.gz ] && {
- git clone https://github.com/warmcat/libwebsockets.git
- tar caf libwebsockets.tar.gz libwebsockets
- }
- # Clean then Unzip
- [ -d zlib-1.2.8 ] && rm -fr zlib-1.2.8
- [ -d openssl-1.0.2g ] && rm -fr openssl-1.0.2g
- [ -d libwebsockets ] && rm -fr libwebsockets
- [ -d android-toolchain-arm ] && rm -fr android-toolchain-arm
- tar xf zlib-1.2.8.tar.gz
- tar xf openssl-1.0.2g.tar.gz
- tar xf libwebsockets.tar.gz
- # create a local android toolchain
- $NDK/build/tools/make-standalone-toolchain.sh \
- --platform=android-9 \
- --toolchain=arm-linux-androideabi-4.9 \
- --install-dir=`pwd`/android-toolchain-arm
- # setup environment to use the gcc/ld from the android toolchain
- export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm/bin
- export TOOL=arm-linux-androideabi
- export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/${TOOL}
- export CC=$NDK_TOOLCHAIN_BASENAME-gcc
- export CXX=$NDK_TOOLCHAIN_BASENAME-g++
- export LINK=${CXX}
- export LD=$NDK_TOOLCHAIN_BASENAME-ld
- export AR=$NDK_TOOLCHAIN_BASENAME-ar
- export RANLIB=$NDK_TOOLCHAIN_BASENAME-ranlib
- export STRIP=$NDK_TOOLCHAIN_BASENAME-strip
- # setup buildflags
- export ARCH_FLAGS="-mthumb"
- export ARCH_LINK=
- export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "
- export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions "
- export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "
- export LDFLAGS=" ${ARCH_LINK} "
- # configure and build zlib
- [ ! -f ./android-toolchain-arm/lib/libz.a ] && {
- cd zlib-1.2.8
- PATH=$TOOLCHAIN_PATH:$PATH ./configure --static --prefix=$TOOLCHAIN_PATH/..
- PATH=$TOOLCHAIN_PATH:$PATH make
- PATH=$TOOLCHAIN_PATH:$PATH make install
- cd ..
- }
- # configure and build openssl
- [ ! -f ./android-toolchain-arm/lib/libssl.a ] && {
- PREFIX=$TOOLCHAIN_PATH/..
- cd openssl-1.0.2g
- ./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
- PATH=$TOOLCHAIN_PATH:$PATH make depend
- PATH=$TOOLCHAIN_PATH:$PATH make
- PATH=$TOOLCHAIN_PATH:$PATH make install_sw
- cd ..
- }
- # configure and build libwebsockets
- [ ! -f ./android-toolchain-arm/lib/libwebsockets.a ] && {
- cd libwebsockets
- [ ! -d build ] && mkdir build
- cd build
- PATH=$TOOLCHAIN_PATH:$PATH cmake \
- -DCMAKE_C_COMPILER=$CC \
- -DCMAKE_AR=$AR \
- -DCMAKE_RANLIB=$RANLIB \
- -DCMAKE_C_FLAGS="$CFLAGS" \
- -DCMAKE_INSTALL_PREFIX=$TOOLCHAIN_PATH/.. \
- -DLWS_WITH_SHARED=OFF \
- -DLWS_WITH_STATIC=ON \
- -DLWS_WITHOUT_DAEMONIZE=ON \
- -DLWS_WITHOUT_TESTAPPS=ON \
- -DLWS_IPV6=OFF \
- -DLWS_USE_BUNDLED_ZLIB=OFF \
- -DLWS_WITH_SSL=ON \
- -DLWS_WITH_HTTP2=ON \
- -DLWS_OPENSSL_LIBRARIES="$TOOLCHAIN_PATH/../lib/libssl.a;$TOOLCHAIN_PATH/../lib/libcrypto.a" \
- -DLWS_OPENSSL_INCLUDE_DIRS=$TOOLCHAIN_PATH/../include \
- -DCMAKE_BUILD_TYPE=Debug \
- ..
- PATH=$TOOLCHAIN_PATH:$PATH make
- PATH=$TOOLCHAIN_PATH:$PATH make install
- cd ../..
- }
|