From 2b4bd57c7fcfa76c68b8082aac4cf516c5f03b08 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 17 Aug 2014 19:15:19 +0900 Subject: [PATCH] doc: Add building-android-binary document --- .gitignore | 1 + configure.ac | 1 + doc/Makefile.am | 1 + doc/building-android-binary.rst.in | 1 + doc/sources/building-android-binary.rst | 120 ++++++++++++++++++++++++ doc/sources/index.rst | 1 + 6 files changed, 125 insertions(+) create mode 100644 doc/building-android-binary.rst.in create mode 100644 doc/sources/building-android-binary.rst diff --git a/.gitignore b/.gitignore index d7a37702..3044dee3 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ doc/nghttpx-howto.rst doc/h2load-howto.rst doc/tutorial-hpack.rst doc/python-apiref.rst +doc/building-android-binary.rst diff --git a/configure.ac b/configure.ac index 0c960f16..99dbfcb3 100644 --- a/configure.ac +++ b/configure.ac @@ -517,6 +517,7 @@ AC_CONFIG_FILES([ doc/nghttpx-howto.rst doc/h2load-howto.rst doc/python-apiref.rst + doc/building-android-binary.rst doc/nghttp2.h.rst doc/nghttp2ver.h.rst ]) diff --git a/doc/Makefile.am b/doc/Makefile.am index d7f0a021..5620924d 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -38,6 +38,7 @@ EXTRA_DIST = \ sources/nghttpx-howto.rst \ sources/h2load-howto.rst \ sources/python-apiref.rst \ + sources/building-android-binary.rst \ _themes/sphinx_rtd_theme/footer.html \ _themes/sphinx_rtd_theme/theme.conf \ _themes/sphinx_rtd_theme/layout_old.html \ diff --git a/doc/building-android-binary.rst.in b/doc/building-android-binary.rst.in new file mode 100644 index 00000000..2c77c985 --- /dev/null +++ b/doc/building-android-binary.rst.in @@ -0,0 +1 @@ +.. include:: @top_srcdir@/doc/sources/building-android-binary.rst diff --git a/doc/sources/building-android-binary.rst b/doc/sources/building-android-binary.rst new file mode 100644 index 00000000..5d49128a --- /dev/null +++ b/doc/sources/building-android-binary.rst @@ -0,0 +1,120 @@ +Building Android binary +======================= + +In this article, we briefly describe how to build Android binary using +`Android NDK `_ +cross-compiler on Debian Linux. + +We offer ``android-config`` and ``android-make`` scripts to make the +build easier. To make these script work, NDK toolchain must be +installed in the following way. First, let us introduce +``ANDROID_HOME`` environment variable. We need to install toolchain +under ``$ANDROID_HOME/toolchain``. An user can freely choose the path +for ``ANDROID_HOME``. For example, to install toolchain under +``$ANDROID_HOME/toolchain``, do this in the the directory where NDK is +unpacked:: + + $ build/tools/make-standalone-toolchain.sh \ + --install-dir=$ANDROID_HOME/toolchain \ + --toolchain=arm-linux-androideabi-4.8 \ + --llvm-version=3.4 + +The additional flag ``--system=linux-x86_64`` may be required if you +are using x86_64 system. + +The platform level is not important here because we don't use Android +specific C/C++ API. + +The dependent libraries, such as OpenSSL and libevent should be built +with the toolchain and installed under ``$ANDROID_HOME/usr/local``. +We recommend to build these libraries as static library to make the +deployment easier. libxml2 support is currently disabled. + +We use zlib which comes with Android NDK, so we don't have to build it +by ourselves. + +If SPDY support is required for nghttpx and h2load, build and install +spdylay as well. + +Before running ``android-config`` and ``android-make``, +``ANDROID_HOME`` environment variable must be set to point to the +correct path. Also add ``$ANDROID_HOME/toolchain/bin`` to ``PATH``:: + + $ export PATH=$PATH:$ANDROID_HOME/toolchain/bin + +To configure OpenSSL, use the following script:: + + #!/bin/sh + + if [ -z "$ANDROID_HOME" ]; then + echo 'No $ANDROID_HOME specified.' + exit 1 + fi + PREFIX=$ANDROID_HOME/usr/local + TOOLCHAIN=$ANDROID_HOME/toolchain + PATH=$TOOLCHAIN/bin:$PATH + + export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- + ./Configure --prefix=$PREFIX android + +And run ``make install`` to build and install. + +To configure libevent, use the following script:: + + #!/bin/sh + + if [ -z "$ANDROID_HOME" ]; then + echo 'No $ANDROID_HOME specified.' + exit 1 + fi + PREFIX=$ANDROID_HOME/usr/local + TOOLCHAIN=$ANDROID_HOME/toolchain + PATH=$TOOLCHAIN/bin:$PATH + + ./configure \ + --host=arm-linux-androideabi \ + --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ + --prefix=$PREFIX \ + --disable-shared \ + --enable-static \ + CPPFLAGS=-I$PREFIX/include \ + LDFLAGS=-L$PREFIX/lib + +And run ``make install`` to build and install. + +To configure spdylay, use the following script:: + + if [ -z "$ANDROID_HOME" ]; then + echo 'No $ANDROID_HOME specified.' + exit 1 + fi + PREFIX=$ANDROID_HOME/usr/local + TOOLCHAIN=$ANDROID_HOME/toolchain + PATH=$TOOLCHAIN/bin:$PATH + + ./configure \ + --disable-shared \ + --host=arm-linux-androideabi \ + --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ + --prefix=$PREFIX \ + --without-libxml2 \ + --disable-src \ + --disable-examples \ + CPPFLAGS="-I$PREFIX/include" \ + PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \ + LDFLAGS="-L$PREFIX/lib" + +And run ``make install`` to build and install. After spdylay +installation, edit $ANDROID_HOME/usr/local/lib/pkgconfig/libspdylay.pc +and remove the following line:: + + Requires.private: zlib + +After prerequisite libraries are prepared, run ``android-config`` and +then ``android-make`` to compile nghttp2 source files. + +If all went well, application binaries, such as nghttpx, are created +under src directory. Strip debugging information from the binary +using the following command:: + + $ arm-linux-androideabi-strip src/nghttpx diff --git a/doc/sources/index.rst b/doc/sources/index.rst index 312fee6b..b14cb5d8 100644 --- a/doc/sources/index.rst +++ b/doc/sources/index.rst @@ -17,6 +17,7 @@ Contents: :maxdepth: 2 package_README + building-android-binary tutorial-client tutorial-server tutorial-hpack