12add0d91Sopenharmony_ci#!/usr/bin/env sh 22add0d91Sopenharmony_ci 32add0d91Sopenharmony_ci# Disable SC2086 as it confuses the docker command. 42add0d91Sopenharmony_ci# shellcheck disable=SC2086 52add0d91Sopenharmony_ci 62add0d91Sopenharmony_ci# Small script to run tests for a target (or all targets) inside all the 72add0d91Sopenharmony_ci# respective docker images. 82add0d91Sopenharmony_ci 92add0d91Sopenharmony_ciset -ex 102add0d91Sopenharmony_ci 112add0d91Sopenharmony_ci# Default to assuming the CARGO_HOME is one directory up (to account for a `bin` 122add0d91Sopenharmony_ci# subdir) from where the `cargo` binary in `$PATH` lives. 132add0d91Sopenharmony_ciDEFAULT_CARGO_HOME="$(dirname "$(dirname "$(command -v cargo)")")" 142add0d91Sopenharmony_ci# If the CARGO_HOME env var is already set, use that. If it isn't set use the 152add0d91Sopenharmony_ci# default. 162add0d91Sopenharmony_ciCARGO_HOME="${CARGO_HOME:-$DEFAULT_CARGO_HOME}" 172add0d91Sopenharmony_ci 182add0d91Sopenharmony_ciecho "${HOME}" 192add0d91Sopenharmony_cipwd 202add0d91Sopenharmony_ci 212add0d91Sopenharmony_ci# Avoid "no space left on device" failure. 222add0d91Sopenharmony_ciif [ "${1}" = "aarch64-linux-android" ] ; then 232add0d91Sopenharmony_ci docker system prune -af 242add0d91Sopenharmony_ci docker system df 252add0d91Sopenharmony_cifi 262add0d91Sopenharmony_ci 272add0d91Sopenharmony_cirun() { 282add0d91Sopenharmony_ci echo "Building docker container for target ${1}" 292add0d91Sopenharmony_ci 302add0d91Sopenharmony_ci # use -f so we can use ci/ as build context 312add0d91Sopenharmony_ci docker build -t libc -f "ci/docker/${1}/Dockerfile" ci/ 322add0d91Sopenharmony_ci mkdir -p target 332add0d91Sopenharmony_ci if [ -w /dev/kvm ]; then 342add0d91Sopenharmony_ci kvm="--volume /dev/kvm:/dev/kvm" 352add0d91Sopenharmony_ci else 362add0d91Sopenharmony_ci kvm="" 372add0d91Sopenharmony_ci fi 382add0d91Sopenharmony_ci 392add0d91Sopenharmony_ci docker run \ 402add0d91Sopenharmony_ci --rm \ 412add0d91Sopenharmony_ci --user "$(id -u)":"$(id -g)" \ 422add0d91Sopenharmony_ci --env LIBC_CI \ 432add0d91Sopenharmony_ci --env LIBC_CI_ZBUILD_STD \ 442add0d91Sopenharmony_ci --env CARGO_HOME=/cargo \ 452add0d91Sopenharmony_ci --env CARGO_TARGET_DIR=/checkout/target \ 462add0d91Sopenharmony_ci --volume "$CARGO_HOME":/cargo \ 472add0d91Sopenharmony_ci --volume "$(rustc --print sysroot)":/rust:ro \ 482add0d91Sopenharmony_ci --volume "$(pwd)":/checkout:ro \ 492add0d91Sopenharmony_ci --volume "$(pwd)"/target:/checkout/target \ 502add0d91Sopenharmony_ci $kvm \ 512add0d91Sopenharmony_ci --init \ 522add0d91Sopenharmony_ci --workdir /checkout \ 532add0d91Sopenharmony_ci libc \ 542add0d91Sopenharmony_ci sh -c "HOME=/tmp PATH=\$PATH:/rust/bin exec ci/run.sh ${1}" 552add0d91Sopenharmony_ci} 562add0d91Sopenharmony_ci 572add0d91Sopenharmony_cibuild_switch() { 582add0d91Sopenharmony_ci echo "Building docker container for target switch" 592add0d91Sopenharmony_ci 602add0d91Sopenharmony_ci # use -f so we can use ci/ as build context 612add0d91Sopenharmony_ci docker build -t libc -f "ci/docker/switch/Dockerfile" ci/ 622add0d91Sopenharmony_ci mkdir -p target 632add0d91Sopenharmony_ci if [ -w /dev/kvm ]; then 642add0d91Sopenharmony_ci kvm="--volume /dev/kvm:/dev/kvm" 652add0d91Sopenharmony_ci else 662add0d91Sopenharmony_ci kvm="" 672add0d91Sopenharmony_ci fi 682add0d91Sopenharmony_ci 692add0d91Sopenharmony_ci cp "$(command -v rustup)" "$(rustc --print sysroot)/bin" 702add0d91Sopenharmony_ci 712add0d91Sopenharmony_ci docker run \ 722add0d91Sopenharmony_ci --rm \ 732add0d91Sopenharmony_ci --user "$(id -u)":"$(id -g)" \ 742add0d91Sopenharmony_ci --env LIBC_CI \ 752add0d91Sopenharmony_ci --env CARGO_HOME=/cargo \ 762add0d91Sopenharmony_ci --env CARGO_TARGET_DIR=/checkout/target \ 772add0d91Sopenharmony_ci --volume "$CARGO_HOME":/cargo \ 782add0d91Sopenharmony_ci --volume "$(rustc --print sysroot)":/rust:ro \ 792add0d91Sopenharmony_ci --volume "$(pwd)":/checkout:ro \ 802add0d91Sopenharmony_ci --volume "$(pwd)"/target:/checkout/target \ 812add0d91Sopenharmony_ci --volume ~/.rustup:/.rustup:Z \ 822add0d91Sopenharmony_ci $kvm \ 832add0d91Sopenharmony_ci --init \ 842add0d91Sopenharmony_ci --workdir /checkout \ 852add0d91Sopenharmony_ci libc \ 862add0d91Sopenharmony_ci sh -c "HOME=/tmp RUSTUP_HOME=/tmp PATH=\$PATH:/rust/bin rustup default nightly \ 872add0d91Sopenharmony_ci && rustup component add rust-src --target ci/switch.json \ 882add0d91Sopenharmony_ci && cargo build -Z build-std=core,alloc --target ci/switch.json" 892add0d91Sopenharmony_ci} 902add0d91Sopenharmony_ci 912add0d91Sopenharmony_ciif [ -z "${1}" ]; then 922add0d91Sopenharmony_ci for d in ci/docker/*; do 932add0d91Sopenharmony_ci run "${d}" 942add0d91Sopenharmony_ci done 952add0d91Sopenharmony_cielse 962add0d91Sopenharmony_ci if [ "${1}" != "switch" ]; then 972add0d91Sopenharmony_ci run "${1}" 982add0d91Sopenharmony_ci else 992add0d91Sopenharmony_ci build_switch 1002add0d91Sopenharmony_ci fi 1012add0d91Sopenharmony_cifi 102