From a29d46687c8b697e6b66a2a534ce086be115c345 Mon Sep 17 00:00:00 2001 From: Alex Huszagh Date: Sat, 28 May 2022 14:12:36 -0500 Subject: [PATCH] Support cross debugging and runners on Android. Support the `CROSS_DEBUG` and `CROSS_RUNNER` environment variables for android runners. --- CHANGELOG.md | 1 + docker/Dockerfile.armv7-linux-androideabi | 2 +- docker/Dockerfile.i686-linux-android | 2 +- docker/Dockerfile.x86_64-linux-android | 2 +- docker/android-runner | 27 ++++++++++++++++++++++- 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78fe45d29..c13af3c9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +- #725 - support `CROSS_DEBUG` and `CROSS_RUNNER` on android images. - #722 - boolean environment variables are evaluated as truthy or falsey. - #721 - add support for running doctests on nightly if `CROSS_UNSTABLE_ENABLE_DOCTESTS=true`. - #720 - add android runner to preload `libc++_shared.so`. diff --git a/docker/Dockerfile.armv7-linux-androideabi b/docker/Dockerfile.armv7-linux-androideabi index 7e1cc0464..d386e1c9c 100644 --- a/docker/Dockerfile.armv7-linux-androideabi +++ b/docker/Dockerfile.armv7-linux-androideabi @@ -25,7 +25,7 @@ RUN cp /android-ndk/sysroot/usr/lib/arm-linux-androideabi/28/libz.so /system/lib # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT ENV CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \ - CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_RUNNER=qemu-arm \ + CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_RUNNER="/android-runner arm" \ CC_armv7_linux_androideabi=arm-linux-androideabi-gcc \ CXX_armv7_linux_androideabi=arm-linux-androideabi-g++ \ BINDGEN_EXTRA_CLANG_ARGS_armv7_linux_androideabi="--sysroot=/android-ndk/sysroot" \ diff --git a/docker/Dockerfile.i686-linux-android b/docker/Dockerfile.i686-linux-android index c134a6a30..14e987e02 100644 --- a/docker/Dockerfile.i686-linux-android +++ b/docker/Dockerfile.i686-linux-android @@ -34,7 +34,7 @@ COPY android-runner / # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT ENV CARGO_TARGET_I686_LINUX_ANDROID_LINKER=i686-linux-android-gcc \ - CARGO_TARGET_I686_LINUX_ANDROID_RUNNER="/android-runner i686 -cpu n270" \ + CARGO_TARGET_I686_LINUX_ANDROID_RUNNER="/android-runner i686" \ CC_i686_linux_android=i686-linux-android-gcc \ CXX_i686_linux_android=i686-linux-android-g++ \ BINDGEN_EXTRA_CLANG_ARGS_i686_linux_android="--sysroot=/android-ndk/sysroot" \ diff --git a/docker/Dockerfile.x86_64-linux-android b/docker/Dockerfile.x86_64-linux-android index 53c5afb73..00efc61d1 100644 --- a/docker/Dockerfile.x86_64-linux-android +++ b/docker/Dockerfile.x86_64-linux-android @@ -28,7 +28,7 @@ COPY android-runner / # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT ENV CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-gcc \ - CARGO_TARGET_X86_64_LINUX_ANDROID_RUNNER="/android-runner x86_64 -cpu qemu64,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt" \ + CARGO_TARGET_X86_64_LINUX_ANDROID_RUNNER="/android-runner x86_64" \ CC_x86_64_linux_android=x86_64-linux-android-gcc \ CXX_x86_64_linux_android=x86_64-linux-android-g++ \ BINDGEN_EXTRA_CLANG_ARGS_x86_64_linux_android="--sysroot=/android-ndk/sysroot" \ diff --git a/docker/android-runner b/docker/android-runner index 6a6f50229..476e310ac 100755 --- a/docker/android-runner +++ b/docker/android-runner @@ -6,6 +6,14 @@ set -e arch="${1}" shift +if [ -n "${CROSS_DEBUG}" ]; then + set -x +fi + +if [ "${CROSS_RUNNER}" = "" ]; then + CROSS_RUNNER=qemu-user +fi + # select android abi, and find the shared libc++ library android_abi="${arch}-linux-android" qarch="${arch}" @@ -15,8 +23,25 @@ case "${arch}" in ;; i686) qarch="i386" + qemu_args=("-cpu" "n270") + ;; + x86_64) + qemu_args=("-cpu" "qemu64,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt") ;; esac libdir="/android-ndk/sysroot/usr/lib/${android_abi}" -LD_PRELOAD="${libdir}/libc++_shared.so" exec qemu-"${qarch}" "${@}" +export LD_PRELOAD="${libdir}/libc++_shared.so" +case "${CROSS_RUNNER}" in + native) + exec "${@}" + ;; + qemu-user) + exec "qemu-${qarch}" "${qemu_args[@]}" "${@}" + ;; + *) + echo "Invalid runner: \"${CROSS_RUNNER}\""; + echo "Valid runners are: native and qemu-user" + exit 1 + ;; +esac