android-make-script.sh 3.6 KB

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