xref: /aosp_15_r20/external/openscreen/build/code_coverage/merge_steps.py (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard#!/usr/bin/env python3
2*3f982cf4SFabien Sanglard# Copyright 2020 The Chromium Authors. All rights reserved.
3*3f982cf4SFabien Sanglard# Use of this source code is governed by a BSD-style license that can be
4*3f982cf4SFabien Sanglard# found in the LICENSE file.
5*3f982cf4SFabien Sanglard"""This script merges code coverage profiles from multiple steps.
6*3f982cf4SFabien Sanglard
7*3f982cf4SFabien SanglardThis script is taken from the chromium build tools and is synced
8*3f982cf4SFabien Sanglardmanually on an as-needed basis:
9*3f982cf4SFabien Sanglardhttps://source.chromium.org/chromium/chromium/src/+/master:testing/merge_scripts/code_coverage/merge_steps.py?q=merge_steps.py&ss=chromium
10*3f982cf4SFabien Sanglard"""
11*3f982cf4SFabien Sanglard
12*3f982cf4SFabien Sanglardimport argparse
13*3f982cf4SFabien Sanglardimport os
14*3f982cf4SFabien Sanglardimport sys
15*3f982cf4SFabien Sanglard
16*3f982cf4SFabien Sanglardimport merge_lib as merger
17*3f982cf4SFabien Sanglard
18*3f982cf4SFabien Sanglard
19*3f982cf4SFabien Sanglarddef _merge_steps_argument_parser(*args, **kwargs):
20*3f982cf4SFabien Sanglard  parser = argparse.ArgumentParser(*args, **kwargs)
21*3f982cf4SFabien Sanglard  parser.add_argument('--input-dir', required=True, help=argparse.SUPPRESS)
22*3f982cf4SFabien Sanglard  parser.add_argument(
23*3f982cf4SFabien Sanglard      '--output-file', required=True, help='where to store the merged data')
24*3f982cf4SFabien Sanglard  parser.add_argument(
25*3f982cf4SFabien Sanglard      '--llvm-profdata', required=True, help='path to llvm-profdata executable')
26*3f982cf4SFabien Sanglard  parser.add_argument(
27*3f982cf4SFabien Sanglard      '--profdata-filename-pattern',
28*3f982cf4SFabien Sanglard      default='.*',
29*3f982cf4SFabien Sanglard      help='regex pattern of profdata filename to merge for current test type. '
30*3f982cf4SFabien Sanglard          'If not present, all profdata files will be merged.')
31*3f982cf4SFabien Sanglard  # TODO(crbug.com/1077304) - migrate this to sparse=False as default, and have
32*3f982cf4SFabien Sanglard  # --sparse to set sparse
33*3f982cf4SFabien Sanglard  parser.add_argument(
34*3f982cf4SFabien Sanglard      '--no-sparse',
35*3f982cf4SFabien Sanglard      action='store_false',
36*3f982cf4SFabien Sanglard      dest='sparse',
37*3f982cf4SFabien Sanglard      help='run llvm-profdata without the sparse flag.')
38*3f982cf4SFabien Sanglard  # TODO(crbug.com/1077304) - The intended behaviour is to default sparse to
39*3f982cf4SFabien Sanglard  # false. --no-sparse above was added as a workaround, and will be removed.
40*3f982cf4SFabien Sanglard  # This is being introduced now in support of the migration to intended
41*3f982cf4SFabien Sanglard  # behavior. Ordering of args matters here, as the default is set by the former
42*3f982cf4SFabien Sanglard  # (sparse defaults to False because of ordering. See merge_results unit tests
43*3f982cf4SFabien Sanglard  # for details)
44*3f982cf4SFabien Sanglard  parser.add_argument(
45*3f982cf4SFabien Sanglard      '--sparse',
46*3f982cf4SFabien Sanglard      action='store_true',
47*3f982cf4SFabien Sanglard      dest='sparse',
48*3f982cf4SFabien Sanglard      help='run llvm-profdata with the sparse flag.')
49*3f982cf4SFabien Sanglard  return parser
50*3f982cf4SFabien Sanglard
51*3f982cf4SFabien Sanglard
52*3f982cf4SFabien Sanglarddef main():
53*3f982cf4SFabien Sanglard  desc = "Merge profdata files in <--input-dir> into a single profdata."
54*3f982cf4SFabien Sanglard  parser = _merge_steps_argument_parser(description=desc)
55*3f982cf4SFabien Sanglard  params = parser.parse_args()
56*3f982cf4SFabien Sanglard  merger.merge_profiles(params.input_dir, params.output_file, '.profdata',
57*3f982cf4SFabien Sanglard                        params.llvm_profdata, params.profdata_filename_pattern,
58*3f982cf4SFabien Sanglard                        sparse=params.sparse)
59*3f982cf4SFabien Sanglard
60*3f982cf4SFabien Sanglard
61*3f982cf4SFabien Sanglardif __name__ == '__main__':
62*3f982cf4SFabien Sanglard  sys.exit(main())
63