util,tests: Added compiler test script
This script runs a series of compilations on gem5. The following
compilers are tested:
clang-9
clang-8
clang-7
clang-6
clang-5
clang-4
clang-3.9
gcc-9
gcc-8
gcc-7
gcc-6
gcc-5
gcc-4.8 (to be dropped soon:
https://gem5.atlassian.net/browse/GEM5-218)
They are tested by building the following build targets:
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
For each, ".opt" and ".fast" compiler build settings are tested.
clang-9 and gcc-9 are tested against all targets with each build
setting. For the remaining compilers, a random build target is
chosen. After the script has run, the output of the tests can be
found in "compile-test-out".
Docker is required to run this script.
Change-Id: Id3bf4c89b9d424c87e9409930ee2aceaef72cb29
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/30395
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
132
util/compiler-tests.sh
Executable file
132
util/compiler-tests.sh
Executable file
@@ -0,0 +1,132 @@
|
||||
#!/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=("ubuntu-20.04_all-dependencies" # Uses GCC-9
|
||||
"clang-version-9"
|
||||
"gcc-version-8"
|
||||
"gcc-version-7"
|
||||
"gcc-version-6"
|
||||
"gcc-version-5"
|
||||
"gcc-version-4.8"
|
||||
"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=("ubuntu-20.04_all-dependencies"
|
||||
"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}"
|
||||
Reference in New Issue
Block a user