| #!/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) |