()
| 25 | #------------------------------------------------------------------------------ |
| 26 | |
| 27 | def main(): |
| 28 | parser = argparse.ArgumentParser(description='llvm-coverage') |
| 29 | parser.add_argument('--insights', help='C++ Insights binary', required=True) |
| 30 | parser.add_argument('--llvm-prof-dir', help='LLVM profiles data dir', default='') |
| 31 | parser.add_argument('--llvm-prof', help='llvm-profdata binary', default='llvm-profdata') |
| 32 | parser.add_argument('--llvm-cov', help='llvm-cov binary', default='llvm-cov') |
| 33 | parser.add_argument('--format', help='Output format: html/text', default='text') |
| 34 | parser.add_argument('--output', help='Output filename', required=True) |
| 35 | parser.add_argument('args', nargs=argparse.REMAINDER) |
| 36 | args = vars(parser.parse_args()) |
| 37 | |
| 38 | insightsPath = args['insights'] |
| 39 | rawProfiles = glob.glob(os.path.join(args['llvm_prof_dir'], "*.profraw")) |
| 40 | profilesManifest = os.path.join(args['llvm_prof_dir'], 'profiles.manifest') |
| 41 | profilesData = os.path.join(args['llvm_prof_dir'], 'insights.profdata') |
| 42 | |
| 43 | with open(profilesManifest, "w") as manifest: |
| 44 | manifest.write("\n".join(rawProfiles)) |
| 45 | |
| 46 | cmd = [args['llvm_prof'], 'merge', '-sparse', '-f', profilesManifest, '-o', profilesData] |
| 47 | stdout, stderr, returncode = runCmd(cmd) |
| 48 | print(stderr) |
| 49 | |
| 50 | action = 'show' if args['format'] != 'lcov' else 'export' |
| 51 | |
| 52 | cmd = [args['llvm_cov'], action, insightsPath, f'-instr-profile={profilesData}', f'--format={args["format"]}', '-ignore-filename-regex=build/'] |
| 53 | |
| 54 | stdout, stderr, returncode = runCmd(cmd) |
| 55 | print(stderr) |
| 56 | |
| 57 | open(args['output'], 'w').write(stdout) |
| 58 | #------------------------------------------------------------------------------ |
| 59 | |
| 60 |
no test coverage detected