mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-27 02:53:43 +00:00
Many contributions to compiler-builtins don't have any need to touch libm, and could get by with the few minutes of CI for compiler-builtins rather than the ~30 minutes for libm. We already have some scripts that handle changed file detection, so expand its use to skip libm CI if it doesn't need to run.
111 lines
3.1 KiB
Bash
Executable File
111 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Small script to run tests for a target (or all targets) inside all the
|
|
# respective docker images.
|
|
|
|
set -euxo pipefail
|
|
|
|
host_arch="$(uname -m | sed 's/arm64/aarch64/')"
|
|
|
|
run() {
|
|
local target="$1"
|
|
|
|
echo "testing target: $target"
|
|
|
|
emulated=""
|
|
target_arch="$(echo "$target" | cut -d'-' -f1)"
|
|
if [ "$target_arch" != "$host_arch" ]; then
|
|
emulated=1
|
|
echo "target is emulated"
|
|
fi
|
|
|
|
# Directories and files that do not yet exist need to be created before
|
|
# calling docker, otherwise docker will create them but they will be owned
|
|
# by root.
|
|
mkdir -p target
|
|
cargo generate-lockfile --manifest-path builtins-test-intrinsics/Cargo.toml
|
|
|
|
run_cmd="HOME=/tmp"
|
|
|
|
if [ "${GITHUB_ACTIONS:-}" = "true" ]; then
|
|
# Enable Docker image caching on GHA
|
|
build_cmd=("buildx" "build")
|
|
build_args=(
|
|
"--cache-from" "type=local,src=/tmp/.buildx-cache"
|
|
"--cache-to" "type=local,dest=/tmp/.buildx-cache-new"
|
|
# This is the beautiful bash syntax for expanding an array but neither
|
|
# raising an error nor returning an empty string if the array is empty.
|
|
"${build_args[@]:+"${build_args[@]}"}"
|
|
"--load"
|
|
)
|
|
fi
|
|
|
|
if [ "$(uname -s)" = "Linux" ] && [ -z "${DOCKER_BASE_IMAGE:-}" ]; then
|
|
# Share the host rustc and target. Do this only on Linux and if the image
|
|
# isn't overridden
|
|
run_args=(
|
|
--user "$(id -u):$(id -g)"
|
|
-e "CARGO_HOME=/cargo"
|
|
-v "${HOME}/.cargo:/cargo"
|
|
-v "$(pwd)/target:/builtins-target"
|
|
-v "$(rustc --print sysroot):/rust:ro"
|
|
)
|
|
run_cmd="$run_cmd PATH=\$PATH:/rust/bin:/cargo/bin"
|
|
else
|
|
# Use rustc provided by a docker image
|
|
docker volume create compiler-builtins-cache
|
|
build_args=(
|
|
"--build-arg"
|
|
"IMAGE=${DOCKER_BASE_IMAGE:-rustlang/rust:nightly}"
|
|
)
|
|
run_args=(-v "compiler-builtins-cache:/builtins-target")
|
|
run_cmd="$run_cmd HOME=/tmp" "USING_CONTAINER_RUSTC=1"
|
|
fi
|
|
|
|
if [ -d compiler-rt ]; then
|
|
export RUST_COMPILER_RT_ROOT="/checkout/compiler-rt"
|
|
fi
|
|
|
|
run_cmd="$run_cmd ci/run.sh $target"
|
|
|
|
docker "${build_cmd[@]:-build}" \
|
|
-t "builtins-$target" \
|
|
"${build_args[@]:-}" \
|
|
"ci/docker/$target"
|
|
docker run \
|
|
--rm \
|
|
-e CI \
|
|
-e CARGO_TARGET_DIR=/builtins-target \
|
|
-e CARGO_TERM_COLOR \
|
|
-e MAY_SKIP_LIBM_CI \
|
|
-e RUSTFLAGS \
|
|
-e RUST_BACKTRACE \
|
|
-e RUST_COMPILER_RT_ROOT \
|
|
-e "EMULATED=$emulated" \
|
|
-v "$(pwd):/checkout:ro" \
|
|
-w /checkout \
|
|
"${run_args[@]:-}" \
|
|
--init \
|
|
"builtins-$target" \
|
|
sh -c "$run_cmd"
|
|
}
|
|
|
|
if [ "${1:-}" = "--help" ] || [ "$#" -gt 1 ]; then
|
|
set +x
|
|
echo "\
|
|
usage: ./ci/run-docker.sh [target]
|
|
|
|
you can also set DOCKER_BASE_IMAGE to use something other than the default
|
|
ubuntu:24.04 (or rustlang/rust:nightly).
|
|
"
|
|
exit
|
|
fi
|
|
|
|
if [ -z "${1:-}" ]; then
|
|
for d in ci/docker/*; do
|
|
run $(basename "$d")
|
|
done
|
|
else
|
|
run "$1"
|
|
fi
|