From 2995f5595cff15846bccf855d8864effac62c1bb Mon Sep 17 00:00:00 2001 From: Alex Crichton <alex@alexcrichton.com> Date: Thu, 29 Oct 2015 16:34:55 -0700 Subject: [PATCH] Use the standard android slave docker image --- ci/Dockerfile-android | 68 ---------------------------------- ci/README.md | 22 ++--------- ci/android-accept-licenses.sh | 14 ------- ci/run-travis.sh | 20 ++++++++-- ci/run.sh | 4 +- src/unix/notbsd/android/mod.rs | 2 +- 6 files changed, 23 insertions(+), 107 deletions(-) delete mode 100644 ci/Dockerfile-android delete mode 100755 ci/android-accept-licenses.sh diff --git a/ci/Dockerfile-android b/ci/Dockerfile-android deleted file mode 100644 index 5f0a31e9..00000000 --- a/ci/Dockerfile-android +++ /dev/null @@ -1,68 +0,0 @@ -# This is a Dockerfile for building the image that is used to build Android -# binaries and run tests within. This will install the NDK, SDK, and set up an -# emulator to run tests in. - -FROM ubuntu:latest - -RUN mkdir /build -WORKDIR /build - -# Setup PATH to allow running android tools. -ENV PATH=$PATH:/build/android-ndk/bin -ENV PATH=$PATH:/build/android-sdk-linux/tools -ENV PATH=$PATH:/build/android-sdk-linux/platform-tools - -# So it looks like the default sdk gives us a 32-bit executable, but then it -# whines about it. Not sure how to download a 64-bit executable in the sdk so -# just let the 32-bit thing run for now. -ENV ANDROID_EMULATOR_FORCE_32BIT=true - -# Install necessary packages: -RUN dpkg --add-architecture i386 -RUN apt-get -y update -RUN apt-get -y install expect curl libncurses5:i386 libstdc++6:i386 zlib1g:i386 \ - openjdk-6-jre gcc-multilib - -# Prep the Android NDK -# -# See https://github.com/servo/servo/wiki/Building-for-Android -RUN curl -O http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86_64.tar.bz2 -RUN tar xf android-ndk-r9c-linux-x86_64.tar.bz2 -RUN bash android-ndk-r9c/build/tools/make-standalone-toolchain.sh \ - --platform=android-18 \ - --toolchain=arm-linux-androideabi-4.8 \ - --install-dir=/build/android-ndk \ - --ndk-dir=/build/android-ndk-r9c \ - --arch=arm -RUN rm -rf android-ndk-r9c-linux-x86_64.tar.bz2 -RUN rm -rf android-ndk-r9c - -# Prep the SDK and emulator -# -# Note that the update process requires that we accept a bunch of licenses, and -# we can't just pipe `yes` into it for some reason, so we take the same strategy -# located in https://github.com/appunite/docker by just wrapping it in a script -# which apparently magically accepts the licenses. -RUN curl -O http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz -RUN tar xf android-sdk_r24.3.4-linux.tgz -COPY ci/android-accept-licenses.sh /build/android-accept-licenses.sh -RUN ["./android-accept-licenses.sh", \ - "android - update sdk -a --no-ui --filter platform-tools,android-18,sys-img-armeabi-v7a-android-18"] -RUN echo "no" | android create avd \ - --name test \ - --target android-18 \ - --abi armeabi-v7a -RUN rm -rf android-sdk_r24.3.4-linux.tgz -RUN rm android-accept-licenses.sh - -# Install rustc + extra targets -RUN curl https://static.rust-lang.org/rustup.sh | \ - sh -s -- --spec=nightly-2015-09-08 -y -RUN curl https://people.mozilla.org/~acrichton/libc-test/2015-09-08/arm-linux-androideabi.tar.gz | \ - tar xzf - -C /usr/local/lib/rustlib -RUN mkdir /root/.cargo -COPY ci/cargo-config /root/.cargo/config -ENV CARGO_TARGET_DIR=/root/target - -RUN mkdir /clone -WORKDIR /clone diff --git a/ci/README.md b/ci/README.md index 8e4729ed..5b4c681c 100644 --- a/ci/README.md +++ b/ci/README.md @@ -8,21 +8,6 @@ this project. First up, let's talk about the files in this directory: -* `Dockerfile-android`, `android-accept-licenses.sh` -- these two files are - used to build the Docker image that the android CI builder uses. The - `Dockerfile` just installs the Android SDK, NDK, a Rust nightly, Rust target - libraries for Android, and sets up an emulator to run tests in. You can build - a new image with this command (from the root of the project): - - docker build -t alexcrichton/rust-libc-test -f ci/Dockerfile-android . - - When building a new image contact @alexcrichton to push it to the docker hub - and have libc start using it. This hasn't needed to happen yet, so the process - may be a little involved. - - The script here, `android-accept-licenses.sh` is just a helper used to accept - the licenses of the SDK of Android while the docker image is being created. - * `msys2.ps1` - a PowerShell script which is used to install MSYS2 on the AppVeyor bots. As of this writing MSYS2 isn't installed by default, and this script will install the right version/arch of msys2 in preparation of using @@ -67,9 +52,8 @@ builds are run on stable/beta/nightly, but are the only ones that do so. The remaining architectures look like: -* Android runs in a docker image with an emulator, the NDK, and the SDK already - set up (see `Dockerfile-android`). The entire build happens within the docker - image. +* Android runs in a [docker image][android-docker] with an emulator, the NDK, + and the SDK already set up. The entire build happens within the docker image. * The MIPS, ARM, and AArch64 builds all use QEMU to run the generated binary to actually verify the tests pass. * The MUSL build just has to download a MUSL compiler and target libraries and @@ -77,6 +61,8 @@ The remaining architectures look like: * iOS builds need an extra linker flag currently, but beyond that they're built as standard as everything else. +[android-docker]: https://github.com/rust-lang/rust-buildbot/blob/master/slaves/android/Dockerfile + Hopefully that's at least somewhat of an introduction to everything going on here, and feel free to ping @alexcrichton with questions! diff --git a/ci/android-accept-licenses.sh b/ci/android-accept-licenses.sh deleted file mode 100755 index 776adf6f..00000000 --- a/ci/android-accept-licenses.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/expect -f - -set timeout 1800 -set cmd [lindex $argv 0] -set licenses [lindex $argv 1] - -spawn {*}$cmd -expect { - "Do you accept the license '*'*" { - exp_send "y\r" - exp_continue - } - eof -} diff --git a/ci/run-travis.sh b/ci/run-travis.sh index f214babc..975accb6 100644 --- a/ci/run-travis.sh +++ b/ci/run-travis.sh @@ -46,11 +46,23 @@ esac case "$TARGET" in # Pull a pre-built docker image for testing android, then run tests entirely - #d within that image. + # within that image. Note that this is using the same rustc installation that + # travis has (sharing it via `-v`) and otherwise the tests run entirely within + # the container. arm-linux-androideabi) - docker pull alexcrichton/rust-libc-test - exec docker run -v `pwd`:/clone -t alexcrichton/rust-libc-test \ - sh ci/run.sh $TARGET + script=" +cp -r /checkout/* . +mkdir .cargo +cp ci/cargo-config .cargo/config +sh ci/run.sh $TARGET +" + exec docker run \ + --entrypoint bash \ + -v $HOME/rust:/usr/local:ro \ + -v `pwd`:/checkout:ro \ + -e LD_LIBRARY_PATH=/usr/local/lib \ + -it alexcrichton/rust-slave-android:2015-10-21 \ + -c "$script" ;; x86_64-unknown-linux-musl) diff --git a/ci/run.sh b/ci/run.sh index 6a4b4b12..6dd177bf 100644 --- a/ci/run.sh +++ b/ci/run.sh @@ -19,9 +19,9 @@ esac case "$TARGET" in arm-linux-androideabi) - emulator @test -no-window & + emulator @arm-18 -no-window & adb wait-for-device - adb push /root/target/$TARGET/debug/libc-test /data/libc-test + adb push libc-test/target/$TARGET/debug/libc-test /data/libc-test adb shell /data/libc-test ;; diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs index 68f93b1f..e26bceac 100644 --- a/src/unix/notbsd/android/mod.rs +++ b/src/unix/notbsd/android/mod.rs @@ -200,7 +200,7 @@ extern { flags: ::c_int) -> ::c_int; pub fn mprotect(addr: *const ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; - pub fn sysconf(name: ::c_int) -> ::c_int; + pub fn sysconf(name: ::c_int) -> ::c_long; pub fn usleep(secs: ::c_ulong) -> ::c_int; pub fn recvfrom(socket: ::c_int, buf: *mut ::c_void, len: ::size_t, flags: ::c_uint, addr: *const ::sockaddr, -- GitLab