From d13ed04b1738da082870bb1be79e430d13b5797e Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 19 Oct 2014 21:51:43 +0900 Subject: [PATCH] Add Dockerfile.android --- Dockerfile.android | 100 ++++++++++++++++++++++++ Makefile.am | 3 +- doc/sources/building-android-binary.rst | 5 ++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 Dockerfile.android diff --git a/Dockerfile.android b/Dockerfile.android new file mode 100644 index 00000000..c53c7079 --- /dev/null +++ b/Dockerfile.android @@ -0,0 +1,100 @@ +# Dockerfile to build nghttp2 android binary +# +# $ sudo docker build -t nghttp2-android - < Dockerfile.android +# +# After successful build, android binaries are located under +# /root/build/nghttp2. You can copy the binary using docker cp. For +# example, to copy nghttpx binary to host file system location +# /path/to/dest, do this: +# +# $ sudo docker run -v /path/to/dest:/out nghttp2-android cp /root/build/nghttp2/src/nghttpx /out + +FROM ubuntu + +MAINTAINER Tatsuhiro Tsujikawa + +ENV ANDROID_HOME /root/android +ENV PREFIX $ANDROID_HOME/usr/local +ENV TOOLCHAIN $ANDROID_HOME/toolchain +ENV PATH $TOOLCHAIN/bin:$PATH + +# It would be better to use nearest ubuntu archive mirror for faster +# downloads. +# RUN sed -ie 's/archive\.ubuntu/jp.archive.ubuntu/g' /etc/apt/sources.list + +RUN apt-get update +# genisoimage, libc6-i386 and lib32stdc++6 are required to decompress ndk. +RUN apt-get install -y make binutils autoconf automake autotools-dev libtool \ + pkg-config git curl dpkg-dev libxml2-dev \ + genisoimage libc6-i386 lib32stdc++6 + +WORKDIR /root/build +RUN curl -L -O http://dl.google.com/android/ndk/android-ndk-r10c-linux-x86_64.bin +RUN chmod a+x android-ndk-r10c-linux-x86_64.bin +RUN ./android-ndk-r10c-linux-x86_64.bin + +WORKDIR /root/build/android-ndk-r10c +RUN /bin/bash build/tools/make-standalone-toolchain.sh \ + --install-dir=$ANDROID_HOME/toolchain \ + --toolchain=arm-linux-androideabi-4.9 --llvm-version=3.5 \ + --system=linux-x86_64 + +WORKDIR /root/build +RUN git clone https://github.com/tatsuhiro-t/spdylay +WORKDIR /root/build/spdylay +RUN autoreconf -i && \ + ./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" && \ + make install + +WORKDIR /root/build +RUN curl -L -O https://www.openssl.org/source/openssl-1.0.1j.tar.gz +RUN tar xf openssl-1.0.1j.tar.gz +WORKDIR /root/build/openssl-1.0.1j +RUN export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- && \ + ./Configure --prefix=$PREFIX android && \ + make && make install_sw + +WORKDIR /root/build +RUN curl -L -O https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz +RUN tar xf libevent-2.0.21-stable.tar.gz +WORKDIR /root/build/libevent-2.0.21-stable +RUN ./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 && \ + make install + +WORKDIR /root/build +RUN git clone https://github.com/tatsuhiro-t/nghttp2 +WORKDIR /root/build/nghttp2 +RUN autoreconf -i && \ + ./configure \ + --disable-shared \ + --host=arm-linux-androideabi \ + --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ + --with-xml-prefix="$PREFIX" \ + --without-libxml2 \ + --disable-python-bindings \ + --disable-examples \ + --disable-threads \ + LIBSPDYLAY_CFLAGS=-I$PREFIX/usr/local/include \ + LIBSPDYLAY_LIBS="-L$PREFIX/usr/local/lib -lspdylay" \ + CPPFLAGS="-I$PREFIX/include" \ + PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \ + LDFLAGS="-L$PREFIX/lib" && \ + make && \ + arm-linux-androideabi-strip src/nghttpx src/nghttpd src/nghttp diff --git a/Makefile.am b/Makefile.am index cbd09552..5657382e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -26,4 +26,5 @@ ACLOCAL_AMFLAGS = -I m4 dist_doc_DATA = README.rst -EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-make +EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-make \ + Dockerfile.android diff --git a/doc/sources/building-android-binary.rst b/doc/sources/building-android-binary.rst index 360b1122..3b4a8a8a 100644 --- a/doc/sources/building-android-binary.rst +++ b/doc/sources/building-android-binary.rst @@ -5,6 +5,11 @@ In this article, we briefly describe how to build Android binary using `Android NDK `_ cross-compiler on Debian Linux. +The easiest way to build android binary is use Dockerfile.android. +See Dockerfile.android for more details. If you cannot use +Dockerfile.android for whatever reason, continue to read the rest of +this article. + 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