• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env sh
2
3# Disable SC2086 as it confuses the docker command.
4# shellcheck disable=SC2086
5
6# Small script to run tests for a target (or all targets) inside all the
7# respective docker images.
8
9set -ex
10
11# Default to assuming the CARGO_HOME is one directory up (to account for a `bin`
12# subdir) from where the `cargo` binary in `$PATH` lives.
13DEFAULT_CARGO_HOME="$(dirname "$(dirname "$(command -v cargo)")")"
14# If the CARGO_HOME env var is already set, use that. If it isn't set use the
15# default.
16CARGO_HOME="${CARGO_HOME:-$DEFAULT_CARGO_HOME}"
17
18echo "${HOME}"
19pwd
20
21# Avoid "no space left on device" failure.
22if [ "${1}" = "aarch64-linux-android" ] ; then
23  docker system prune -af
24  docker system df
25fi
26
27run() {
28    echo "Building docker container for target ${1}"
29
30    # use -f so we can use ci/ as build context
31    docker build -t libc -f "ci/docker/${1}/Dockerfile" ci/
32    mkdir -p target
33    if [ -w /dev/kvm ]; then
34        kvm="--volume /dev/kvm:/dev/kvm"
35    else
36        kvm=""
37    fi
38
39    docker run \
40      --rm \
41      --user "$(id -u)":"$(id -g)" \
42      --env LIBC_CI \
43      --env LIBC_CI_ZBUILD_STD \
44      --env CARGO_HOME=/cargo \
45      --env CARGO_TARGET_DIR=/checkout/target \
46      --volume "$CARGO_HOME":/cargo \
47      --volume "$(rustc --print sysroot)":/rust:ro \
48      --volume "$(pwd)":/checkout:ro \
49      --volume "$(pwd)"/target:/checkout/target \
50      $kvm \
51      --init \
52      --workdir /checkout \
53      libc \
54      sh -c "HOME=/tmp PATH=\$PATH:/rust/bin exec ci/run.sh ${1}"
55}
56
57build_switch() {
58    echo "Building docker container for target switch"
59
60    # use -f so we can use ci/ as build context
61    docker build -t libc -f "ci/docker/switch/Dockerfile" ci/
62    mkdir -p target
63    if [ -w /dev/kvm ]; then
64        kvm="--volume /dev/kvm:/dev/kvm"
65    else
66        kvm=""
67    fi
68
69    cp "$(command -v rustup)" "$(rustc --print sysroot)/bin"
70
71    docker run \
72      --rm \
73      --user "$(id -u)":"$(id -g)" \
74      --env LIBC_CI \
75      --env CARGO_HOME=/cargo \
76      --env CARGO_TARGET_DIR=/checkout/target \
77      --volume "$CARGO_HOME":/cargo \
78      --volume "$(rustc --print sysroot)":/rust:ro \
79      --volume "$(pwd)":/checkout:ro \
80      --volume "$(pwd)"/target:/checkout/target \
81      --volume ~/.rustup:/.rustup:Z \
82      $kvm \
83      --init \
84      --workdir /checkout \
85      libc \
86      sh -c "HOME=/tmp RUSTUP_HOME=/tmp PATH=\$PATH:/rust/bin rustup default nightly \
87        && rustup component add rust-src --target ci/switch.json \
88        && cargo build -Z build-std=core,alloc --target ci/switch.json"
89}
90
91if [ -z "${1}" ]; then
92  for d in ci/docker/*; do
93    run "${d}"
94  done
95else
96  if [ "${1}" != "switch" ]; then
97    run "${1}"
98  else
99    build_switch
100  fi
101fi
102