From 0b0e220239a60872f72ce1b49eb4f696e514b59a Mon Sep 17 00:00:00 2001 From: Lzu Tao Date: Mon, 2 Sep 2019 08:58:43 +0700 Subject: [PATCH 1/2] build: Update android tools to match rustc CI config See rustc CI config in https://github.com/rust-lang/rust/blob/99abdfa0b515431133cb38d164e794a51ab58e36/src/ci/docker/dist-android/Dockerfile#L9 --- ci/docker/android/Dockerfile | 73 ++++++++++++++++++++---------------- ci/run.bash | 5 +++ 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/ci/docker/android/Dockerfile b/ci/docker/android/Dockerfile index a86dfcaaa0..f3c26216ea 100644 --- a/ci/docker/android/Dockerfile +++ b/ci/docker/android/Dockerfile @@ -1,52 +1,61 @@ +# Based on https://github.com/rust-lang/rust/blob/master/src/ci/docker/dist-android/Dockerfile FROM ubuntu:18.04 USER root -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 \ +RUN apt-get update -qq && \ + apt-get install -qq --no-install-recommends \ + ca-certificates \ + cmake \ + curl \ + g++ \ + libc6-dev \ + make \ + pkg-config \ + python2.7 \ + unzip \ + xz-utils && \ + bash /scripts/sccache.bash && \ + ANDROID_EMU_URL=https://dl.google.com/android/repository && \ + ANDROID_NDK_FILE=android-ndk-r15c-linux-x86_64.zip && \ + curl -fO "${ANDROID_EMU_URL}/${ANDROID_NDK_FILE}" && \ + unzip -q "./${ANDROID_NDK_FILE}" && \ + rm "${ANDROID_NDK_FILE}" && \ + mv android-ndk-* ndk && \ + python2.7 ./ndk/build/tools/make_standalone_toolchain.py \ --install-dir /android-ndk/arm \ --arch arm \ --api 21 && \ - ./android-ndk-r13b/build/tools/make_standalone_toolchain.py \ + python2.7 ./ndk/build/tools/make_standalone_toolchain.py \ --install-dir /android-ndk/arm64 \ --arch arm64 \ --api 21 && \ - ./android-ndk-r13b/build/tools/make_standalone_toolchain.py \ + python2.7 ./ndk/build/tools/make_standalone_toolchain.py \ --install-dir /android-ndk/x86 \ --arch x86 \ --api 21 && \ - ./android-ndk-r13b/build/tools/make_standalone_toolchain.py \ + python2.7 ./ndk/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 + rm -rf ./ndk -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 +ENV PATH=$PATH:/android-ndk/arm/bin:/android-ndk/arm64/bin:/android-ndk/x86/bin:/android-ndk/x86_64/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 WORKDIR /buildslave 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 () { From 28f00f3f2d408004b02525f25f182d05f235acb9 Mon Sep 17 00:00:00 2001 From: Lzu Tao Date: Wed, 3 Jul 2019 00:26:54 +0700 Subject: [PATCH 2/2] build: Use rustc docker for android targets --- ci/docker/android/Dockerfile | 47 ++---------------------------------- ci/fetch-rust-docker.bash | 6 +++-- 2 files changed, 6 insertions(+), 47 deletions(-) diff --git a/ci/docker/android/Dockerfile b/ci/docker/android/Dockerfile index f3c26216ea..464e66cc4d 100644 --- a/ci/docker/android/Dockerfile +++ b/ci/docker/android/Dockerfile @@ -1,47 +1,6 @@ -# Based on https://github.com/rust-lang/rust/blob/master/src/ci/docker/dist-android/Dockerfile -FROM ubuntu:18.04 -USER root +FROM rust-android -COPY ci/docker/scripts/sccache.bash /scripts/ - -RUN apt-get update -qq && \ - apt-get install -qq --no-install-recommends \ - ca-certificates \ - cmake \ - curl \ - g++ \ - libc6-dev \ - make \ - pkg-config \ - python2.7 \ - unzip \ - xz-utils && \ - bash /scripts/sccache.bash && \ - ANDROID_EMU_URL=https://dl.google.com/android/repository && \ - ANDROID_NDK_FILE=android-ndk-r15c-linux-x86_64.zip && \ - curl -fO "${ANDROID_EMU_URL}/${ANDROID_NDK_FILE}" && \ - unzip -q "./${ANDROID_NDK_FILE}" && \ - rm "${ANDROID_NDK_FILE}" && \ - mv android-ndk-* ndk && \ - python2.7 ./ndk/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/arm \ - --arch arm \ - --api 21 && \ - python2.7 ./ndk/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/arm64 \ - --arch arm64 \ - --api 21 && \ - python2.7 ./ndk/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/x86 \ - --arch x86 \ - --api 21 && \ - python2.7 ./ndk/build/tools/make_standalone_toolchain.py \ - --install-dir /android-ndk/x86_64 \ - --arch x86_64 \ - --api 21 && \ - rm -rf ./ndk - -ENV PATH=$PATH:/android-ndk/arm/bin:/android-ndk/arm64/bin:/android-ndk/x86/bin:/android-ndk/x86_64/bin \ +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 \ @@ -57,5 +16,3 @@ ENV PATH=$PATH:/android-ndk/arm/bin:/android-ndk/arm64/bin:/android-ndk/x86/bin: 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 - -WORKDIR /buildslave 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