summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <404610+tatsuhiro-t@users.noreply.github.com>2023-09-16 16:23:58 +0900
committerGitHub <noreply@github.com>2023-09-16 16:23:58 +0900
commitea6d4240d04da8b0046fda3333a92d64dd39d536 (patch)
treebd452a142da65ad36141b267b02a603c124df7bd
parente5bc00d4494ac6da71e76f8c3511d570d0dfe32f (diff)
parent13ba7a297f0f9fa61b1dd1a99721169b8e41a754 (diff)
Merge pull request #2092 from aria2/dockerfile-android
Add Dockerfile.android
-rw-r--r--.github/workflows/android.yml24
-rw-r--r--Dockerfile.android147
2 files changed, 171 insertions, 0 deletions
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
new file mode 100644
index 00000000..a5133a94
--- /dev/null
+++ b/.github/workflows/android.yml
@@ -0,0 +1,24 @@
+name: android
+
+on:
+ push:
+ paths:
+ - Dockerfile.android
+ schedule:
+ - cron: '30 1 * * *'
+
+permissions: read-all
+
+jobs:
+ build:
+ runs-on: ubuntu-22.04
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Build
+ uses: docker/build-push-action@v5
+ with:
+ file: Dockerfile.android
+ context: .
diff --git a/Dockerfile.android b/Dockerfile.android
new file mode 100644
index 00000000..034d48af
--- /dev/null
+++ b/Dockerfile.android
@@ -0,0 +1,147 @@
+# 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
+ENV 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 https://github.com/aria2/aria2 -b $ARIA2_VERSION --depth 1
+
+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