Skip to content

Commit

Permalink
Try #1023: --target aarch64-linux-android
Browse files Browse the repository at this point in the history
  • Loading branch information
bors[bot] authored Sep 23, 2022
2 parents a80399e + 8a888c5 commit 03fd12f
Show file tree
Hide file tree
Showing 9 changed files with 284 additions and 116 deletions.
4 changes: 4 additions & 0 deletions .changes/1023.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"description": "support different Android NDK, API, and Android versions using Docker build args.",
"type": "added"
}
15 changes: 10 additions & 5 deletions docker/Dockerfile.aarch64-linux-android
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,22 @@ RUN /cmake.sh
COPY xargo.sh /
RUN /xargo.sh

COPY qemu.sh /
RUN /qemu.sh aarch64

ARG ANDROID_NDK=r21d
ARG ANDROID_SDK=28
ARG ANDROID_VERSION=9.0.0_r1
ARG ANDROID_SYSTEM_COMPLETE=0

COPY android-ndk.sh /
RUN /android-ndk.sh arm64 28
RUN /android-ndk.sh arm64
ENV PATH=$PATH:/android-ndk/bin

COPY android-system.sh /
RUN /android-system.sh arm64

COPY qemu.sh /
RUN /qemu.sh aarch64

RUN cp /android-ndk/sysroot/usr/lib/aarch64-linux-android/28/libz.so /system/lib/
RUN cp /android-ndk/sysroot/usr/lib/aarch64-linux-android/$ANDROID_SDK/libz.so /system/lib/

COPY android-runner /

Expand Down
15 changes: 10 additions & 5 deletions docker/Dockerfile.arm-linux-androideabi
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,22 @@ RUN /cmake.sh
COPY xargo.sh /
RUN /xargo.sh

COPY qemu.sh /
RUN /qemu.sh arm

ARG ANDROID_NDK=r21d
ARG ANDROID_SDK=28
ARG ANDROID_VERSION=9.0.0_r1
ARG ANDROID_SYSTEM_COMPLETE=0

COPY android-ndk.sh /
RUN /android-ndk.sh arm 28
RUN /android-ndk.sh arm
ENV PATH=$PATH:/android-ndk/bin

COPY android-system.sh /
RUN /android-system.sh arm

COPY qemu.sh /
RUN /qemu.sh arm

RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/28/libz.so /system/lib/
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/$ANDROID_SDK/libz.so /system/lib/

COPY android-runner /

Expand Down
15 changes: 10 additions & 5 deletions docker/Dockerfile.armv7-linux-androideabi
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,22 @@ RUN /cmake.sh
COPY xargo.sh /
RUN /xargo.sh

COPY qemu.sh /
RUN /qemu.sh arm

ARG ANDROID_NDK=r21d
ARG ANDROID_SDK=28
ARG ANDROID_VERSION=9.0.0_r1
ARG ANDROID_SYSTEM_COMPLETE=0

COPY android-ndk.sh /
RUN /android-ndk.sh arm 28
RUN /android-ndk.sh arm
ENV PATH=$PATH:/android-ndk/bin

COPY android-system.sh /
RUN /android-system.sh arm

COPY qemu.sh /
RUN /qemu.sh arm

RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/28/libz.so /system/lib/
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/$ANDROID_SDK/libz.so /system/lib/

COPY android-runner /

Expand Down
24 changes: 15 additions & 9 deletions docker/Dockerfile.i686-linux-android
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,30 @@ RUN /cmake.sh
COPY xargo.sh /
RUN /xargo.sh

COPY android-ndk.sh /
RUN /android-ndk.sh x86 28
ENV PATH=$PATH:/android-ndk/bin

COPY android-system.sh /
RUN /android-system.sh x86

# We could supposedly directly run i686 binaries like we do for x86_64, but
# doing so generates an assertion failure:
# ... assertion failed: signal(libc::SIGPIPE, libc::SIG_IGN) != libc::SIG_ERR
# ... src/libstd/sys/unix/mod.rs
# fatal runtime error: failed to initiate panic, error 5
#
# Running with qemu works as expected
# Running with qemu works as expected. it also ensures that're we're
# running on a CPU common 32-bit x86 systems.
COPY qemu.sh /
RUN /qemu.sh i386

RUN cp /android-ndk/sysroot/usr/lib/i686-linux-android/28/libz.so /system/lib/
ARG ANDROID_NDK=r21d
ARG ANDROID_SDK=28
ARG ANDROID_VERSION=9.0.0_r1
ARG ANDROID_SYSTEM_COMPLETE=0

COPY android-ndk.sh /
RUN /android-ndk.sh x86
ENV PATH=$PATH:/android-ndk/bin

COPY android-system.sh /
RUN /android-system.sh x86

RUN cp /android-ndk/sysroot/usr/lib/i686-linux-android/$ANDROID_SDK/libz.so /system/lib/

COPY android-runner /

Expand Down
15 changes: 10 additions & 5 deletions docker/Dockerfile.thumbv7neon-linux-androideabi
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,22 @@ RUN /cmake.sh
COPY xargo.sh /
RUN /xargo.sh

COPY qemu.sh /
RUN /qemu.sh arm

ARG ANDROID_NDK=r21d
ARG ANDROID_SDK=28
ARG ANDROID_VERSION=9.0.0_r1
ARG ANDROID_SYSTEM_COMPLETE=0

COPY android-ndk.sh /
RUN /android-ndk.sh arm 28
RUN /android-ndk.sh arm
ENV PATH=$PATH:/android-ndk/bin

COPY android-system.sh /
RUN /android-system.sh arm

COPY qemu.sh /
RUN /qemu.sh arm

RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/28/libz.so /system/lib/
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/$ANDROID_SDK/libz.so /system/lib/

COPY android-runner /

Expand Down
17 changes: 11 additions & 6 deletions docker/Dockerfile.x86_64-linux-android
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,23 @@ RUN /cmake.sh
COPY xargo.sh /
RUN /xargo.sh

# Using qemu allows older host cpus (without sse4) to execute the target binaries
COPY qemu.sh /
RUN /qemu.sh x86_64

ARG ANDROID_NDK=r21d
ARG ANDROID_SDK=28
ARG ANDROID_VERSION=9.0.0_r1
ARG ANDROID_SYSTEM_COMPLETE=0

COPY android-ndk.sh /
RUN /android-ndk.sh x86_64 28
RUN /android-ndk.sh x86_64
ENV PATH=$PATH:/android-ndk/bin

COPY android-system.sh /
RUN /android-system.sh x86_64

# Using qemu allows older host cpus (without sse4) to execute the target binaries
COPY qemu.sh /
RUN /qemu.sh x86_64

RUN cp /android-ndk/sysroot/usr/lib/x86_64-linux-android/28/libz.so /system/lib/
RUN cp /android-ndk/sysroot/usr/lib/x86_64-linux-android/$ANDROID_SDK/libz.so /system/lib/

COPY android-runner /

Expand Down
30 changes: 20 additions & 10 deletions docker/android-ndk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,36 @@ set -euo pipefail
# shellcheck disable=SC1091
. lib.sh

NDK_URL=https://dl.google.com/android/repository/android-ndk-r21d-linux-x86_64.zip
NDK_OS=linux
NDK_PLATFORM="${NDK_OS}-x86_64"
# format is r21d, r25b, etc.
NDK_VERSION="${ANDROID_NDK:1:2}"
# android NDK 23 and higher moved from `linux-x86_64` to `linux`
if [[ "${NDK_VERSION}" -ge 23 ]]; then
NDK_FILENAME="android-ndk-${ANDROID_NDK}-${NDK_OS}.zip"
else
NDK_FILENAME="android-ndk-${ANDROID_NDK}-${NDK_PLATFORM}.zip"
fi
NDK_URL="https://dl.google.com/android/repository/${NDK_FILENAME}"

main() {
local arch="${1}" \
api="${2}"
local arch="${1}"

install_packages curl unzip python
# python3 is needed for newer NDK versions
install_packages curl unzip python python3

local td
td="$(mktemp -d)"

pushd "${td}"
curl --retry 3 -sSfL "${NDK_URL}" -O
unzip -q android-ndk-*.zip
rm android-ndk-*.zip
pushd android-ndk-*
unzip -q "${NDK_FILENAME}"
rm "${NDK_FILENAME}"
pushd "android-ndk-${ANDROID_NDK}"
./build/tools/make_standalone_toolchain.py \
--install-dir /android-ndk \
--arch "${arch}" \
--api "${api}"
--install-dir /android-ndk \
--arch "${arch}" \
--api "${ANDROID_SDK}"

# clean up unused toolchains to reduce image size
local triple
Expand Down
Loading

0 comments on commit 03fd12f

Please sign in to comment.