Skip to content

Commit f300480

Browse files
author
Jorge Aparicio
authored
Merge pull request #37 from japaric/docker
CI: run all Linux targets inside docker
2 parents b4e474f + b5b28c0 commit f300480

File tree

4 files changed

+43
-200
lines changed

4 files changed

+43
-200
lines changed

.travis.yml

Lines changed: 11 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,43 @@
1+
dist: trusty
12
language: generic
2-
sudo: false
3+
services: docker
4+
sudo: required
35

46
matrix:
57
include:
6-
- env: TARGET=thumbv6m-none-eabi
7-
os: linux
8-
dist: trusty
9-
sudo: required
10-
- env: TARGET=thumbv7m-none-eabi
11-
os: linux
12-
dist: trusty
13-
sudo: required
14-
- env: TARGET=thumbv7em-none-eabi
15-
os: linux
16-
dist: trusty
17-
sudo: required
18-
- env: TARGET=i586-unknown-linux-gnu
19-
os: linux
20-
services: docker
21-
sudo: required
228
- env: TARGET=aarch64-unknown-linux-gnu
239
os: linux
24-
dist: trusty
25-
sudo: required
26-
addons:
27-
apt:
28-
packages:
29-
- binfmt-support
30-
- qemu-user-static
3110
- env: TARGET=arm-unknown-linux-gnueabi
3211
os: linux
33-
sudo: required
34-
addons:
35-
apt:
36-
packages:
37-
- binfmt-support
38-
- gcc-arm-linux-gnueabi
39-
- libc6-armel-cross
40-
- libc6-dev-armel-cross
41-
- qemu-user-static
4212
- env: TARGET=arm-unknown-linux-gnueabihf
4313
os: linux
44-
sudo: required
45-
addons:
46-
apt:
47-
packages: &armhf
48-
- binfmt-support
49-
- gcc-arm-linux-gnueabihf
50-
- libc6-armhf-cross
51-
- libc6-dev-armhf-cross
52-
- qemu-user-static
5314
- env: TARGET=armv7-unknown-linux-gnueabihf
5415
os: linux
55-
sudo: required
56-
addons:
57-
apt:
58-
packages: *armhf
16+
- env: TARGET=i586-unknown-linux-gnu
17+
os: linux
5918
- env: TARGET=i686-apple-darwin
6019
os: osx
6120
- env: TARGET=i686-unknown-linux-gnu
6221
os: linux
63-
addons:
64-
apt:
65-
packages:
66-
- gcc-multilib
6722
- env: TARGET=mips-unknown-linux-gnu
6823
os: linux
69-
services: docker
70-
sudo: required
7124
- env: TARGET=mipsel-unknown-linux-gnu
7225
os: linux
73-
services: docker
74-
sudo: required
7526
- env: TARGET=powerpc-unknown-linux-gnu
7627
os: linux
77-
dist: trusty
78-
sudo: required
79-
addons:
80-
apt:
81-
packages:
82-
- binfmt-support
83-
- gcc-powerpc-linux-gnu
84-
- libc6-powerpc-cross
85-
- libc6-dev-powerpc-cross
86-
- qemu-user-static
8728
- env: TARGET=powerpc64-unknown-linux-gnu
8829
os: linux
89-
services: docker
90-
sudo: required
9130
- env: TARGET=powerpc64le-unknown-linux-gnu
9231
os: linux
93-
services: docker
94-
sudo: required
95-
- env: TARGET=x86_64-apple-darwin
96-
os: osx
97-
- env: TARGET=x86_64-unknown-linux-gnu
32+
- env: TARGET=thumbv6m-none-eabi
9833
os: linux
99-
allow_failures:
100-
# Issue #2. Flaky test
101-
- env: TARGET=arm-unknown-linux-gnueabi
34+
- env: TARGET=thumbv7em-none-eabi
10235
os: linux
103-
# Issue #2. Flaky test
104-
- env: TARGET=arm-unknown-linux-gnueabihf
36+
- env: TARGET=thumbv7m-none-eabi
10537
os: linux
106-
# Issue #2. Flaky test
107-
- env: TARGET=armv7-unknown-linux-gnueabihf
38+
- env: TARGET=x86_64-apple-darwin
39+
os: osx
40+
- env: TARGET=x86_64-unknown-linux-gnu
10841
os: linux
10942

11043
before_install:

ci/env.sh

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,48 +28,25 @@ case $TARGET in
2828
export PREFIX=arm-linux-gnueabihf-
2929
export QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf
3030
;;
31-
i586-unknown-linux-gnu)
32-
# NOTE $DOCKER values: 'y' (yes, call docker), 'i' (inside a docker container) or 'n' ("no)
33-
if [[ -z $DOCKER ]]; then
34-
export DOCKER=y
35-
fi
36-
;;
3731
mips-unknown-linux-gnu)
38-
if [[ -z $DOCKER ]]; then
39-
export DOCKER=y
40-
fi
4132
export PREFIX=mips-linux-gnu-
42-
export QEMU=qemu-mips
4333
export QEMU_LD_PREFIX=/usr/mips-linux-gnu
4434
;;
4535
mipsel-unknown-linux-gnu)
46-
if [[ -z $DOCKER ]]; then
47-
export DOCKER=y
48-
fi
4936
export PREFIX=mipsel-linux-gnu-
50-
export QEMU=qemu-mipsel
5137
export QEMU_LD_PREFIX=/usr/mipsel-linux-gnu
5238
;;
5339
powerpc-unknown-linux-gnu)
5440
export PREFIX=powerpc-linux-gnu-
5541
export QEMU_LD_PREFIX=/usr/powerpc-linux-gnu
5642
;;
5743
powerpc64-unknown-linux-gnu)
58-
if [[ -z $DOCKER ]]; then
59-
export DOCKER=y
60-
fi
6144
export PREFIX=powerpc64-linux-gnu-
62-
export QEMU=qemu-ppc64
6345
export QEMU_LD_PREFIX=/usr/powerpc64-linux-gnu
6446
;;
6547
powerpc64le-unknown-linux-gnu)
66-
if [[ -z $DOCKER ]]; then
67-
export DOCKER=y
68-
fi
6948
export PREFIX=powerpc64le-linux-gnu-
70-
export QEMU=qemu-ppc64le
7149
export QEMU_LD_PREFIX=/usr/powerpc64le-linux-gnu
72-
# Issue #2. QEMU doesn't work
7350
export RUN_TESTS=n
7451
;;
7552
thumbv*-none-eabi)

ci/install.sh

Lines changed: 16 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -2,77 +2,33 @@ set -ex
22

33
. $(dirname $0)/env.sh
44

5-
install_deps() {
6-
if [[ ${DOCKER} == "i" ]]; then
7-
apt-get update
8-
apt-get install -y --no-install-recommends \
9-
ca-certificates curl
10-
fi
11-
}
12-
135
install_qemu() {
14-
case $TARGET in
15-
mipsel-unknown-linux-gnu | \
16-
powerpc64le-unknown-linux-gnu)
6+
case ${QEMU_ARCH:-$TRAVIS_OS_NAME} in
7+
i386)
8+
dpkg --add-architecture $QEMU_ARCH
179
apt-get install -y --no-install-recommends \
18-
qemu-user
10+
binfmt-support qemu-user-static:$QEMU_ARCH
1911
;;
20-
mips-unknown-linux-gnu | \
21-
powerpc64-unknown-linux-gnu)
22-
dpkg --add-architecture i386
12+
linux)
2313
apt-get update
2414
apt-get install -y --no-install-recommends \
25-
qemu-user:i386
15+
binfmt-support qemu-user-static
2616
;;
2717
esac
2818
}
2919

3020
install_binutils() {
31-
case $TRAVIS_OS_NAME in
32-
osx)
33-
brew install binutils
34-
;;
35-
esac
36-
37-
case $TARGET in
38-
thumbv*-none-eabi)
39-
sudo apt-get install -y --no-install-recommends \
40-
gcc-arm-none-eabi
41-
;;
42-
esac
43-
}
44-
45-
install_c_toolchain() {
46-
case $TARGET in
47-
aarch64-unknown-linux-gnu)
48-
sudo apt-get install -y --no-install-recommends \
49-
gcc-aarch64-linux-gnu libc6-dev-arm64-cross
50-
;;
51-
i586-unknown-linux-gnu)
52-
apt-get install -y --no-install-recommends \
53-
gcc libc6-dev-i386 lib32gcc-5-dev
54-
;;
55-
mips-unknown-linux-gnu)
56-
apt-get install -y --no-install-recommends \
57-
gcc gcc-mips-linux-gnu libc6-dev libc6-dev-mips-cross
58-
;;
59-
mipsel-unknown-linux-gnu)
60-
apt-get install -y --no-install-recommends \
61-
gcc gcc-mipsel-linux-gnu libc6-dev libc6-dev-mipsel-cross
62-
;;
63-
powerpc64-unknown-linux-gnu)
64-
apt-get install -y --no-install-recommends \
65-
gcc gcc-powerpc64-linux-gnu libc6-dev libc6-dev-ppc64-cross
66-
;;
67-
powerpc64le-unknown-linux-gnu)
68-
apt-get install -y --no-install-recommends \
69-
gcc gcc-powerpc64le-linux-gnu libc6-dev libc6-dev-ppc64el-cross
70-
;;
71-
esac
21+
if [[ $TRAVIS_OS_NAME == "osx" ]]; then
22+
brew install binutils
23+
fi
7224
}
7325

7426
install_rust() {
75-
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=nightly
27+
if [[ $TRAVIS_OS_NAME == "osx" ]]; then
28+
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=nightly
29+
else
30+
rustup default nightly
31+
fi
7632

7733
rustc -V
7834
cargo -V
@@ -86,35 +42,18 @@ add_rustup_target() {
8642

8743
install_xargo() {
8844
if [[ $CARGO == "xargo" ]]; then
89-
sudo apt-get install -y --no-install-recommends \
90-
libssh2-1
9145
curl -sf "https://raw.githubusercontent.com/japaric/rust-everywhere/master/install.sh" | \
92-
bash -s -- --from japaric/xargo --at $HOME/.cargo/bin
93-
fi
94-
}
95-
96-
configure_cargo() {
97-
if [[ $PREFIX ]]; then
98-
${PREFIX}gcc -v
99-
100-
mkdir -p .cargo
101-
cat >>.cargo/config <<EOF
102-
[target.$TARGET]
103-
linker = "${PREFIX}gcc"
104-
EOF
46+
bash -s -- --from japaric/xargo --at /root/.cargo/bin
10547
fi
10648
}
10749

10850
main() {
109-
if [[ ${DOCKER:-n} != "y" ]]; then
110-
install_deps
51+
if [[ $TRAVIS_OS_NAME == "osx" || ${IN_DOCKER_CONTAINER:-n} == "y" ]]; then
11152
install_qemu
11253
install_binutils
113-
install_c_toolchain
11454
install_rust
11555
add_rustup_target
11656
install_xargo
117-
configure_cargo
11857
fi
11958
}
12059

ci/script.sh

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,39 @@ build() {
77
${CARGO:-cargo} build --target $TARGET --release
88
}
99

10+
inspect() {
11+
$PREFIX$NM -g --defined-only target/**/debug/*.rlib
12+
set +e
13+
$PREFIX$OBJDUMP -Cd target/**/debug/*.rlib
14+
$PREFIX$OBJDUMP -Cd target/**/release/*.rlib
15+
set -e
16+
}
17+
1018
run_tests() {
1119
if [[ $QEMU_LD_PREFIX ]]; then
1220
export RUST_TEST_THREADS=1
1321
fi
1422

15-
if [[ $QEMU ]]; then
16-
cargo test --target $TARGET --no-run
17-
if [[ ${RUN_TESTS:-y} == "y" ]]; then
18-
$QEMU target/**/debug/rustc_builtins-*
19-
fi
20-
cargo test --target $TARGET --release --no-run
21-
if [[ ${RUN_TESTS:-y} == "y" ]]; then
22-
$QEMU target/**/release/rustc_builtins-*
23-
fi
24-
elif [[ ${RUN_TESTS:-y} == "y" ]]; then
23+
if [[ ${RUN_TESTS:-y} == "y" ]]; then
2524
cargo test --target $TARGET
2625
cargo test --target $TARGET --release
2726
fi
2827
}
2928

30-
inspect() {
31-
$PREFIX$NM -g --defined-only target/**/debug/*.rlib
32-
set +e
33-
$PREFIX$OBJDUMP -Cd target/**/debug/*.rlib
34-
$PREFIX$OBJDUMP -Cd target/**/release/*.rlib
35-
set -e
36-
}
37-
3829
main() {
39-
if [[ $DOCKER == "y" ]]; then
30+
if [[ $TRAVIS_OS_NAME == "linux" && ${IN_DOCKER_CONTAINER:-n} == "n" ]]; then
31+
local tag=2016-08-13
32+
4033
docker run \
41-
-e DOCKER=i \
34+
--privileged \
35+
-e IN_DOCKER_CONTAINER=y \
4236
-e TARGET=$TARGET \
4337
-e TRAVIS_OS_NAME=$TRAVIS_OS_NAME \
4438
-v $(pwd):/mnt \
45-
ubuntu:16.04 \
39+
japaric/rustc-builtins:$tag \
4640
sh -c 'set -ex;
4741
cd /mnt;
48-
export PATH="$PATH:$HOME/.cargo/bin";
42+
export PATH="$PATH:/root/.cargo/bin";
4943
bash ci/install.sh;
5044
bash ci/script.sh'
5145
else

0 commit comments

Comments
 (0)