Files
gem5/util/compiler-tests.sh
Bobby R. Bruce e416e6b1f1 util,tests: Added gcc version 10 to compiler tests
In addition, gcc version 9 has been added, which was previously
served by "ubuntu-20.04_all-dependencies".

Change-Id: I57aeac2aa75b7751f0d4010efee7780e23d447d4
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/30515
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
2020-07-16 02:44:26 +00:00

134 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
# This script will run all our supported compilers (see the "images" set)
# against gem5. The "ubuntu-20.04_all-dependencies" and "clang-version-9"
# images 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"
num_cores=`nproc`
# All Docker images in the gem5 testing GCR which we want to compile with.
images=("gcc-version-10"
"gcc-version-9"
"gcc-version-8"
"gcc-version-7"
"gcc-version-6"
"gcc-version-5"
"gcc-version-4.8"
"clang-version-9"
"clang-version-8"
"clang-version-7"
"clang-version-6.0"
"clang-version-5.0"
"clang-version-4.0"
"clang-version-3.9" )
# A subset of the above list: these images will build against every target,
# ignoring builds_per_compiler.
comprehensive=("gcc-version-10"
"clang-version-9")
# All build targets in build_opt/ which we want to build using each image.
builds=("ARM"
"ARM_MESI_Three_Level"
"Garnet_standalone"
"GCN3_X86"
"MIPS"
"NULL_MESI_Two_Level"
"NULL_MOESI_CMP_directory"
"NULL_MOESI_CMP_token"
"NULL_MOESI_hammer"
"POWER"
"RISCV"
"SPARC"
"X86"
"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="-j ${num_cores}"
# 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
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"
build_stderr="$test_dir/$compiler/$build$build_opt.stderr"
# 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 \
$repo_name scons $build_out $build_args
}>$build_stdout 2>$build_stderr
result=$?
echo "$compiler,$build/gem5$build_opt,$result" >> $exits
if [ $result -ne 0 ]; then
echo " ! Failed with exit code $result."
else
echo " Done."
fi
done
done
done
mv "${test_dir}" "${test_dir_final}"