diff --git a/.travis.yml b/.travis.yml index bb86e0a9..4ead6255 100644 --- a/.travis.yml +++ b/.travis.yml @@ -119,6 +119,8 @@ matrix: script: sh ci/run-docker.sh $TARGET install: +cache: cargo + notifications: email: on_success: never diff --git a/ci/docker/arm-linux-androideabi/Dockerfile b/ci/docker/arm-linux-androideabi/Dockerfile index 0e41ba6d..1911fbd8 100644 --- a/ci/docker/arm-linux-androideabi/Dockerfile +++ b/ci/docker/arm-linux-androideabi/Dockerfile @@ -1,4 +1,34 @@ -FROM alexcrichton/rust-slave-android:2015-11-22 -ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \ - PATH=$PATH:/rust/bin -ENTRYPOINT ["sh"] +FROM ubuntu:16.04 + +RUN dpkg --add-architecture i386 && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + file \ + curl \ + ca-certificates \ + python \ + unzip \ + expect \ + openjdk-9-jre \ + libstdc++6:i386 \ + gcc \ + libc6-dev + +WORKDIR /android/ + +COPY install-ndk.sh /android/ +RUN sh /android/install-ndk.sh + +ENV PATH=$PATH:/android/ndk-arm/bin:/android/sdk/tools:/android/sdk/platform-tools + +COPY install-sdk.sh accept-licenses.sh /android/ +RUN sh /android/install-sdk.sh + +ENV PATH=$PATH:/rust/bin \ + CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \ + ANDROID_EMULATOR_FORCE_32BIT=1 \ + HOME=/tmp +RUN chmod 755 /android/sdk/tools/* + +RUN cp -r /root/.android /tmp +RUN chmod 777 -R /tmp/.android diff --git a/ci/docker/arm-linux-androideabi/accept-licenses.sh b/ci/docker/arm-linux-androideabi/accept-licenses.sh new file mode 100755 index 00000000..8d8f60a5 --- /dev/null +++ b/ci/docker/arm-linux-androideabi/accept-licenses.sh @@ -0,0 +1,15 @@ +#!/usr/bin/expect -f +# ignore-license + +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/docker/arm-linux-androideabi/install-ndk.sh b/ci/docker/arm-linux-androideabi/install-ndk.sh new file mode 100644 index 00000000..566a3191 --- /dev/null +++ b/ci/docker/arm-linux-androideabi/install-ndk.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# Copyright 2016 The Rust Project Developers. See the COPYRIGHT +# file at the top-level directory of this distribution and at +# http://rust-lang.org/COPYRIGHT. +# +# Licensed under the Apache License, Version 2.0 or the MIT license +# , at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +set -ex + +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 24 + +rm -rf ./android-ndk-r13b-linux-x86_64.zip ./android-ndk-r13b diff --git a/ci/docker/arm-linux-androideabi/install-sdk.sh b/ci/docker/arm-linux-androideabi/install-sdk.sh new file mode 100644 index 00000000..3f20837f --- /dev/null +++ b/ci/docker/arm-linux-androideabi/install-sdk.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# Copyright 2016 The Rust Project Developers. See the COPYRIGHT +# file at the top-level directory of this distribution and at +# http://rust-lang.org/COPYRIGHT. +# +# Licensed under the Apache License, Version 2.0 or the MIT license +# , at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +set -ex + +# 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. + +mkdir sdk +curl https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz | \ + tar xzf - -C sdk --strip-components=1 + +filter="platform-tools,android-21" +filter="$filter,sys-img-armeabi-v7a-android-21" + +./accept-licenses.sh "android - update sdk -a --no-ui --filter $filter" + +echo "no" | android create avd \ + --name arm-21 \ + --target android-21 \ + --abi armeabi-v7a diff --git a/ci/run-docker.sh b/ci/run-docker.sh index e34e65ff..a7702ae1 100644 --- a/ci/run-docker.sh +++ b/ci/run-docker.sh @@ -6,14 +6,21 @@ set -ex run() { echo $1 docker build -t libc ci/docker/$1 + mkdir -p target docker run \ + --user `id -u`:`id -g` \ --rm \ - -v `rustc --print sysroot`:/rust:ro \ - -v `pwd`:/checkout:ro \ - -e CARGO_TARGET_DIR=/tmp/target \ - -w /checkout \ + --volume $HOME/.cargo:/cargo \ + --env CARGO_HOME=/cargo \ + --volume `rustc --print sysroot`:/rust:ro \ + --volume `pwd`:/checkout:ro \ + --volume `pwd`/target:/checkout/target \ + --env CARGO_TARGET_DIR=/checkout/target \ + --workdir /checkout \ --privileged \ - -it libc \ + --interactive \ + --tty \ + libc \ ci/run.sh $1 } diff --git a/libc-test/build.rs b/libc-test/build.rs index 817de568..7b241dcb 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -451,6 +451,10 @@ fn main() { "lio_listio" if freebsd => true, "lio_listio" if musl => true, + // Apparently the NDK doesn't have this defined on android, but + // it's in a header file? + "endpwent" if android => true, + _ => false, } });