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