• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# vim: ft=dockerfile:
2# Dockerfile to build nghttp2 android binary
3#
4# $ sudo docker build -t nghttp2-android - < Dockerfile.android
5#
6# After successful build, android binaries are located under
7# /root/build/nghttp2.  You can copy the binary using docker cp.  For
8# example, to copy nghttpx binary to host file system location
9# /path/to/dest, do this:
10#
11# $ sudo docker run -v /path/to/dest:/out nghttp2-android cp /root/build/nghttp2/src/nghttpx /out
12
13
14# Only use standalone-toolchain for reduce size
15FROM ubuntu:xenial
16MAINTAINER Tatsuhiro Tsujikawa
17ENV ANDROID_HOME /root
18ENV TOOLCHAIN $ANDROID_HOME/toolchain
19ENV PATH $TOOLCHAIN/bin:$PATH
20
21ENV NDK_VERSION r14b
22
23WORKDIR /root
24RUN apt-get update && \
25    apt-get install -y unzip make binutils autoconf \
26      automake autotools-dev libtool pkg-config git \
27      curl dpkg-dev libxml2-dev genisoimage libc6-i386 \
28      lib32stdc++6 python&& \
29    rm -rf /var/cache/apk/*
30
31# Install toolchain
32RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux-x86_64.zip && \
33   unzip -q android-ndk-$NDK_VERSION-linux-x86_64.zip && \
34   rm android-ndk-$NDK_VERSION-linux-x86_64.zip && \
35   mkdir -p $ANDROID_HOME/toolchain && \
36   $ANDROID_HOME/android-ndk-$NDK_VERSION/build/tools/make-standalone-toolchain.sh \
37       --install-dir=$ANDROID_HOME/toolchain \
38       --toolchain=arm-linux-androideabi-4.9 \
39       --force && \
40   rm -r android-ndk-$NDK_VERSION
41
42ENV PREFIX /root/usr/local
43
44# Setup version of libraries
45ENV OPENSSL_VERSION 1.0.2d
46ENV SPDYLAY_VERSION v1.4.0
47ENV LIBEV_VERSION 4.19
48ENV ZLIB_VERSION 1.2.8
49ENV CARES_VERSION 1.13.0
50ENV NGHTTP2_VERSION v1.24.0
51
52WORKDIR /root/build
53RUN git clone https://github.com/tatsuhiro-t/spdylay -b $SPDYLAY_VERSION --depth 1
54WORKDIR /root/build/spdylay
55RUN autoreconf -i && \
56    ./configure \
57    --disable-shared \
58    --host=arm-linux-androideabi \
59    --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
60    --prefix=$PREFIX \
61    --without-libxml2 \
62    --disable-src \
63    --disable-examples \
64    CPPFLAGS="-I$PREFIX/include" \
65    PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
66    LDFLAGS="-L$PREFIX/lib" && \
67    make install
68
69WORKDIR /root/build
70RUN curl -L -O https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz && \
71    tar xf openssl-$OPENSSL_VERSION.tar.gz && \
72    rm openssl-$OPENSSL_VERSION.tar.gz
73
74WORKDIR /root/build/openssl-$OPENSSL_VERSION
75RUN export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- && \
76    ./Configure --prefix=$PREFIX android && \
77    make && make install_sw
78
79WORKDIR /root/build
80RUN curl -L -O http://dist.schmorp.de/libev/Attic/libev-$LIBEV_VERSION.tar.gz && \
81    curl -L -O https://gist.github.com/tatsuhiro-t/48c45f08950f587180ed/raw/80a8f003b5d1091eae497c5995bbaa68096e739b/libev-4.19-android.patch && \
82    tar xf libev-$LIBEV_VERSION.tar.gz && \
83    rm libev-$LIBEV_VERSION.tar.gz
84
85WORKDIR /root/build/libev-$LIBEV_VERSION
86RUN patch -p1 < ../libev-4.19-android.patch && \
87    ./configure \
88    --host=arm-linux-androideabi \
89    --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
90    --prefix=$PREFIX \
91    --disable-shared \
92    --enable-static \
93    CPPFLAGS=-I$PREFIX/include \
94    LDFLAGS=-L$PREFIX/lib && \
95    make install
96
97WORKDIR /root/build
98RUN curl -L -O https://downloads.sourceforge.net/project/libpng/zlib/$ZLIB_VERSION/zlib-$ZLIB_VERSION.tar.gz && \
99    tar xf zlib-$ZLIB_VERSION.tar.gz && \
100    rm zlib-$ZLIB_VERSION.tar.gz
101
102WORKDIR /root/build/zlib-$ZLIB_VERSION
103RUN HOST=arm-linux-androideabi \
104    CC=$HOST-gcc \
105    AR=$HOST-ar \
106    LD=$HOST-ld \
107    RANLIB=$HOST-ranlib \
108    STRIP=$HOST-strip \
109    ./configure \
110    --prefix=$PREFIX \
111    --libdir=$PREFIX/lib \
112    --includedir=$PREFIX/include \
113    --static && \
114    make install
115
116
117WORKDIR /root/build
118RUN curl -L -O https://c-ares.haxx.se/download/c-ares-$CARES_VERSION.tar.gz && \
119    tar xf c-ares-$CARES_VERSION.tar.gz && \
120    rm c-ares-$CARES_VERSION.tar.gz
121
122WORKDIR /root/build/c-ares-$CARES_VERSION
123RUN ./configure \
124      --host=arm-linux-androideabi \
125      --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
126      --prefix=$PREFIX \
127      --disable-shared && \
128    make install
129
130WORKDIR /root/build
131RUN git clone https://github.com/nghttp2/nghttp2 -b $NGHTTP2_VERSION --depth 1
132WORKDIR /root/build/nghttp2
133RUN autoreconf -i && \
134    ./configure \
135    --enable-app \
136    --disable-shared \
137    --host=arm-linux-androideabi \
138    --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
139    --with-xml-prefix="$PREFIX" \
140    --without-libxml2 \
141    --disable-python-bindings \
142    --disable-examples \
143    --disable-threads \
144      CC="$TOOLCHAIN"/bin/arm-linux-androideabi-clang \
145      CXX="$TOOLCHAIN"/bin/arm-linux-androideabi-clang++ \
146      CPPFLAGS="-fPIE -I$PREFIX/include" \
147      PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
148      LDFLAGS="-fPIE -pie -L$PREFIX/lib" && \
149    make && \
150    arm-linux-androideabi-strip src/nghttpx src/nghttpd src/nghttp
151