Browse Source

Update android build dependencies

Update android build dependencies.  Use android NDK r20 and build
aarch64 binary.
Tatsuhiro Tsujikawa 6 years ago
parent
commit
9f5758570a
7 changed files with 38 additions and 82 deletions
  1. 4 4
      README.android
  2. 9 25
      README.rst
  3. 14 6
      android-config
  4. 0 41
      android-make
  5. 6 5
      android-release
  6. 4 0
      makerelease
  7. 1 1
      src/a2io.h

+ 4 - 4
README.android

@@ -42,11 +42,11 @@ aria2c executable was generated using android-ndk-r14b.
 
 
 The following libraries were statically linked.
 The following libraries were statically linked.
 
 
-* openssl 1.0.2o
-* expat 2.2.5
+* openssl 1.1.1c
+* expat 2.2.7
 * zlib 1.2.11
 * zlib 1.2.11
-* c-ares 1.14.0
-* libssh2 1.8.0
+* c-ares 1.15.0
+* libssh2 1.9.0
 
 
 Since Android does not have ``/etc/resolv.conf``, c-ares (asynchronous
 Since Android does not have ``/etc/resolv.conf``, c-ares (asynchronous
 DNS resolver) is disabled by default. But name resolution is sometimes
 DNS resolver) is disabled by default. But name resolution is sometimes

+ 9 - 25
README.rst

@@ -359,7 +359,7 @@ Cross-compiling Android binary
 In this section, we describe how to build Android binary using Android
 In this section, we describe how to build Android binary using Android
 NDK cross-compiler on Debian Linux.
 NDK cross-compiler on Debian Linux.
 
 
-At the time of this writing, android-ndk-r14b should compile aria2
+At the time of this writing, Android NDK r20 should compile aria2
 without errors.
 without errors.
 
 
 ``android-config`` script is a configure script wrapper for Android
 ``android-config`` script is a configure script wrapper for Android
@@ -376,33 +376,17 @@ When building the above libraries, make sure that disable shared
 library and enable only static library. We are going to link those
 library and enable only static library. We are going to link those
 libraries statically.
 libraries statically.
 
 
-We use zlib which comes with Android NDK, so we don't have to build it
-by ourselves.
+``android-config`` assumes that ``$ANDROID_HOME`` and ``$NDK``
+environment variables are defined.
 
 
-``android-config`` assumes the existence of ``$ANDROID_HOME``
-environment variable which must fulfill the following conditions:
+We currently use Android NDK r20.  ``$NDK`` should point to the
+directory to Anroid NDK.  The build tools will be found under
+``$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/``.
 
 
-* Android NDK toolchain is installed under
-  ``$ANDROID_HOME/toolchain``.  Refer to `Standalone Toolchain
-  <https://developer.android.com/ndk/guides/standalone_toolchain.html>`_
-  for more details, but it is a bit out of date.
+All the dependent libraries must be installed under
+``$ANDROID_HOME/usr/local``.
 
 
-  To install toolchain under ``$ANDROID_HOME/toolchain``, do this:
-
-  .. code-block:: text
-
-     $NDK/build/tools/make_standalone_toolchain.py \
-        --arch arm --api 16 --stl=gnustl \
-        --install-dir $ANDROID_HOME/toolchain
-
-* The dependent libraries must be installed under
-  ``$ANDROID_HOME/usr/local``.
-
-Before running ``android-config`` and ``android-make``,
-``$ANDROID_HOME`` environment variable must be set to point to the
-correct path.
-
-After ``android-config``, run ``android-make`` to compile sources.
+After ``android-config``, run ``make`` to compile sources.
 
 
 Building documentation
 Building documentation
 ----------------------
 ----------------------

+ 14 - 6
android-config

@@ -35,12 +35,15 @@ if [ -z "$ANDROID_HOME" ]; then
     echo 'No $ANDROID_HOME specified.'
     echo 'No $ANDROID_HOME specified.'
     exit 1
     exit 1
 fi
 fi
+if [ -z "$NDK" ]; then
+    echo 'No $NDK specified.'
+    exit 1
+fi
 PREFIX=$ANDROID_HOME/usr/local
 PREFIX=$ANDROID_HOME/usr/local
-TOOLCHAIN=$ANDROID_HOME/toolchain
-PATH=$TOOLCHAIN/bin:$PATH
+TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
 
 
 ./configure \
 ./configure \
-    --host=arm-linux-androideabi \
+    --host=aarch64-linux-android \
     --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
     --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
     --disable-nls \
     --disable-nls \
     --without-gnutls \
     --without-gnutls \
@@ -51,10 +54,15 @@ PATH=$TOOLCHAIN/bin:$PATH
     --with-libcares \
     --with-libcares \
     --with-libz \
     --with-libz \
     --with-libssh2 \
     --with-libssh2 \
-    CC="$TOOLCHAIN"/bin/arm-linux-androideabi-clang \
-    CXX="$TOOLCHAIN"/bin/arm-linux-androideabi-clang++ \
+    AR=$TOOLCHAIN/bin/aarch64-linux-android-ar \
+    AS=$TOOLCHAIN/bin/aarch64-linux-android-as \
+    CC=$TOOLCHAIN/bin/aarch64-linux-android29-clang \
+    CXX=$TOOLCHAIN/bin/aarch64-linux-android29-clang++ \
+    LD=$TOOLCHAIN/bin/aarch64-linux-android-ld \
+    RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib \
+    STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip \
     CXXFLAGS="-Os -g" \
     CXXFLAGS="-Os -g" \
     CFLAGS="-Os -g" \
     CFLAGS="-Os -g" \
     CPPFLAGS="-fPIE" \
     CPPFLAGS="-fPIE" \
-    LDFLAGS="-fPIE -pie -L$PREFIX/lib" \
+    LDFLAGS="-fPIE -pie -L$PREFIX/lib -static-libstdc++" \
     PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig"
     PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig"

+ 0 - 41
android-make

@@ -1,41 +0,0 @@
-#!/bin/sh
-
-# aria2 - The high speed download utility
-#
-# Copyright (C) 2012 Tatsuhiro Tsujikawa
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-#
-# In addition, as a special exception, the copyright holders give
-# permission to link the code of portions of this program with the
-# OpenSSL library under certain conditions as described in each
-# individual source file, and distribute linked combinations
-# including the two.
-# You must obey the GNU General Public License in all respects
-# for all of the code used other than OpenSSL.  If you modify
-# file(s) with this exception, you may extend this exception to your
-# version of the file(s), but you are not obligated to do so.  If you
-# do not wish to do so, delete this exception statement from your
-# version.  If you delete this exception statement from all source
-# files in the program, then also delete it here.
-
-if [ -z "$ANDROID_HOME" ]; then
-    echo 'No $ANDROID_HOME specified.'
-    exit 1
-fi
-TOOLCHAIN=$ANDROID_HOME/toolchain
-PATH=$TOOLCHAIN/bin:$PATH
-
-make "$@"

+ 6 - 5
android-release

@@ -31,11 +31,12 @@
 # version.  If you delete this exception statement from all source
 # version.  If you delete this exception statement from all source
 # files in the program, then also delete it here.
 # files in the program, then also delete it here.
 
 
-if [ -z "$ANDROID_HOME" ]; then
-    echo 'No $ANDROID_HOME specified.'
+if [ -z "$NDK" ]; then
+    echo 'No $NDK specified.'
     exit 1
     exit 1
 fi
 fi
-TOOLCHAIN=$ANDROID_HOME/toolchain
+
+TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
 PATH=$TOOLCHAIN/bin:$PATH
 PATH=$TOOLCHAIN/bin:$PATH
 
 
 # cd to the directory where this script exists.
 # cd to the directory where this script exists.
@@ -49,8 +50,8 @@ if [ -z "$VERSION" ]; then
     exit 1
     exit 1
 fi
 fi
 
 
-DIST_DIR=aria2-$VERSION-android-arm-build1
-arm-linux-androideabi-strip src/aria2c
+DIST_DIR=aria2-$VERSION-aarch64-linux-android-build1
+aarch64-linux-android-strip src/aria2c
 mkdir $DIST_DIR
 mkdir $DIST_DIR
 cp AUTHORS COPYING ChangeLog LICENSE.OpenSSL NEWS README.html README.android \
 cp AUTHORS COPYING ChangeLog LICENSE.OpenSSL NEWS README.html README.android \
     src/aria2c $DIST_DIR
     src/aria2c $DIST_DIR

+ 4 - 0
makerelease

@@ -4,6 +4,10 @@ if [ -z "$ANDROID_HOME" ]; then
     echo 'No $ANDROID_HOME specified.'
     echo 'No $ANDROID_HOME specified.'
     exit 1
     exit 1
 fi
 fi
+if [ -z "$NDK" ]; then
+    echo 'No $NDK specified.'
+    exit 1
+fi
 
 
 VERSION=$1
 VERSION=$1
 PREV_VERSION=$2
 PREV_VERSION=$2

+ 1 - 1
src/a2io.h

@@ -147,7 +147,7 @@
 // # define a2fseek(fp, offset, origin): No fseek64 and not used in aria2
 // # define a2fseek(fp, offset, origin): No fseek64 and not used in aria2
 #  define a2fstat(fd, buf) fstat64(fd, buf)
 #  define a2fstat(fd, buf) fstat64(fd, buf)
 // # define a2ftell(fd): No ftell64 and not used in aria2
 // # define a2ftell(fd): No ftell64 and not used in aria2
-#  define a2_struct_stat struct stat
+#  define a2_struct_stat struct stat64
 #  define a2stat(path, buf) stat64(path, buf)
 #  define a2stat(path, buf) stat64(path, buf)
 #  define a2mkdir(path, openMode) mkdir(path, openMode)
 #  define a2mkdir(path, openMode) mkdir(path, openMode)
 #  define a2utimbuf utimbuf
 #  define a2utimbuf utimbuf