]> git.lizzy.rs Git - rust.git/blob - src/ci/docker/armhf-gnu/Dockerfile
Rollup merge of #39604 - est31:i128_tests, r=alexcrichton
[rust.git] / src / ci / docker / armhf-gnu / Dockerfile
1 FROM ubuntu:16.04
2
3 RUN apt-get update -y && apt-get install -y --no-install-recommends \
4       bc \
5       bzip2 \
6       ca-certificates \
7       cmake \
8       cpio \
9       curl \
10       file \
11       g++ \
12       gcc-arm-linux-gnueabihf \
13       git \
14       libc6-dev \
15       libc6-dev-armhf-cross \
16       make \
17       python2.7 \
18       qemu-system-arm \
19       xz-utils
20
21 ENV ARCH=arm \
22     CROSS_COMPILE=arm-linux-gnueabihf-
23
24 WORKDIR /build
25
26 # Compile the kernel that we're going to run and be emulating with. This is
27 # basically just done to be compatible with the QEMU target that we're going
28 # to be using when running tests. If any other kernel works or if any
29 # other QEMU target works with some other stock kernel, we can use that too!
30 #
31 # The `vexpress_config` config file was a previously generated config file for
32 # the kernel. This file was generated by running `make vexpress_defconfig`
33 # followed by `make menuconfig` and then enabling the IPv6 protocol page.
34 COPY vexpress_config /build/.config
35 RUN curl https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.42.tar.xz | \
36       tar xJf - && \
37       cd /build/linux-4.4.42 && \
38       cp /build/.config . && \
39       make -j$(nproc) all && \
40       cp arch/arm/boot/zImage /tmp && \
41       cd /build &&  \
42       rm -rf linux-4.4.42
43
44 # Compile an instance of busybox as this provides a lightweight system and init
45 # binary which we will boot into. Only trick here is configuring busybox to
46 # build static binaries.
47 RUN curl https://www.busybox.net/downloads/busybox-1.21.1.tar.bz2 | tar xjf - && \
48       cd busybox-1.21.1 && \
49       make defconfig && \
50       sed -i 's/.*CONFIG_STATIC.*/CONFIG_STATIC=y/' .config && \
51       make -j$(nproc) && \
52       make install && \
53       mv _install /tmp/rootfs && \
54       cd /build && \
55       rm -rf busybox-1.12.1
56
57 # Download the ubuntu rootfs, which we'll use as a chroot for all our tests.
58 WORKDIR /tmp
59 RUN mkdir rootfs/ubuntu
60 RUN curl http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04-core-armhf.tar.gz | \
61       tar xzf - -C rootfs/ubuntu && \
62       cd rootfs && mkdir proc sys dev etc etc/init.d
63
64 # Copy over our init script, which starts up our test server and also a few
65 # other misc tasks.
66 COPY rcS rootfs/etc/init.d/rcS
67 RUN chmod +x rootfs/etc/init.d/rcS
68
69 # Helper to quickly fill the entropy pool in the kernel.
70 COPY addentropy.c /tmp/
71 RUN arm-linux-gnueabihf-gcc addentropy.c -o rootfs/addentropy -static
72
73 # TODO: What is this?!
74 RUN curl -O http://ftp.nl.debian.org/debian/dists/jessie/main/installer-armhf/current/images/device-tree/vexpress-v2p-ca15-tc1.dtb
75
76 ENV SCCACHE_DIGEST=7237e38e029342fa27b7ac25412cb9d52554008b12389727320bd533fd7f05b6a96d55485f305caf95e5c8f5f97c3313e10012ccad3e752aba2518f3522ba783
77 RUN curl -L https://api.pub.build.mozilla.org/tooltool/sha512/$SCCACHE_DIGEST | \
78       tar xJf - -C /usr/local/bin --strip-components=1
79
80 RUN curl -OL https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
81     dpkg -i dumb-init_*.deb && \
82     rm dumb-init_*.deb
83 ENTRYPOINT ["/usr/bin/dumb-init", "--"]
84
85 ENV RUST_CONFIGURE_ARGS \
86       --target=arm-unknown-linux-gnueabihf \
87       --qemu-armhf-rootfs=/tmp/rootfs
88 ENV SCRIPT python2.7 ../x.py test --target arm-unknown-linux-gnueabihf
89
90 ENV NO_CHANGE_USER=1