mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-05 19:57:02 +00:00

This crate doesn't need to be a default member since it requires the opposite settings from everything else. Exclude it from the workspace and run it only when explicitly requested. This also makes `cargo t --no-default-features` work without additional qualifiers. `--no-default-features` still needs to be passed to ensure `#![compiler_builtins]` does not get set. compiler-builtins needs doctests disabled in order for everything to work correctly, since this causes an error running rustdoc that is unrelated to features (our `compiler_builtins` is getting into the crate graph before that from the sysroot, but `#![compiler_builtins]` is not set). We can also remove `test = false` and `doctest = false` in `builtins-test` since these no longer cause issues. This is unlikely to be used but it is better to not quietly skip if anything ever gets added by accident.
110 lines
3.1 KiB
Bash
Executable File
110 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"
|
|
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 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
|