From fe3f60da92f3d0e0a7b4362ba431affd87e6705d Mon Sep 17 00:00:00 2001 From: Alexander Bruines Date: Sat, 23 Apr 2016 18:28:03 +0800 Subject: [PATCH] android make script contrib This is based on http://stackoverflow.com/questions/11929773/compiling-the-latest-openssl-for-android/ --- contrib/android-make-script.sh | 114 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100755 contrib/android-make-script.sh diff --git a/contrib/android-make-script.sh b/contrib/android-make-script.sh new file mode 100755 index 0000000..8ad36cb --- /dev/null +++ b/contrib/android-make-script.sh @@ -0,0 +1,114 @@ +#!/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 ../.. +} -- 2.7.4