diff --git a/ci/docker/android/Dockerfile b/ci/docker/android/Dockerfile index a86dfcaaa0..464e66cc4d 100644 --- a/ci/docker/android/Dockerfile +++ b/ci/docker/android/Dockerfile @@ -1,52 +1,18 @@ -FROM ubuntu:18.04 -USER root +FROM rust-android -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - ca-certificates \ - cmake \ - curl \ - gcc \ - libc6-dev \ - make \ - pkg-config - -COPY ci/docker/scripts/sccache.bash /scripts/ -RUN bash /scripts/sccache.bash - -RUN apt-get install -y --no-install-recommends \ - unzip \ - python && \ - curl -O https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip && \ - unzip -q android-ndk-r13b-linux-x86_64.zip && \ - ./android-ndk-r13b/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/arm \ - --arch arm \ - --api 21 && \ - ./android-ndk-r13b/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/arm64 \ - --arch arm64 \ - --api 21 && \ - ./android-ndk-r13b/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/x86 \ - --arch x86 \ - --api 21 && \ - ./android-ndk-r13b/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/x86_64 \ - --arch x86_64 \ - --api 21 && \ - rm -rf ./android-ndk-r13b-linux-x86_64.zip ./android-ndk-r13b && \ - apt-get purge --auto-remove -y unzip python - -ENV PATH=$PATH:/android-ndk/arm/bin -ENV PATH=$PATH:/android-ndk/arm64/bin -ENV PATH=$PATH:/android-ndk/x86/bin -ENV PATH=$PATH:/android-ndk/x86_64/bin - -ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc -ENV CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc -ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=aarch64-linux-android-gcc -ENV CARGO_TARGET_I686_LINUX_ANDROID_LINKER=i686-linux-android-gcc -ENV CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-gcc - -WORKDIR /buildslave +ENV PATH=$PATH:/android/ndk/arm-14/bin:/android/ndk/arm64-21/bin:/android/ndk/x86-14/bin:/android/ndk/x86_64-21/bin \ + CC_arm_linux_androideabi=arm-linux-androideabi-clang \ + CC_armv7_linux_androideabi=arm-linux-androideabi-clang \ + CC_aarch64_linux_android=aarch64-linux-android-clang \ + CC_i686_linux_android=i686-linux-android-clang \ + CC_x86_64_linux_android=x86_64-linux-android-clang \ + CXX_arm_linux_androideabi=arm-linux-androideabi-clang++ \ + CXX_armv7_linux_androideabi=arm-linux-androideabi-clang++ \ + CXX_aarch64_linux_android=aarch64-linux-android-clang++ \ + CXX_i686_linux_android=i686-linux-android-clang++ \ + CXX_x86_64_linux_android=x86_64-linux-android-clang++ \ + CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-clang \ + CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-clang \ + CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=aarch64-linux-android-clang \ + CARGO_TARGET_I686_LINUX_ANDROID_LINKER=i686-linux-android-clang \ + CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-clang diff --git a/ci/fetch-rust-docker.bash b/ci/fetch-rust-docker.bash index 19eb4108ce..ac458f5bdf 100644 --- a/ci/fetch-rust-docker.bash +++ b/ci/fetch-rust-docker.bash @@ -11,6 +11,7 @@ TARGET="$1" RUST_REPO="https://github.com/rust-lang/rust" S3_BASE_URL="https://rust-lang-ci2.s3.amazonaws.com/rustc-builds" +LOCAL_DOCKER_TAG="rust-$TARGET" # Use images from rustc master case "$TARGET" in @@ -19,6 +20,7 @@ case "$TARGET" in arm-unknown-linux-gnueabihf) image=dist-armhf-linux ;; armv7-unknown-linux-gnueabihf) image=dist-armv7-linux ;; i686-unknown-linux-gnu) image=dist-i686-linux ;; + *-linux-android*) image=dist-android; LOCAL_DOCKER_TAG=rust-android ;; mips-unknown-linux-gnu) image=dist-mips-linux ;; mips64-unknown-linux-gnuabi64) image=dist-mips64-linux ;; mips64el-unknown-linux-gnuabi64) image=dist-mips64el-linux ;; @@ -40,7 +42,7 @@ rm -f "$info" curl -o "$info" "$image_url" digest=$(grep -m1 ^sha "$info") -if [ -z "$(docker images -q "rust-$TARGET")" ]; then +if [ -z "$(docker images -q "${LOCAL_DOCKER_TAG}")" ]; then url=$(grep -m1 ^https "$info") cache=/tmp/rustci_docker_cache echo "Attempting to download $url" @@ -49,5 +51,5 @@ if [ -z "$(docker images -q "rust-$TARGET")" ]; then travis_retry curl -y 30 -Y 10 --connect-timeout 30 -f -L -C - -o "$cache" "$url" set -e docker load --quiet -i "$cache" - docker tag "$digest" "rust-$TARGET" + docker tag "$digest" "${LOCAL_DOCKER_TAG}" fi diff --git a/ci/run.bash b/ci/run.bash index f594f6cbef..1496eb75dc 100644 --- a/ci/run.bash +++ b/ci/run.bash @@ -12,6 +12,11 @@ if [ "$TRAVIS_OS_NAME" != "windows" ]; then FEATURES=('--features' 'vendored-openssl') fi +# rustc only supports armv7: https://forge.rust-lang.org/platform-support.html +if [ "$TARGET" = arm-linux-androideabi ]; then + export CFLAGS='-march=armv7' +fi + cargo build --locked -v --release --target "$TARGET" "${FEATURES[@]}" runtest () {