Skip to content

Commit fb6f845

Browse files
committed
Auto merge of #41863 - malbarbo:update-android-builder, r=alexcrichton
ci: Update android ndk and sdk Make install-sdk.sh and install-ndk.sh more generic so future updates can be made directly on Dockerfile. Update ndk to r13b, which will be necessary to make host builds for android (in the future). Update sdk to r25.2.5 (maybe some emulator performance improvement).
2 parents 24ea08e + 49f793a commit fb6f845

File tree

8 files changed

+139
-119
lines changed

8 files changed

+139
-119
lines changed

src/ci/docker/arm-android/Dockerfile

+38-20
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
FROM ubuntu:16.04
22

3-
RUN dpkg --add-architecture i386 && \
4-
apt-get update && \
3+
RUN apt-get update && \
54
apt-get install -y --no-install-recommends \
65
g++ \
76
make \
@@ -12,35 +11,54 @@ RUN dpkg --add-architecture i386 && \
1211
git \
1312
cmake \
1413
unzip \
15-
expect \
16-
openjdk-9-jre-headless \
1714
sudo \
18-
libstdc++6:i386 \
1915
xz-utils \
2016
libssl-dev \
2117
pkg-config
2218

23-
WORKDIR /android/
24-
ENV PATH=$PATH:/android/ndk-arm-9/bin:/android/sdk/tools:/android/sdk/platform-tools
25-
26-
COPY install-ndk.sh install-sdk.sh accept-licenses.sh /android/
27-
RUN sh /android/install-ndk.sh
28-
RUN sh /android/install-sdk.sh
29-
3019
RUN curl -OL https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
3120
dpkg -i dumb-init_*.deb && \
3221
rm dumb-init_*.deb
3322

34-
COPY start-emulator.sh /android/
23+
RUN curl -o /usr/local/bin/sccache \
24+
https://s3.amazonaws.com/rust-lang-ci/rust-ci-mirror/2017-04-29-sccache-x86_64-unknown-linux-musl && \
25+
chmod +x /usr/local/bin/sccache
3526

36-
ENTRYPOINT ["/usr/bin/dumb-init", "--", "/android/start-emulator.sh"]
27+
# Install NDK
28+
COPY install-ndk.sh /tmp
29+
RUN . /tmp/install-ndk.sh && \
30+
download_ndk android-ndk-r13b-linux-x86_64.zip && \
31+
make_standalone_toolchain arm 9 && \
32+
remove_ndk
3733

38-
RUN curl -o /usr/local/bin/sccache \
39-
https://s3.amazonaws.com/rust-lang-ci/rust-ci-mirror/2017-02-24-sccache-x86_64-unknown-linux-gnu && \
40-
chmod +x /usr/local/bin/sccache
34+
# Install SDK
35+
RUN dpkg --add-architecture i386 && \
36+
apt-get update && \
37+
apt-get install -y --no-install-recommends \
38+
openjdk-9-jre-headless \
39+
tzdata \
40+
libstdc++6:i386 \
41+
libgl1-mesa-glx \
42+
libpulse0
43+
44+
COPY install-sdk.sh /tmp
45+
RUN . /tmp/install-sdk.sh && \
46+
download_sdk tools_r25.2.5-linux.zip && \
47+
download_sysimage armeabi-v7a 18 && \
48+
create_avd armeabi-v7a 18
49+
50+
# Setup env
51+
ENV PATH=$PATH:/android/sdk/tools
52+
ENV PATH=$PATH:/android/sdk/platform-tools
53+
54+
ENV TARGETS=arm-linux-androideabi
4155

4256
ENV RUST_CONFIGURE_ARGS \
43-
--target=arm-linux-androideabi \
44-
--arm-linux-androideabi-ndk=/android/ndk-arm-9
57+
--target=$TARGETS \
58+
--arm-linux-androideabi-ndk=/android/ndk/arm-9
59+
60+
ENV SCRIPT python2.7 ../x.py test --target $TARGETS --verbose
4561

46-
ENV SCRIPT python2.7 ../x.py test --target arm-linux-androideabi
62+
# Entrypoint
63+
COPY start-emulator.sh /android/
64+
ENTRYPOINT ["/usr/bin/dumb-init", "--", "/android/start-emulator.sh"]

src/ci/docker/arm-android/accept-licenses.sh

-15
This file was deleted.

src/ci/docker/arm-android/install-ndk.sh

+19-17
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,25 @@
1111

1212
set -ex
1313

14-
cpgdb() {
15-
cp android-ndk-r11c/prebuilt/linux-x86_64/bin/gdb /android/$1/bin/$2-gdb
16-
cp android-ndk-r11c/prebuilt/linux-x86_64/bin/gdb-orig /android/$1/bin/gdb-orig
17-
cp -r android-ndk-r11c/prebuilt/linux-x86_64/share /android/$1/share
14+
URL=https://dl.google.com/android/repository
15+
16+
download_ndk() {
17+
mkdir -p /android/ndk
18+
cd /android/ndk
19+
curl -O $URL/$1
20+
unzip -q $1
21+
rm $1
22+
mv android-ndk-* ndk
1823
}
1924

20-
# Prep the Android NDK
21-
#
22-
# See https://github.com/servo/servo/wiki/Building-for-Android
23-
curl -O https://dl.google.com/android/repository/android-ndk-r11c-linux-x86_64.zip
24-
unzip -q android-ndk-r11c-linux-x86_64.zip
25-
bash android-ndk-r11c/build/tools/make-standalone-toolchain.sh \
26-
--platform=android-9 \
27-
--toolchain=arm-linux-androideabi-4.9 \
28-
--install-dir=/android/ndk-arm-9 \
29-
--ndk-dir=/android/android-ndk-r11c \
30-
--arch=arm
31-
cpgdb ndk-arm-9 arm-linux-androideabi
25+
make_standalone_toolchain() {
26+
# See https://developer.android.com/ndk/guides/standalone_toolchain.html
27+
python2.7 /android/ndk/ndk/build/tools/make_standalone_toolchain.py \
28+
--install-dir /android/ndk/$1-$2 \
29+
--arch $1 \
30+
--api $2
31+
}
3232

33-
rm -rf ./android-ndk-r11c-linux-x86_64.zip ./android-ndk-r11c
33+
remove_ndk() {
34+
rm -rf /android/ndk/ndk
35+
}

src/ci/docker/arm-android/install-sdk.sh

+33-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/sh
2-
# Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
# Copyright 2017 The Rust Project Developers. See the COPYRIGHT
33
# file at the top-level directory of this distribution and at
44
# http://rust-lang.org/COPYRIGHT.
55
#
@@ -11,23 +11,39 @@
1111

1212
set -ex
1313

14-
# Prep the SDK and emulator
15-
#
16-
# Note that the update process requires that we accept a bunch of licenses, and
17-
# we can't just pipe `yes` into it for some reason, so we take the same strategy
18-
# located in https://github.com/appunite/docker by just wrapping it in a script
19-
# which apparently magically accepts the licenses.
14+
URL=https://dl.google.com/android/repository
15+
16+
download_sdk() {
17+
mkdir -p /android/sdk
18+
cd /android/sdk
19+
curl -O $URL/$1
20+
unzip -q $1
21+
rm -rf $1
22+
}
23+
24+
download_sysimage() {
25+
# See https://developer.android.com/studio/tools/help/android.html
26+
abi=$1
27+
api=$2
28+
29+
filter="platform-tools,android-$api"
30+
filter="$filter,sys-img-$abi-android-$api"
2031

21-
mkdir sdk
22-
curl https://dl.google.com/android/android-sdk_r24.4-linux.tgz | \
23-
tar xzf - -C sdk --strip-components=1
32+
# Keep printing yes to accept the licenses
33+
while true; do echo yes; sleep 10; done | \
34+
/android/sdk/tools/android update sdk -a --no-ui \
35+
--filter "$filter"
36+
}
2437

25-
filter="platform-tools,android-18"
26-
filter="$filter,sys-img-armeabi-v7a-android-18"
38+
create_avd() {
39+
# See https://developer.android.com/studio/tools/help/android.html
40+
abi=$1
41+
api=$2
2742

28-
./accept-licenses.sh "android - update sdk -a --no-ui --filter $filter"
43+
echo no | \
44+
/android/sdk/tools/android create avd \
45+
--name $abi-$api \
46+
--target android-$api \
47+
--abi $abi
48+
}
2949

30-
echo "no" | android create avd \
31-
--name arm-18 \
32-
--target android-18 \
33-
--abi armeabi-v7a

src/ci/docker/arm-android/start-emulator.sh

+8-1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,12 @@ set -ex
1414
# Setting SHELL to a file instead on a symlink helps android
1515
# emulator identify the system
1616
export SHELL=/bin/bash
17-
nohup nohup emulator @arm-18 -no-window -partition-size 2047 0<&- &>/dev/null &
17+
18+
# Using the default qemu2 engine makes time::tests::since_epoch fails because
19+
# the emulator date is set to unix epoch (in armeabi-v7a-18 image). Using
20+
# classic engine the emulator starts with the current date and the tests run
21+
# fine. If another image is used, this need to be evaluated again.
22+
nohup nohup emulator @armeabi-v7a-18 \
23+
-engine classic -no-window -partition-size 2047 0<&- &>/dev/null &
24+
1825
exec "$@"

src/ci/docker/dist-android/Dockerfile

+19-18
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
FROM ubuntu:16.04
22

3-
RUN dpkg --add-architecture i386 && \
4-
apt-get update && \
3+
RUN apt-get update && \
54
apt-get install -y --no-install-recommends \
65
g++ \
76
make \
@@ -12,28 +11,30 @@ RUN dpkg --add-architecture i386 && \
1211
git \
1312
cmake \
1413
unzip \
15-
expect \
16-
openjdk-9-jre \
1714
sudo \
18-
libstdc++6:i386 \
1915
xz-utils \
2016
libssl-dev \
2117
pkg-config
2218

23-
WORKDIR /android/
24-
ENV PATH=$PATH:/android/ndk-arm-9/bin:/android/sdk/tools:/android/sdk/platform-tools
25-
26-
COPY install-ndk.sh /android/
27-
RUN sh /android/install-ndk.sh
28-
2919
RUN curl -OL https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
3020
dpkg -i dumb-init_*.deb && \
3121
rm dumb-init_*.deb
32-
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
3322

3423
RUN curl -o /usr/local/bin/sccache \
3524
https://s3.amazonaws.com/rust-lang-ci/rust-ci-mirror/2017-04-29-sccache-x86_64-unknown-linux-musl && \
36-
chmod +x /usr/local/bin/sccache
25+
chmod +x /usr/local/bin/sccache
26+
27+
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
28+
29+
# Install NDK
30+
COPY install-ndk.sh /tmp
31+
RUN . /tmp/install-ndk.sh && \
32+
download_ndk android-ndk-r13b-linux-x86_64.zip && \
33+
make_standalone_toolchain arm 9 && \
34+
make_standalone_toolchain x86 9 && \
35+
make_standalone_toolchain arm64 21 && \
36+
make_standalone_toolchain x86_64 21 && \
37+
remove_ndk
3738

3839
ENV TARGETS=arm-linux-androideabi
3940
ENV TARGETS=$TARGETS,armv7-linux-androideabi
@@ -44,10 +45,10 @@ ENV TARGETS=$TARGETS,x86_64-linux-android
4445
ENV RUST_CONFIGURE_ARGS \
4546
--target=$TARGETS \
4647
--enable-extended \
47-
--arm-linux-androideabi-ndk=/android/ndk-arm-9 \
48-
--armv7-linux-androideabi-ndk=/android/ndk-arm-9 \
49-
--i686-linux-android-ndk=/android/ndk-x86-9 \
50-
--aarch64-linux-android-ndk=/android/ndk-arm64-21 \
51-
--x86_64-linux-android-ndk=/android/ndk-x86_64-21
48+
--arm-linux-androideabi-ndk=/android/ndk/arm-9 \
49+
--armv7-linux-androideabi-ndk=/android/ndk/arm-9 \
50+
--i686-linux-android-ndk=/android/ndk/x86-9 \
51+
--aarch64-linux-android-ndk=/android/ndk/arm64-21 \
52+
--x86_64-linux-android-ndk=/android/ndk/x86_64-21
5253

5354
ENV SCRIPT python2.7 ../x.py dist --target $TARGETS

src/ci/docker/dist-android/install-ndk.sh

+21-30
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,25 @@
1111

1212
set -ex
1313

14-
# Prep the Android NDK
15-
#
16-
# See https://github.com/servo/servo/wiki/Building-for-Android
17-
curl -O https://dl.google.com/android/repository/android-ndk-r11c-linux-x86_64.zip
18-
unzip -q android-ndk-r11c-linux-x86_64.zip
19-
bash android-ndk-r11c/build/tools/make-standalone-toolchain.sh \
20-
--platform=android-9 \
21-
--toolchain=arm-linux-androideabi-4.9 \
22-
--install-dir=/android/ndk-arm-9 \
23-
--ndk-dir=/android/android-ndk-r11c \
24-
--arch=arm
25-
bash android-ndk-r11c/build/tools/make-standalone-toolchain.sh \
26-
--platform=android-21 \
27-
--toolchain=aarch64-linux-android-4.9 \
28-
--install-dir=/android/ndk-arm64-21 \
29-
--ndk-dir=/android/android-ndk-r11c \
30-
--arch=arm64
31-
bash android-ndk-r11c/build/tools/make-standalone-toolchain.sh \
32-
--platform=android-9 \
33-
--toolchain=x86-4.9 \
34-
--install-dir=/android/ndk-x86-9 \
35-
--ndk-dir=/android/android-ndk-r11c \
36-
--arch=x86
37-
bash android-ndk-r11c/build/tools/make-standalone-toolchain.sh \
38-
--platform=android-21 \
39-
--toolchain=x86_64-4.9 \
40-
--install-dir=/android/ndk-x86_64-21 \
41-
--ndk-dir=/android/android-ndk-r11c \
42-
--arch=x86_64
14+
URL=https://dl.google.com/android/repository
15+
16+
download_ndk() {
17+
mkdir -p /android/ndk
18+
cd /android/ndk
19+
curl -O $URL/$1
20+
unzip -q $1
21+
rm $1
22+
mv android-ndk-* ndk
23+
}
24+
25+
make_standalone_toolchain() {
26+
# See https://developer.android.com/ndk/guides/standalone_toolchain.html
27+
python2.7 /android/ndk/ndk/build/tools/make_standalone_toolchain.py \
28+
--install-dir /android/ndk/$1-$2 \
29+
--arch $1 \
30+
--api $2
31+
}
4332

44-
rm -rf ./android-ndk-r11c-linux-x86_64.zip ./android-ndk-r11c
33+
remove_ndk() {
34+
rm -rf /android/ndk/ndk
35+
}

src/tools/compiletest/src/runtest.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ actual:\n\
570570
format!("-command={}", debugger_script.to_str().unwrap())];
571571

572572
let mut gdb_path = tool_path;
573-
gdb_path.push_str(&format!("/bin/{}-gdb", self.config.target));
573+
gdb_path.push_str("/bin/gdb");
574574
let procsrv::Result {
575575
out,
576576
err,

0 commit comments

Comments
 (0)