Skip to content

Commit 03fd12f

Browse files
authored
Try #1023: --target aarch64-linux-android
2 parents a80399e + 8a888c5 commit 03fd12f

9 files changed

+284
-116
lines changed

.changes/1023.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"description": "support different Android NDK, API, and Android versions using Docker build args.",
3+
"type": "added"
4+
}

docker/Dockerfile.aarch64-linux-android

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,22 @@ RUN /cmake.sh
1010
COPY xargo.sh /
1111
RUN /xargo.sh
1212

13+
COPY qemu.sh /
14+
RUN /qemu.sh aarch64
15+
16+
ARG ANDROID_NDK=r21d
17+
ARG ANDROID_SDK=28
18+
ARG ANDROID_VERSION=9.0.0_r1
19+
ARG ANDROID_SYSTEM_COMPLETE=0
20+
1321
COPY android-ndk.sh /
14-
RUN /android-ndk.sh arm64 28
22+
RUN /android-ndk.sh arm64
1523
ENV PATH=$PATH:/android-ndk/bin
1624

1725
COPY android-system.sh /
1826
RUN /android-system.sh arm64
1927

20-
COPY qemu.sh /
21-
RUN /qemu.sh aarch64
22-
23-
RUN cp /android-ndk/sysroot/usr/lib/aarch64-linux-android/28/libz.so /system/lib/
28+
RUN cp /android-ndk/sysroot/usr/lib/aarch64-linux-android/$ANDROID_SDK/libz.so /system/lib/
2429

2530
COPY android-runner /
2631

docker/Dockerfile.arm-linux-androideabi

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,22 @@ RUN /cmake.sh
1010
COPY xargo.sh /
1111
RUN /xargo.sh
1212

13+
COPY qemu.sh /
14+
RUN /qemu.sh arm
15+
16+
ARG ANDROID_NDK=r21d
17+
ARG ANDROID_SDK=28
18+
ARG ANDROID_VERSION=9.0.0_r1
19+
ARG ANDROID_SYSTEM_COMPLETE=0
20+
1321
COPY android-ndk.sh /
14-
RUN /android-ndk.sh arm 28
22+
RUN /android-ndk.sh arm
1523
ENV PATH=$PATH:/android-ndk/bin
1624

1725
COPY android-system.sh /
1826
RUN /android-system.sh arm
1927

20-
COPY qemu.sh /
21-
RUN /qemu.sh arm
22-
23-
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/28/libz.so /system/lib/
28+
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/$ANDROID_SDK/libz.so /system/lib/
2429

2530
COPY android-runner /
2631

docker/Dockerfile.armv7-linux-androideabi

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,22 @@ RUN /cmake.sh
1010
COPY xargo.sh /
1111
RUN /xargo.sh
1212

13+
COPY qemu.sh /
14+
RUN /qemu.sh arm
15+
16+
ARG ANDROID_NDK=r21d
17+
ARG ANDROID_SDK=28
18+
ARG ANDROID_VERSION=9.0.0_r1
19+
ARG ANDROID_SYSTEM_COMPLETE=0
20+
1321
COPY android-ndk.sh /
14-
RUN /android-ndk.sh arm 28
22+
RUN /android-ndk.sh arm
1523
ENV PATH=$PATH:/android-ndk/bin
1624

1725
COPY android-system.sh /
1826
RUN /android-system.sh arm
1927

20-
COPY qemu.sh /
21-
RUN /qemu.sh arm
22-
23-
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/28/libz.so /system/lib/
28+
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/$ANDROID_SDK/libz.so /system/lib/
2429

2530
COPY android-runner /
2631

docker/Dockerfile.i686-linux-android

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,30 @@ RUN /cmake.sh
1010
COPY xargo.sh /
1111
RUN /xargo.sh
1212

13-
COPY android-ndk.sh /
14-
RUN /android-ndk.sh x86 28
15-
ENV PATH=$PATH:/android-ndk/bin
16-
17-
COPY android-system.sh /
18-
RUN /android-system.sh x86
19-
2013
# We could supposedly directly run i686 binaries like we do for x86_64, but
2114
# doing so generates an assertion failure:
2215
# ... assertion failed: signal(libc::SIGPIPE, libc::SIG_IGN) != libc::SIG_ERR
2316
# ... src/libstd/sys/unix/mod.rs
2417
# fatal runtime error: failed to initiate panic, error 5
2518
#
26-
# Running with qemu works as expected
19+
# Running with qemu works as expected. it also ensures that're we're
20+
# running on a CPU common 32-bit x86 systems.
2721
COPY qemu.sh /
2822
RUN /qemu.sh i386
2923

30-
RUN cp /android-ndk/sysroot/usr/lib/i686-linux-android/28/libz.so /system/lib/
24+
ARG ANDROID_NDK=r21d
25+
ARG ANDROID_SDK=28
26+
ARG ANDROID_VERSION=9.0.0_r1
27+
ARG ANDROID_SYSTEM_COMPLETE=0
28+
29+
COPY android-ndk.sh /
30+
RUN /android-ndk.sh x86
31+
ENV PATH=$PATH:/android-ndk/bin
32+
33+
COPY android-system.sh /
34+
RUN /android-system.sh x86
35+
36+
RUN cp /android-ndk/sysroot/usr/lib/i686-linux-android/$ANDROID_SDK/libz.so /system/lib/
3137

3238
COPY android-runner /
3339

docker/Dockerfile.thumbv7neon-linux-androideabi

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,22 @@ RUN /cmake.sh
1010
COPY xargo.sh /
1111
RUN /xargo.sh
1212

13+
COPY qemu.sh /
14+
RUN /qemu.sh arm
15+
16+
ARG ANDROID_NDK=r21d
17+
ARG ANDROID_SDK=28
18+
ARG ANDROID_VERSION=9.0.0_r1
19+
ARG ANDROID_SYSTEM_COMPLETE=0
20+
1321
COPY android-ndk.sh /
14-
RUN /android-ndk.sh arm 28
22+
RUN /android-ndk.sh arm
1523
ENV PATH=$PATH:/android-ndk/bin
1624

1725
COPY android-system.sh /
1826
RUN /android-system.sh arm
1927

20-
COPY qemu.sh /
21-
RUN /qemu.sh arm
22-
23-
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/28/libz.so /system/lib/
28+
RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/$ANDROID_SDK/libz.so /system/lib/
2429

2530
COPY android-runner /
2631

docker/Dockerfile.x86_64-linux-android

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,23 @@ RUN /cmake.sh
1010
COPY xargo.sh /
1111
RUN /xargo.sh
1212

13+
# Using qemu allows older host cpus (without sse4) to execute the target binaries
14+
COPY qemu.sh /
15+
RUN /qemu.sh x86_64
16+
17+
ARG ANDROID_NDK=r21d
18+
ARG ANDROID_SDK=28
19+
ARG ANDROID_VERSION=9.0.0_r1
20+
ARG ANDROID_SYSTEM_COMPLETE=0
21+
1322
COPY android-ndk.sh /
14-
RUN /android-ndk.sh x86_64 28
23+
RUN /android-ndk.sh x86_64
1524
ENV PATH=$PATH:/android-ndk/bin
1625

1726
COPY android-system.sh /
1827
RUN /android-system.sh x86_64
1928

20-
# Using qemu allows older host cpus (without sse4) to execute the target binaries
21-
COPY qemu.sh /
22-
RUN /qemu.sh x86_64
23-
24-
RUN cp /android-ndk/sysroot/usr/lib/x86_64-linux-android/28/libz.so /system/lib/
29+
RUN cp /android-ndk/sysroot/usr/lib/x86_64-linux-android/$ANDROID_SDK/libz.so /system/lib/
2530

2631
COPY android-runner /
2732

docker/android-ndk.sh

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,36 @@ set -euo pipefail
66
# shellcheck disable=SC1091
77
. lib.sh
88

9-
NDK_URL=https://dl.google.com/android/repository/android-ndk-r21d-linux-x86_64.zip
9+
NDK_OS=linux
10+
NDK_PLATFORM="${NDK_OS}-x86_64"
11+
# format is r21d, r25b, etc.
12+
NDK_VERSION="${ANDROID_NDK:1:2}"
13+
# android NDK 23 and higher moved from `linux-x86_64` to `linux`
14+
if [[ "${NDK_VERSION}" -ge 23 ]]; then
15+
NDK_FILENAME="android-ndk-${ANDROID_NDK}-${NDK_OS}.zip"
16+
else
17+
NDK_FILENAME="android-ndk-${ANDROID_NDK}-${NDK_PLATFORM}.zip"
18+
fi
19+
NDK_URL="https://dl.google.com/android/repository/${NDK_FILENAME}"
1020

1121
main() {
12-
local arch="${1}" \
13-
api="${2}"
22+
local arch="${1}"
1423

15-
install_packages curl unzip python
24+
# python3 is needed for newer NDK versions
25+
install_packages curl unzip python python3
1626

1727
local td
1828
td="$(mktemp -d)"
1929

2030
pushd "${td}"
2131
curl --retry 3 -sSfL "${NDK_URL}" -O
22-
unzip -q android-ndk-*.zip
23-
rm android-ndk-*.zip
24-
pushd android-ndk-*
32+
unzip -q "${NDK_FILENAME}"
33+
rm "${NDK_FILENAME}"
34+
pushd "android-ndk-${ANDROID_NDK}"
2535
./build/tools/make_standalone_toolchain.py \
26-
--install-dir /android-ndk \
27-
--arch "${arch}" \
28-
--api "${api}"
36+
--install-dir /android-ndk \
37+
--arch "${arch}" \
38+
--api "${ANDROID_SDK}"
2939

3040
# clean up unused toolchains to reduce image size
3141
local triple

0 commit comments

Comments
 (0)