Files
aria2/Dockerfile.android
Tatsuhiro Tsujikawa 85142435c6 Make releases with docker
This is slightly different from the current procedure because now
android and mingw binaries are built from source code fetched from the
remote repository.
2023-09-17 19:59:50 +09:00

148 lines
4.4 KiB
Docker

# vim: ft=dockerfile:
# Dockerfile to build aria2 android binary
#
# $ sudo docker build -t aria2-android - < Dockerfile.android
#
# After successful build, android binary is located under
# /root/build/aria2. You can copy the binary using docker cp. For
# example, to copy aria2c binary to host file system location
# /path/to/dest, do this:
#
# $ sudo docker run --rm -it -v /path/to/dest:/out aria2-android cp /root/build/aria2/src/aria2c /out
FROM ubuntu:22.04
MAINTAINER Tatsuhiro Tsujikawa
WORKDIR /root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
unzip bzip2 make binutils autoconf automake autotools-dev autopoint \
libtool pkg-config git curl ca-certificates && \
rm -rf /var/cache/apt/*
# NDK version
ENV NDK_VERSION=r25c
ENV NDK=/root/android-ndk-$NDK_VERSION
ENV TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 \
HOST=aarch64-linux-android \
API=33
ENV AR=$TOOLCHAIN/bin/llvm-ar \
CC=$TOOLCHAIN/bin/$HOST$API-clang \
CXX=$TOOLCHAIN/bin/$HOST$API-clang++ \
LD=$TOOLCHAIN/bin/ld \
RANDLIB=$TOOLCHAIN/bin/llvm-ranlib \
STRIP=$TOOLCHAIN/bin/llvm-strip \
PREFIX=/root/usr/local
# Download NDK
RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux.zip && \
unzip -q android-ndk-$NDK_VERSION-linux.zip && \
rm android-ndk-$NDK_VERSION-linux.zip
# aria2 version
ARG ARIA2_VERSION=master
# Library versions
ENV OPENSSL_VERSION=1.1.1w
ENV OPENSSL_ARCHIVE=openssl-$OPENSSL_VERSION.tar.gz
ENV OPENSSL_URI=https://www.openssl.org/source/$OPENSSL_ARCHIVE
ENV LIBEXPAT_VERSION=2.5.0
ENV LIBEXPAT_ARCHIVE=expat-$LIBEXPAT_VERSION.tar.bz2
ENV LIBEXPAT_URI=https://github.com/libexpat/libexpat/releases/download/R_2_5_0/$LIBEXPAT_ARCHIVE
ENV ZLIB_VERSION=1.3
ENV ZLIB_ARCHIVE=zlib-$ZLIB_VERSION.tar.gz
ENV ZLIB_URI=https://zlib.net/$ZLIB_ARCHIVE
ENV CARES_VERSION=1.19.1
ENV CARES_ARCHIVE=c-ares-$CARES_VERSION.tar.gz
ENV CARES_URI=https://c-ares.haxx.se/download/$CARES_ARCHIVE
ENV LIBSSH2_VERSION=1.11.0
ENV LIBSSH2_ARCHIVE=libssh2-$LIBSSH2_VERSION.tar.bz2
ENV LIBSSH2_URI=https://libssh2.org/download/$LIBSSH2_ARCHIVE
# Build OpenSSL
WORKDIR /root/build
RUN curl -L -O $OPENSSL_URI && tar xf $OPENSSL_ARCHIVE && rm $OPENSSL_ARCHIVE
WORKDIR /root/build/openssl-$OPENSSL_VERSION
RUN export ANDROID_NDK_HOME=$NDK PATH=$TOOLCHAIN/bin:$PATH && \
./Configure no-shared --prefix=$PREFIX android-arm64 && \
make -j$(nproc) && make install_sw
# Build libexpat
WORKDIR /root/build
RUN curl -L -O $LIBEXPAT_URI && tar xf $LIBEXPAT_ARCHIVE && rm $LIBEXPAT_ARCHIVE
WORKDIR /root/build/expat-$LIBEXPAT_VERSION
RUN ./configure \
--host=$HOST \
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
--prefix=$PREFIX \
--disable-shared && \
make -j$(nproc) install
# Build zlib
WORKDIR /root/build
RUN curl -L -O $ZLIB_URI && tar xf $ZLIB_ARCHIVE && rm $ZLIB_ARCHIVE
WORKDIR /root/build/zlib-$ZLIB_VERSION
RUN ./configure \
--prefix=$PREFIX \
--libdir=$PREFIX/lib \
--includedir=$PREFIX/include \
--static && \
make -j$(nproc) install
# Build c-ares
WORKDIR /root/build
RUN curl -L -O $CARES_URI && tar xf $CARES_ARCHIVE && rm $CARES_ARCHIVE
WORKDIR /root/build/c-ares-$CARES_VERSION
RUN ./configure \
--host=$HOST \
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
--prefix=$PREFIX \
--disable-shared && \
make -j$(nproc) install
# Build libssh2
WORKDIR /root/build
RUN curl -L -O $LIBSSH2_URI && tar xf $LIBSSH2_ARCHIVE && rm $LIBSSH2_ARCHIVE
WORKDIR /root/build/libssh2-$LIBSSH2_VERSION
RUN ./configure \
--host=$HOST \
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
--prefix=$PREFIX \
--disable-shared && \
make -j$(nproc) install
# Build aria2
WORKDIR /root/build
RUN git clone -b $ARIA2_VERSION --depth 1 https://github.com/aria2/aria2
WORKDIR /root/build/aria2
RUN autoreconf -i && \
./configure \
--host=$HOST \
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
--disable-nls \
--without-gnutls \
--with-openssl \
--without-sqlite3 \
--without-libxml2 \
--with-libexpat \
--with-libcares \
--with-libz \
--with-libssh2 \
CXXFLAGS="-Os -g" \
CFLAGS="-Os -g" \
CPPFLAGS="-fPIE" \
LDFLAGS="-fPIE -pie -L$PREFIX/lib -static-libstdc++" \
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" && \
make -j$(nproc) && \
$STRIP src/aria2c