Skip to content

Commit 3b5a042

Browse files
committed
Auto merge of #1000 - malbarbo:build-android, r=brson
Add android build support We do not have rustc and cargo binary for Android yet, but I'm working on it (there is some interest on this - termux/termux-packages#261)
2 parents a1287b6 + e865975 commit 3b5a042

File tree

6 files changed

+127
-21
lines changed

6 files changed

+127
-21
lines changed

.travis.yml

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,24 @@ matrix:
7474
DOCKER=alexcrichton/rust-slave-linux-cross:2016-11-11
7575
SKIP_TESTS=1
7676

77+
# Android use a local docker image
78+
- os: linux
79+
env: TARGET=arm-linux-androideabi
80+
DOCKER=android
81+
SKIP_TESTS=1
82+
- os: linux
83+
env: TARGET=armv7-linux-androideabi
84+
DOCKER=android
85+
SKIP_TESTS=1
86+
- os: linux
87+
env: TARGET=aarch64-linux-android
88+
DOCKER=android
89+
SKIP_TESTS=1
90+
- os: linux
91+
env: TARGET=i686-linux-android
92+
DOCKER=android
93+
SKIP_TESTS=1
94+
7795
# On OSX we want to target 10.7 so we ensure that the appropriate
7896
# environment variable is set to tell the linker what we want.
7997
- os: osx
@@ -101,16 +119,7 @@ install:
101119
script:
102120
- mkdir target
103121
- if [ ! -z "$DOCKER" ]; then
104-
docker run
105-
--entrypoint bash
106-
-u `id -u`:`id -g`
107-
-v $HOME/rust:/travis-rust:ro
108-
-v `pwd`:/buildslave:ro
109-
-v `pwd`/target:/buildslave/target
110-
-e TARGET=$TARGET
111-
-e SKIP_TESTS=$SKIP_TESTS
112-
-it $DOCKER
113-
ci/run-docker.sh;
122+
sh ci/build-run-docker.sh "$DOCKER" "$TARGET" "$SKIP_TESTS";
114123
else
115124
PATH=$HOME/rust/bin:$PATH sh ci/run.sh;
116125
fi

Cargo.lock

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ci/build-run-docker.sh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/sh
2+
3+
set -ex
4+
5+
mkdir -p target
6+
7+
DOCKER="$1"
8+
TARGET="$2"
9+
SKIP_TESTS="$3"
10+
11+
if [ -f "ci/docker/$DOCKER/Dockerfile" ]; then
12+
docker build -t "$DOCKER" "ci/docker/$DOCKER/"
13+
fi
14+
15+
docker run \
16+
--entrypoint bash \
17+
-u `id -u`:`id -g` \
18+
-v $HOME/rust:/travis-rust:ro \
19+
-v `pwd`:/buildslave:ro \
20+
-v `pwd`/target:/buildslave/target \
21+
-e TARGET=$TARGET \
22+
-e SKIP_TESTS=$SKIP_TESTS \
23+
-it $DOCKER \
24+
ci/run-docker.sh

ci/docker/android/Dockerfile

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
FROM ubuntu:16.04
2+
3+
RUN apt-get update && \
4+
apt-get install -y --no-install-recommends \
5+
ca-certificates \
6+
cmake \
7+
curl \
8+
gcc \
9+
libc6-dev \
10+
make \
11+
pkg-config
12+
13+
RUN apt-get install -y --no-install-recommends \
14+
unzip \
15+
python && \
16+
curl -O https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip && \
17+
unzip -q android-ndk-r13b-linux-x86_64.zip && \
18+
./android-ndk-r13b/build/tools/make_standalone_toolchain.py \
19+
--install-dir /android-ndk/arm \
20+
--arch arm \
21+
--api 21 && \
22+
./android-ndk-r13b/build/tools/make_standalone_toolchain.py \
23+
--install-dir /android-ndk/arm64 \
24+
--arch arm64 \
25+
--api 21 && \
26+
./android-ndk-r13b/build/tools/make_standalone_toolchain.py \
27+
--install-dir /android-ndk/x86 \
28+
--arch x86 \
29+
--api 21 && \
30+
rm -rf ./android-ndk-r13b-linux-x86_64.zip ./android-ndk-r13b && \
31+
apt-get purge --auto-remove -y unzip python
32+
33+
ENV PATH=$PATH:/android-ndk/arm/bin:/android-ndk/arm64/bin:/android-ndk/x86/bin
34+
35+
WORKDIR /buildslave

ci/run-docker.sh

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@
22

33
set -ex
44

5+
# For some unknown reason libz is not found in the android docker image, so we
6+
# use this workaround
7+
case $TARGET in
8+
arm-linux-androideabi | armv7-linux-androideabi )
9+
export DEP_Z_ROOT=/android-ndk/arm/sysroot/usr/;;
10+
11+
aarch64-linux-android )
12+
export DEP_Z_ROOT=/android-ndk/arm64/sysroot/usr/;;
13+
14+
i686-linux-android )
15+
export DEP_Z_ROOT=/android-ndk/x86/sysroot/usr/;;
16+
esac
17+
518
upper_target=$(echo $TARGET | tr '[a-z]' '[A-Z]' | tr '-' '_')
619
export PATH=/travis-rust/bin:$PATH
720
export LD_LIBRARY_PATH=/travis-rust/lib:$LD_LIBRARY_PATH
@@ -34,6 +47,27 @@ case $TARGET in
3447
OPENSSL_SETARCH='setarch i386'
3548
OPENSSL_CFLAGS=-m32
3649
;;
50+
arm-linux-androideabi)
51+
OPENSSL_OS=android
52+
OPENSSL_CC=arm-linux-androideabi-gcc
53+
OPENSSL_AR=arm-linux-androideabi-ar
54+
;;
55+
armv7-linux-androideabi)
56+
OPENSSL_OS=android-armv7
57+
OPENSSL_CC=arm-linux-androideabi-gcc
58+
OPENSSL_AR=arm-linux-androideabi-ar
59+
;;
60+
aarch64-linux-android)
61+
OPENSSL_OS=linux-generic64
62+
OPENSSL_CC=aarch64-linux-android-gcc
63+
OPENSSL_AR=aarch64-linux-android-ar
64+
OPENSSL_CFLAGS="-mandroid -fomit-frame-pointer"
65+
;;
66+
i686-linux-android)
67+
OPENSSL_OS=android-x86
68+
OPENSSL_CC=i686-linux-android-gcc
69+
OPENSSL_AR=i686-linux-android-ar
70+
;;
3771
arm-*-linux-gnueabi)
3872
OPENSSL_OS=linux-armv4
3973
OPENSSL_CC=arm-linux-gnueabi-gcc

src/rustup-dist/src/dist.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ static LIST_OSES: &'static [&'static str] = &["pc-windows",
8585
"rumprun-netbsd",
8686
"unknown-freebsd"];
8787
static LIST_ENVS: &'static [&'static str] =
88-
&["gnu", "msvc", "gnueabi", "gnueabihf", "gnuabi64", "androideabi", "musl"];
88+
&["gnu", "msvc", "gnueabi", "gnueabihf", "gnuabi64", "androideabi", "android", "musl"];
8989

9090
// MIPS platforms don't indicate endianness in uname, however binaries only
9191
// run on boxes with the same endianness, as expected.
@@ -161,6 +161,10 @@ impl TargetTriple {
161161
};
162162

163163
let host_triple = match (sysname, machine) {
164+
(_, b"arm") if cfg!(target_os = "android") => Some("arm-linux-androideabi"),
165+
(_, b"armv7l") if cfg!(target_os = "android") => Some("armv7-linux-androideabi"),
166+
(_, b"aarch64") if cfg!(target_os = "android") => Some("aarch64-linux-android"),
167+
(_, b"i686") if cfg!(target_os = "android") => Some("i686-linux-android"),
164168
(b"Linux", b"x86_64") => Some("x86_64-unknown-linux-gnu"),
165169
(b"Linux", b"i686") => Some("i686-unknown-linux-gnu"),
166170
(b"Linux", b"mips") => Some(TRIPLE_MIPS_UNKNOWN_LINUX_GNU),

0 commit comments

Comments
 (0)