blob: fd6605a582a38ba6913f1e8b0d4c40e7d86f3ba8 [file] [log] [blame]
__copyright__ = """
/*
* Copyright (c) 2018-2022, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
"""
"""
Module with helper functions for code coverage reports.
"""
import os
import subprocess
from lava_helper import test_lava_dispatch_credentials
def run(cmd, cwd=None):
print("+ %s" % cmd, flush=True)
subprocess.check_call(cmd, shell=True, cwd=cwd)
def extract_trace_data(lava_log_fname, job_dir):
last_fname = None
f_out = None
with open(lava_log_fname) as f_in:
for l in f_in:
if l.startswith("covtrace-"):
fname, l = l.split(" ", 1)
if fname != last_fname:
if f_out:
f_out.close()
f_out = open(job_dir + "/" + fname, "w")
last_fname = fname
f_out.write(l)
def coverage_reports(jobs, user_args):
lava = test_lava_dispatch_credentials(user_args)
for job_id, info in jobs.items():
job_dir = info["job_dir"]
metadata = info["metadata"]
if os.getenv("CODE_COVERAGE_EN") == "TRUE" and info["device_type"] == "fvp":
def dl_artifact(fname):
lava.fetch_file(
metadata["build_job_url"] + "artifact/trusted-firmware-m/build/bin/" + fname,
os.path.join(job_dir, fname)
)
dl_artifact("bl2.axf")
dl_artifact("tfm_s.axf")
dl_artifact("tfm_ns.axf")
run("python3 $SHARE_FOLDER/qa-tools/coverage-tool/coverage-reporting/intermediate_layer.py --config-json $SHARE_FOLDER/tf-m-ci-scripts/lava_helper/trace2covjson.json --local-workspace $SHARE_FOLDER", cwd=job_dir)
run("python3 $SHARE_FOLDER/qa-tools/coverage-tool/coverage-reporting/generate_info_file.py --workspace $SHARE_FOLDER --json covjson.json", cwd=job_dir)
run("lcov -rc lcov_branch_coverage=1 -r coverage.info '*/trusted-firmware-m/platform/*' '*/trusted-firmware-m/lib/ext/*' '*/tf-m-tests/*' '*/mbedtls/*' '*/mcuboot/*' '*/psa-arch-tests/*' '*/QCBOR/*' -o coverage.info.tmp", cwd=job_dir)
run("mv coverage.info.tmp coverage.info", cwd=job_dir)
run("genhtml --branch-coverage coverage.info --output-directory trace_report | grep -v -E '^Processing file '", cwd=job_dir)