blob: b6c91464a93278fcc1e69fe1f65fc0389a924ce0 [file] [log] [blame]
#!/usr/bin/env bash
#
# Copyright (c) 2021 Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Takes as input the feedback.log, produced previously `log-splitter.py` script and creates
# several files, including a configuration file (config_file.json) and one more traces files, i.e.
# covtrace-FVP_Base_RevC_2xAEMvA.cluster0.cpu0.log, covtrace-FVP_Base_RevC_2xAEMvA.cluster0.cpu1.log,
# etc. The output files are used by reporting tools (https://gitlab.arm.com/tooling/qa-tools/-/tree/master/coverage-tool) to produce coverage html reports
#
# Parameters:
# 1. Full path folder name where the project resides, i.e. path to trusted-firmware-a
# 2. Full path folder where the traces reside
# 3. Full path folder where ELFs reside
# 4. The corresponding git-refspec for the commit being traced
set -x
FEEDBACK=feedback.log
COVTRACE=covtrace.log
COVPREFIX=covtrace-
CONFIG_JSON=config_file.json
OUTPUT_JSON=output_file.json
# Variables aware of environment variables
PROJECT_ROOT="${1:-${PWD}}"
TRACES_DIR="${2:-${PWD}}"
ELF_ARTIFACTS_DIR="${3:-${PWD}}"
TF_GERRIT_REFSPEC="${4:-}"
# check if LAVA feedback.log exists, if not, just quit
if [ ! -f ${FEEDBACK} ]; then
echo ${FEEDBACK} file not found
exit 0
fi
# From the feedback log, take only the trace data
grep ^${COVPREFIX} ${FEEDBACK} > ${COVTRACE}
# Check if there are traces
if [ -n "$(find ${COVTRACE} -empty)" ]; then
echo no code coverage traces found
exit 0
fi
# Generate config json file required for coverage reporting tools
cat > ${CONFIG_JSON} <<EOF
{
"configuration":
{
"remove_workspace": false,
"include_assembly": true
},
"parameters":
{
"objdump": "aarch64-none-elf-objdump",
"readelf": "aarch64-none-elf-readelf",
"sources": [
{
"type": "git",
"URL": "https://review.trustedfirmware.org/TF-A/trusted-firmware-a",
"COMMIT": "",
"REFSPEC": "${TF_GERRIT_REFSPEC}",
"LOCATION": "trusted-firmware-a"
}
],
"workspace": "${PROJECT_ROOT}",
"output_file": "${OUTPUT_JSON}"
},
"elfs": [
EOF
# Split COVTRACE into different files
for trace_file in $(awk '{print $1}' ${COVTRACE} | uniq); do
# split & remove trace filename in log
grep ^${trace_file} ${COVTRACE} > ${trace_file}
sed -i "s;${trace_file} ;;g" ${trace_file}
done
# List the elf files
find ${ELF_ARTIFACTS_DIR} -name '*.elf' > elfs.txt
elfs=($(cat elfs.txt))
# Populate elfs config elements
for elf in ${elfs[@]::${#elfs[@]}-1}; do
# fill the 'elfs' elements
cat >> ${CONFIG_JSON} <<EOF
{
"name": "${elf}",
"traces": [ "${TRACES_DIR}/${COVPREFIX}*" ]
},
EOF
done
# print last elf and close main json body
cat >> ${CONFIG_JSON} <<EOF
{
"name": "${elfs[-1]}",
"traces": [ "${TRACES_DIR}/${COVPREFIX}*" ]
}
]
}
EOF