From 2fd7f7a43f913d0c3ddb7c4e0ab0f823a41fabc8 Mon Sep 17 00:00:00 2001 From: Marco A L Barbosa Date: Thu, 27 Apr 2017 18:17:00 -0300 Subject: [PATCH] Add x86_64-linux-android test --- .travis.yml | 4 ++ ci/android-sysimage.sh | 52 +++++++++++++++++++++++ ci/docker/x86_64-linux-android/Dockerfile | 34 ++++++--------- ci/run.sh | 5 ++- 4 files changed, 74 insertions(+), 21 deletions(-) create mode 100644 ci/android-sysimage.sh diff --git a/.travis.yml b/.travis.yml index 22d86e03..b7721b5e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,6 +56,10 @@ matrix: - os: linux env: TARGET=i686-linux-android rust: stable + # as of 2017/05/03 x86_64-linux-android are not on stable + - os: linux + env: TARGET=x86_64-linux-android + rust: beta - os: linux env: TARGET=x86_64-unknown-linux-musl rust: stable diff --git a/ci/android-sysimage.sh b/ci/android-sysimage.sh new file mode 100644 index 00000000..9611dfeb --- /dev/null +++ b/ci/android-sysimage.sh @@ -0,0 +1,52 @@ +# Copyright 2017 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 + +URL=https://dl.google.com/android/repository/sys-img/android + +main() { + local arch=$1 + local name=$2 + local dest=/system + local td=$(mktemp -d) + + apt-get install --no-install-recommends e2tools + + pushd $td + curl -O $URL/$name + unzip -q $name + + local system=$(find . -name system.img) + mkdir -p $dest/{bin,lib,lib64} + + # Extract android linker and libraries to /system + # This allows android executables to be run directly (or with qemu) + if [ $arch = "x86_64" -o $arch = "arm64" ]; then + e2cp -p $system:/bin/linker64 $dest/bin/ + e2cp -p $system:/lib64/libdl.so $dest/lib64/ + e2cp -p $system:/lib64/libc.so $dest/lib64/ + e2cp -p $system:/lib64/libm.so $dest/lib64/ + else + e2cp -p $system:/bin/linker $dest/bin/ + e2cp -p $system:/lib/libdl.so $dest/lib/ + e2cp -p $system:/lib/libc.so $dest/lib/ + e2cp -p $system:/lib/libm.so $dest/lib/ + fi + + # clean up + apt-get purge --auto-remove -y e2tools + + popd + + rm -rf $td +} + +main "${@}" diff --git a/ci/docker/x86_64-linux-android/Dockerfile b/ci/docker/x86_64-linux-android/Dockerfile index bf4793e0..dfc0c83d 100644 --- a/ci/docker/x86_64-linux-android/Dockerfile +++ b/ci/docker/x86_64-linux-android/Dockerfile @@ -1,32 +1,26 @@ FROM ubuntu:16.04 -RUN dpkg --add-architecture i386 && \ - apt-get update && \ +RUN apt-get update && \ apt-get install -y --no-install-recommends \ - file \ - curl \ ca-certificates \ - python \ - unzip \ - expect \ - openjdk-9-jre \ - libstdc++6:i386 \ - libpulse0 \ + curl \ gcc \ - libc6-dev + libc-dev \ + python \ + unzip WORKDIR /android/ -COPY android* /android/ - ENV ANDROID_ARCH=x86_64 -ENV PATH=$PATH:/android/ndk-$ANDROID_ARCH/bin:/android/sdk/tools:/android/sdk/platform-tools - +COPY android-install-ndk.sh /android/ RUN sh /android/android-install-ndk.sh $ANDROID_ARCH -RUN sh /android/android-install-sdk.sh $ANDROID_ARCH -RUN mv /root/.android /tmp -RUN chmod 777 -R /tmp/.android -RUN chmod 755 /android/sdk/tools/* /android/sdk/tools/qemu/linux-x86_64/* -ENV PATH=$PATH:/rust/bin \ +# We do not run x86_64-linux-android tests on an android emulator. +# See ci/android-sysimage.sh for informations about how tests are run. +COPY android-sysimage.sh /android/ +RUN bash /android/android-sysimage.sh x86_64 x86_64-21_r04.zip + +ENV PATH=$PATH:/rust/bin:/android/ndk-$ANDROID_ARCH/bin \ CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-gcc \ + CC_x86_64_linux_android=x86_64-linux-android-gcc \ + CXX_x86_64_linux_android=x86_64-linux-android-g++ \ HOME=/tmp diff --git a/ci/run.sh b/ci/run.sh index 4b8825f8..3ddc7b39 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -105,7 +105,10 @@ case "$TARGET" in esac case "$TARGET" in - arm-linux-androideabi | aarch64-linux-android | i686-linux-android | x86_64-linux-android) + # Android emulator for x86_64 does not work on travis (missing hardware + # acceleration). Tests are run on case *). See ci/android-sysimage.sh for + # informations about how tests are run. + arm-linux-androideabi | aarch64-linux-android | i686-linux-android) # set SHELL so android can detect a 64bits system, see # http://stackoverflow.com/a/41789144 # https://issues.jenkins-ci.org/browse/JENKINS-26930?focusedCommentId=230791&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-230791