From 005ab822d903f76342fe55de2a867d8b1486574e Mon Sep 17 00:00:00 2001 From: Matthew Maurer Date: Fri, 2 Feb 2024 23:15:01 +0000 Subject: [PATCH] Add aarch64-android testing Updating to NDK 26d and API 21 revealed that the most recent emulator no longer runs 32-bit devices at all. Indeed, Google stopped shipping 32-bit emulator images as of API level 31. Since this architecture is more used, and current images no longer have backcompat code for 32-bit code, testing aarch64 is both important for enabling developers to ship apps that run on modern devices and to future-proof us. --- src/bootstrap/src/utils/change_tracker.rs | 1 + .../host-x86_64/aarch64-android/Dockerfile | 41 +++++++++++++++++++ .../aarch64-android/android-sdk.lock | 6 +++ .../docker/host-x86_64/arm-android/Dockerfile | 2 +- .../docker/scripts/android-start-emulator.sh | 10 ++--- src/ci/github-actions/jobs.yml | 3 ++ 6 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 src/ci/docker/host-x86_64/aarch64-android/Dockerfile create mode 100644 src/ci/docker/host-x86_64/aarch64-android/android-sdk.lock diff --git a/src/bootstrap/src/utils/change_tracker.rs b/src/bootstrap/src/utils/change_tracker.rs index c49a334d562e8..1f090e835915b 100644 --- a/src/bootstrap/src/utils/change_tracker.rs +++ b/src/bootstrap/src/utils/change_tracker.rs @@ -199,6 +199,7 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[ change_id: 126701, severity: ChangeSeverity::Warning, summary: "`llvm.lld` is enabled by default for the dist profile. If set to false, `lld` will not be included in the dist build.", + }, ChangeInfo { change_id: 120593, severity: ChangeSeverity::Info, diff --git a/src/ci/docker/host-x86_64/aarch64-android/Dockerfile b/src/ci/docker/host-x86_64/aarch64-android/Dockerfile new file mode 100644 index 0000000000000..497cfff04b2ff --- /dev/null +++ b/src/ci/docker/host-x86_64/aarch64-android/Dockerfile @@ -0,0 +1,41 @@ +FROM ubuntu:23.04 + +ARG DEBIAN_FRONTEND=noninteractive +COPY scripts/android-base-apt-get.sh /scripts/ +RUN sh /scripts/android-base-apt-get.sh + +COPY scripts/android-ndk.sh /scripts/ +RUN . /scripts/android-ndk.sh && \ + download_ndk android-ndk-r26d-linux.zip + +RUN dpkg --add-architecture i386 && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + libgl1-mesa-glx \ + libpulse0 \ + libstdc++6:i386 \ + openjdk-8-jre-headless \ + tzdata \ + wget \ + python3 + +COPY scripts/android-sdk.sh /scripts/ +COPY scripts/android-sdk-manager.py /scripts/ +COPY host-x86_64/aarch64-android/android-sdk.lock /android/sdk/android-sdk.lock +RUN /scripts/android-sdk.sh + +ENV PATH=$PATH:/android/sdk/emulator +ENV PATH=$PATH:/android/sdk/tools +ENV PATH=$PATH:/android/sdk/platform-tools + +ENV TARGETS=aarch64-linux-android + +ENV RUST_CONFIGURE_ARGS --android-ndk=/android/ndk/ + +ENV SCRIPT python3 ../x.py --stage 2 test --host='' --target $TARGETS + +COPY scripts/sccache.sh /scripts/ +RUN sh /scripts/sccache.sh + +COPY scripts/android-start-emulator.sh /scripts/ +ENTRYPOINT ["/scripts/android-start-emulator.sh", "arm64-v8a", "auto"] diff --git a/src/ci/docker/host-x86_64/aarch64-android/android-sdk.lock b/src/ci/docker/host-x86_64/aarch64-android/android-sdk.lock new file mode 100644 index 0000000000000..56940c1d98f33 --- /dev/null +++ b/src/ci/docker/host-x86_64/aarch64-android/android-sdk.lock @@ -0,0 +1,6 @@ +emulator emulator-linux_x64-12038310.zip fe7a96bf6fbe7b026555dd7f76b713f22a07ec8b +patcher;v4 3534162-studio.sdk-patcher.zip 046699c5e2716ae11d77e0bad814f7f33fab261e +platform-tools platform-tools_r34.0.5-linux.zip 96097475cf7b279fdd8f218f5d043ffe94104ec3 +platforms;android-21 android-21_r02.zip 53536556059bb29ae82f414fd2e14bc335a4eb4c +system-images;android-21;default;arm64-v8a sys-img/android/arm64-v8a-21_r04.zip c4375f1b4b4cd21a8617660e25f621cedcbd8332 +tools sdk-tools-linux-4333796.zip 8c7c28554a32318461802c1291d76fccfafde054 diff --git a/src/ci/docker/host-x86_64/arm-android/Dockerfile b/src/ci/docker/host-x86_64/arm-android/Dockerfile index 222fa8a7355c8..a15e517a764ff 100644 --- a/src/ci/docker/host-x86_64/arm-android/Dockerfile +++ b/src/ci/docker/host-x86_64/arm-android/Dockerfile @@ -38,4 +38,4 @@ COPY scripts/sccache.sh /scripts/ RUN sh /scripts/sccache.sh COPY scripts/android-start-emulator.sh /scripts/ -ENTRYPOINT ["/scripts/android-start-emulator.sh"] +ENTRYPOINT ["/scripts/android-start-emulator.sh", "armeabi-v7a", "classic"] diff --git a/src/ci/docker/scripts/android-start-emulator.sh b/src/ci/docker/scripts/android-start-emulator.sh index 09f0d13759c79..fac1421585c52 100755 --- a/src/ci/docker/scripts/android-start-emulator.sh +++ b/src/ci/docker/scripts/android-start-emulator.sh @@ -6,11 +6,9 @@ set -ex # emulator identify the system export SHELL=/bin/bash -# Using the default qemu2 engine makes time::tests::since_epoch fails because -# the emulator date is set to unix epoch (in armeabi-v7a-18 image). Using -# classic engine the emulator starts with the current date and the tests run -# fine. If another image is used, this need to be evaluated again. -nohup nohup emulator @armeabi-v7a-18 \ - -engine classic -no-window -partition-size 2047 0<&- &>/dev/null & +nohup nohup emulator @$1-21 \ + -engine $2 -no-window -no-audio -partition-size 2047 0<&- &>/dev/null & + +shift 2 exec "$@" diff --git a/src/ci/github-actions/jobs.yml b/src/ci/github-actions/jobs.yml index a6e12c6ff954d..e56154e7523e9 100644 --- a/src/ci/github-actions/jobs.yml +++ b/src/ci/github-actions/jobs.yml @@ -115,6 +115,9 @@ auto: - image: arm-android <<: *job-linux-4c + - image: aarch64-android + <<: *job-linux-8c + - image: armhf-gnu <<: *job-linux-4c