about summary refs log tree commit diff
path: root/src/ci/docker/disabled/aarch64-gnu/Dockerfile
blob: b2a3ba3ec2600ebc2d37296b328d09b675d237fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
FROM ubuntu:16.04

RUN apt-get update -y && apt-get install -y --no-install-recommends \
      bc \
      bzip2 \
      ca-certificates \
      cmake \
      cpio \
      curl \
      file \
      g++ \
      gcc-aarch64-linux-gnu \
      git \
      libc6-dev \
      libc6-dev-arm64-cross \
      make \
      python2.7 \
      qemu-system-aarch64 \
      xz-utils

ENV ARCH=arm64 \
    CROSS_COMPILE=aarch64-linux-gnu-

WORKDIR /build

# Compile the kernel that we're going to run and be emulating with. This is
# basically just done to be compatible with the QEMU target that we're going
# to be using when running tests. If any other kernel works or if any
# other QEMU target works with some other stock kernel, we can use that too!
#
# The `config` config file was a previously generated config file for
# the kernel. This file was generated by running `make defconfig`
# followed by `make menuconfig` and then enabling the IPv6 protocol page.
COPY aarch64-gnu/config /build/.config
RUN curl https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.42.tar.xz | \
      tar xJf - && \
      cd /build/linux-4.4.42 && \
      cp /build/.config . && \
      make -j$(nproc) all && \
      cp arch/arm64/boot/Image /tmp && \
      cd /build &&  \
      rm -rf linux-4.4.42

# Compile an instance of busybox as this provides a lightweight system and init
# binary which we will boot into. Only trick here is configuring busybox to
# build static binaries.
RUN curl https://www.busybox.net/downloads/busybox-1.21.1.tar.bz2 | tar xjf - && \
      cd busybox-1.21.1 && \
      make defconfig && \
      sed -i 's/.*CONFIG_STATIC.*/CONFIG_STATIC=y/' .config && \
      make -j$(nproc) && \
      make install && \
      mv _install /tmp/rootfs && \
      cd /build && \
      rm -rf busybox-1.12.1

# Download the ubuntu rootfs, which we'll use as a chroot for all our tests.
WORKDIR /tmp
RUN mkdir rootfs/ubuntu
RUN curl http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04-core-arm64.tar.gz | \
      tar xzf - -C rootfs/ubuntu && \
      cd rootfs && mkdir proc sys dev etc etc/init.d

# Copy over our init script, which starts up our test server and also a few
# other misc tasks.
COPY scripts/qemu-bare-bones-rcS rootfs/etc/init.d/rcS
RUN chmod +x rootfs/etc/init.d/rcS

# Helper to quickly fill the entropy pool in the kernel.
COPY scripts/qemu-bare-bones-addentropy.c /tmp/addentropy.c
RUN aarch64-linux-gnu-gcc addentropy.c -o rootfs/addentropy -static

COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh

ENV RUST_CONFIGURE_ARGS \
      --qemu-aarch64-rootfs=/tmp/rootfs
ENV SCRIPT python2.7 ../x.py test --target aarch64-unknown-linux-gnu
ENV NO_CHANGE_USER=1