Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Android in CI #120593

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@
#metrics = false

# Specify the location of the Android NDK. Used when targeting Android.
#android-ndk = "/path/to/android-ndk-r25b"
#android-ndk = "/path/to/android-ndk-r26d"

# =============================================================================
# General install configuration options
Expand Down
8 changes: 3 additions & 5 deletions src/bootstrap/src/utils/cc_detect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -247,18 +247,16 @@ pub(crate) fn ndk_compiler(compiler: Language, triple: &str, ndk: &Path) -> Path
triple.to_string()
};

// API 19 is the earliest API level supported by NDK r25b but AArch64 and x86_64 support
// begins at API level 21.
let api_level =
if triple.contains("aarch64") || triple.contains("x86_64") { "21" } else { "19" };
// The earliest API supported by NDK r26d is 21.
let api_level = "21";
let compiler = format!("{}{}-{}", triple_translated, api_level, compiler.clang());
let host_tag = if cfg!(target_os = "macos") {
// The NDK uses universal binaries, so this is correct even on ARM.
"darwin-x86_64"
} else if cfg!(target_os = "windows") {
"windows-x86_64"
} else {
// NDK r25b only has official releases for macOS, Windows and Linux.
// NDK r26d only has official releases for macOS, Windows and Linux.
// Try the Linux directory everywhere else, on the assumption that the OS has an
// emulation layer that can cope (e.g. BSDs).
"linux-x86_64"
Expand Down
5 changes: 5 additions & 0 deletions src/bootstrap/src/utils/change_tracker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,4 +190,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[
severity: ChangeSeverity::Warning,
summary: "`rust.lld` has a new default value of `true` on `x86_64-unknown-linux-gnu`. Starting at stage1, `rust-lld` will thus be this target's default linker. No config changes should be necessary.",
},
ChangeInfo {
change_id: 120593,
severity: ChangeSeverity::Info,
summary: "Removed android-ndk r25b support in favor of android-ndk r26d.",
},
];
41 changes: 41 additions & 0 deletions src/ci/docker/host-x86_64/aarch64-android/Dockerfile
Original file line number Diff line number Diff line change
@@ -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"]
6 changes: 6 additions & 0 deletions src/ci/docker/host-x86_64/aarch64-android/android-sdk.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
emulator emulator-linux_x64-11772612.zip 974ad0591834a9fa3db307e49cdba352462e5f1e
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
4 changes: 2 additions & 2 deletions src/ci/docker/host-x86_64/arm-android/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ RUN sh /scripts/android-base-apt-get.sh

COPY scripts/android-ndk.sh /scripts/
RUN . /scripts/android-ndk.sh && \
download_ndk android-ndk-r25b-linux.zip
download_ndk android-ndk-r26d-linux.zip

RUN dpkg --add-architecture i386 && \
apt-get update && \
Expand Down Expand Up @@ -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"]
6 changes: 3 additions & 3 deletions src/ci/docker/host-x86_64/arm-android/android-sdk.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
emulator emulator-linux-5264690.zip 48c1cda2bdf3095d9d9d5c010fbfb3d6d673e3ea
patcher;v4 3534162-studio.sdk-patcher.zip 046699c5e2716ae11d77e0bad814f7f33fab261e
platform-tools platform-tools_r28.0.2-linux.zip 46a4c02a9b8e4e2121eddf6025da3c979bf02e28
platforms;android-18 android-18_r03.zip e6b09b3505754cbbeb4a5622008b907262ee91cb
system-images;android-18;default;armeabi-v7a sys-img/android/armeabi-v7a-18_r05.zip 580b583720f7de671040d5917c8c9db0c7aa03fd
platform-tools platform-tools_r34.0.5-linux.zip 96097475cf7b279fdd8f218f5d043ffe94104ec3
platforms;android-21 android-21_r02.zip 53536556059bb29ae82f414fd2e14bc335a4eb4c
system-images;android-21;default;armeabi-v7a sys-img/android/armeabi-v7a-21_r04.zip 8c606f81306564b65e41303d2603e4c42ded0d10
tools sdk-tools-linux-4333796.zip 8c7c28554a32318461802c1291d76fccfafde054
2 changes: 1 addition & 1 deletion src/ci/docker/host-x86_64/dist-android/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ RUN sh /scripts/android-base-apt-get.sh
# ndk
COPY scripts/android-ndk.sh /scripts/
RUN . /scripts/android-ndk.sh && \
download_ndk android-ndk-r25b-linux.zip
download_ndk android-ndk-r26d-linux.zip

# env
ENV TARGETS=arm-linux-androideabi
Expand Down
10 changes: 4 additions & 6 deletions src/ci/docker/scripts/android-start-emulator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 "$@"
3 changes: 3 additions & 0 deletions src/ci/github-actions/jobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ auto:
- image: arm-android
<<: *job-linux-8c

- image: aarch64-android
<<: *job-linux-8c

- image: armhf-gnu
<<: *job-linux-8c

Expand Down
6 changes: 4 additions & 2 deletions tests/codegen/sanitizer/scs-attr-check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@
//
//@ needs-sanitizer-shadow-call-stack
//@ compile-flags: -Zsanitizer=shadow-call-stack
// With optimization, Rust may decide to make these functions MIR-only.
//@ compile-flags: -C opt-level=0

#![crate_type = "lib"]
#![feature(no_sanitize)]

// CHECK: ; sanitizer_scs_attr_check::scs
// CHECK: ; scs_attr_check::scs
// CHECK-NEXT: ; Function Attrs:{{.*}}shadowcallstack
pub fn scs() {}

// CHECK: ; sanitizer_scs_attr_check::no_scs
// CHECK: ; scs_attr_check::no_scs
// CHECK-NOT: ; Function Attrs:{{.*}}shadowcallstack
#[no_sanitize(shadow_call_stack)]
pub fn no_scs() {}
1 change: 1 addition & 0 deletions tests/ui/abi/stack-probes-lto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//@[x64] only-x86_64
//@ ignore-sgx no processes
//@ ignore-musl FIXME #31506
//@ ignore-android handler not yet registered #124823
//@ ignore-fuchsia no exception handler registered for segfault
//@ compile-flags: -C lto
//@ no-prefer-dynamic
Expand Down
1 change: 1 addition & 0 deletions tests/ui/abi/stack-probes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//@[x64] only-x86_64
//@ ignore-emscripten no processes
//@ ignore-sgx no processes
//@ ignore-android handler not yet registered #124823
//@ ignore-fuchsia no exception handler registered for segfault
//@ ignore-nto Crash analysis impossible at SIGSEGV in QNX Neutrino

Expand Down