blob: 95d3c1bac3957e4e0d93013d4c34cfd38e5f7710 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
""" Merge all the profdata files in PROFDATA_DIR, utilizing the binaries in
BINARIES_DIR, to create a unified coverage report in REPORT_DIR. (If no
REPORT_DIR is provided, defaults to `out/report`.)
* Example usage: merge_all_profdata.py --profdata-dir [PROFDATA_DIR]
--binaries-dir [BINARIES_DIR] [--report-dir [REPORT_DIR]]
"""
import argparse
import logging
import os
import subprocess
def _ParseCommandArguments():
"""Adds and parses relevant arguments for tool commands.
Returns:
A dictionary representing the arguments.
"""
arg_parser = argparse.ArgumentParser()
arg_parser.usage = __doc__
arg_parser.add_argument('--llvm-profdata',
required=True,
type=str,
help='Location of LLVM profdata tool')
arg_parser.add_argument('--profdata-dir',
required=True,
type=str,
help='Directory in which profdata files are stored.')
arg_parser.add_argument(
'--outfile',
type=str,
required=True,
help=('Directory where the coverage report should go. '
'Default is out/report.'))
args = arg_parser.parse_args()
return args
args = _ParseCommandArguments()
targets_to_cover = []
for profdata_file in os.listdir(args.profdata_dir):
targets_to_cover.append(os.path.join(args.profdata_dir, profdata_file))
subprocess_cmd = [args.llvm_profdata, 'merge', '-o', args.outfile]
for target in targets_to_cover:
subprocess_cmd.append(target)
try:
subprocess.check_call(subprocess_cmd)
except:
logging.error("An error occured while merging the profdata.")
exit(1)