The following error is being returned by the Jenkins, https://jenkins.gem5.org, on a regular basis: ``` error waiting for container: unexpected EOF ``` An example can be found here: https://jenkins.gem5.org/job/nightly/172/console It is not known exactly what the cause of this error is, but increasing the memory available to each container may help the issue. This patch may be reverted if it does not fix the problem. Change-Id: Ide341774439820def91b0373b03801396705cd62 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58169 Maintainer: Bobby Bruce <bbruce@ucdavis.edu> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
152 lines
4.8 KiB
Bash
Executable File
152 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# This script will run all our supported compilers (see the "images" set)
|
|
# against gem5. The images for the latests supported gcc and clang compiler
|
|
# versions are run against all built targets. The remainder are evaluated
|
|
# against a random shuffling of built targets.
|
|
|
|
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|
gem5_root="${dir}/.."
|
|
build_dir="${gem5_root}/build"
|
|
|
|
# The per-container Docker memory limit.
|
|
docker_mem_limit="18g"
|
|
|
|
# All Docker images in the gem5 testing GCR which we want to compile with.
|
|
images=("gcc-version-11"
|
|
"gcc-version-10"
|
|
"gcc-version-9"
|
|
"gcc-version-8"
|
|
"gcc-version-7"
|
|
"clang-version-12"
|
|
"clang-version-11"
|
|
"clang-version-10"
|
|
"clang-version-9"
|
|
"clang-version-8"
|
|
"clang-version-7"
|
|
"clang-version-6.0"
|
|
# The following checks our support for Ubuntu 18.04 and 20.04, for both our
|
|
# "minimum dependencies" and "all dependencies" docker images.
|
|
"ubuntu-18.04_all-dependencies"
|
|
"ubuntu-20.04_all-dependencies"
|
|
"ubuntu-20.04_min-dependencies"
|
|
)
|
|
|
|
# A subset of the above list: these images will build against every target,
|
|
# ignoring builds_per_compiler.
|
|
comprehensive=("gcc-version-11"
|
|
"clang-version-12")
|
|
|
|
# All build targets in build_opt/ which we want to build using each image.
|
|
builds=("ARM"
|
|
"ARM_MESI_Three_Level"
|
|
"ARM_MESI_Three_Level_HTM"
|
|
"ARM_MOESI_hammer"
|
|
"Garnet_standalone"
|
|
"GCN3_X86"
|
|
"MIPS"
|
|
"NULL"
|
|
"NULL_MESI_Two_Level"
|
|
"NULL_MOESI_CMP_directory"
|
|
"NULL_MOESI_CMP_token"
|
|
"NULL_MOESI_hammer"
|
|
"POWER"
|
|
"RISCV"
|
|
"SPARC"
|
|
"X86"
|
|
"X86_MI_example"
|
|
"X86_MOESI_AMD_Base")
|
|
|
|
# The optimizations to use for each build target.
|
|
opts=(".opt"
|
|
".fast")
|
|
|
|
# The number of build targets to randomly pull from the build target list for
|
|
# each compiler. To perform a full comprehensive test which covers every
|
|
# possible pair of compiler and build target, set builds_per_compiler equal to
|
|
# the expression ${#builds[@]}.
|
|
builds_per_compiler=1
|
|
|
|
# Base URL of the gem5 testing images.
|
|
base_url="gcr.io/gem5-test"
|
|
|
|
# Arguments passed into scons on every build target test.
|
|
build_args="$@"
|
|
|
|
# Testing directory variables
|
|
mkdir -p "${build_dir}" # Create the build directory if it doesn't exist.
|
|
test_dir_final="${gem5_root}/compile-test-out"
|
|
test_dir="${gem5_root}/.compile-test-out"
|
|
exits="${test_dir}/exit-codes.csv"
|
|
|
|
# Create the testing output directory and files
|
|
rm -rf "${test_dir_final}"
|
|
rm -rf "${test_dir}"
|
|
mkdir "${test_dir}"
|
|
touch "${exits}"
|
|
echo "compiler,build_target,exit_code" >> "${exits}"
|
|
|
|
exit_code=0 # We return a non-zero exit code if any of the compilations fail.
|
|
|
|
for compiler in ${images[@]}; do
|
|
echo "Starting build tests with '${compiler}'..."
|
|
# Generate a randomized list of build targets
|
|
build_permutation=($(shuf -i 0-$((${#builds[@]} - 1)) ))
|
|
|
|
builds_count=$builds_per_compiler
|
|
if [[ " ${comprehensive[@]} " =~ " $compiler " ]]; then
|
|
echo "'$compiler' was found in the comprehensive tests. All ISAs will be built."
|
|
builds_count=${#builds[@]}
|
|
fi
|
|
|
|
# Slice the first $builds_count entries of the permutation to get our
|
|
# targets for this test
|
|
build_indices=(${build_permutation[@]:0:$builds_count})
|
|
|
|
repo_name="${base_url}/${compiler}:latest"
|
|
|
|
# Grab compiler image
|
|
docker pull $repo_name >/dev/null
|
|
|
|
mkdir "${test_dir}/${compiler}"
|
|
|
|
for build_index in ${build_indices[@]}; do
|
|
for build_opt in ${opts[@]}; do
|
|
build="${builds[$build_index]}"
|
|
build_out="build/$build/gem5$build_opt"
|
|
build_stdout="${test_dir}/${compiler}/${build}${build_opt}.stdout.txt"
|
|
build_stderr="${test_dir}/${compiler}/${build}${build_opt}.stderr.txt"
|
|
|
|
# Clean the build
|
|
rm -rf "${build_dir}"
|
|
|
|
touch "${build_stdout}"
|
|
touch "${build_stderr}"
|
|
|
|
echo " * Building target '${build}${build_opt}' with '${compiler}'..."
|
|
|
|
# Build with container
|
|
{
|
|
docker run --rm -v "${gem5_root}":"/gem5" -u $UID:$GID \
|
|
-w /gem5 --memory="${docker_mem_limit}" $repo_name \
|
|
/usr/bin/env python3 /usr/bin/scons \
|
|
"${build_out}" "${build_args}"
|
|
}>"${build_stdout}" 2>"${build_stderr}"
|
|
result=$?
|
|
|
|
echo "${compiler},${build}/gem5${build_opt},${result}" >>"${exits}"
|
|
|
|
if [ ${result} -ne 0 ]; then
|
|
exit_code=1
|
|
echo " ! Failed with exit code ${result}."
|
|
else
|
|
echo " Done."
|
|
fi
|
|
done
|
|
done
|
|
done
|
|
|
|
mv "${test_dir}" "${test_dir_final}"
|
|
|
|
exit ${exit_code}
|