blob: 3be97714e8708bb73f5121c4a1de359bb3f1c759 [file] [log] [blame]
Morten Krogh-Jespersen017a7002019-01-10 14:14:17 +01001#!/usr/bin/env python
2# Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
3# for details. All rights reserved. Use of this source code is governed by a
4# BSD-style license that can be found in the LICENSE file.
5
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +01006import archive
7import argparse
Ian Zerny3f54e222019-02-12 10:51:17 +01008import jdk
Morten Krogh-Jespersen017a7002019-01-10 14:14:17 +01009import subprocess
10import sys
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010011import tempfile
Morten Krogh-Jespersen017a7002019-01-10 14:14:17 +010012import utils
13
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010014def parse_arguments():
15 parser = argparse.ArgumentParser(
16 description = 'R8lib wrapper for retrace tool.')
17 parser.add_argument(
18 '-c',
19 '--commit_hash',
20 help='Commit hash to download r8lib map file for.',
21 default=None)
22 parser.add_argument(
23 '--version',
24 help='Version to download r8lib map file for.',
25 default=None)
26 parser.add_argument(
Morten Krogh-Jespersen08701bf2019-12-02 21:31:04 +010027 '--tag',
28 help='Tag to download r8lib map file for.',
29 default=None)
30 parser.add_argument(
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010031 '--map',
32 help='Path to r8lib map.',
33 default=utils.R8LIB_JAR + '.map')
34 parser.add_argument(
Morten Krogh-Jespersen3aa4bff82020-09-30 16:43:26 +020035 '--no-r8lib',
36 default=False,
37 action='store_true',
38 help='Use r8.jar and not r8lib.jar.')
39 parser.add_argument(
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010040 '--stacktrace',
41 help='Path to stacktrace file.',
42 default=None)
43 return parser.parse_args()
44
45
Morten Krogh-Jespersen08701bf2019-12-02 21:31:04 +010046def find_version_or_hash_from_tag(tag_or_hash):
47 info = subprocess.check_output([
48 'git',
49 'show',
50 tag_or_hash,
51 '-s',
52 '--format=oneline']).splitlines()[-1].split()
53 # The info should be on the following form [hash,"Version",version]
54 if len(info) == 3 and len(info[0]) == 40 and info[1] == "Version":
55 return info[2]
56 return None
57
58
Morten Krogh-Jespersen017a7002019-01-10 14:14:17 +010059def main():
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010060 args = parse_arguments()
Morten Krogh-Jespersen08701bf2019-12-02 21:31:04 +010061 if args.tag:
62 hash_or_version = find_version_or_hash_from_tag(args.tag)
63 else:
64 hash_or_version = args.commit_hash or args.version
Morten Krogh-Jespersen3aa4bff82020-09-30 16:43:26 +020065 return run(
66 args.map,
67 hash_or_version,
68 args.stacktrace,
69 args.commit_hash is not None,
70 args.no_r8lib)
Ian Zerny5ffa58f2020-02-26 08:37:14 +010071
Morten Krogh-Jespersen3aa4bff82020-09-30 16:43:26 +020072def run(map_path, hash_or_version, stacktrace, is_hash, no_r8lib):
Morten Krogh-Jespersen08701bf2019-12-02 21:31:04 +010073 if hash_or_version:
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010074 download_path = archive.GetUploadDestination(
Morten Krogh-Jespersen08701bf2019-12-02 21:31:04 +010075 hash_or_version,
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010076 'r8lib.jar.map',
Ian Zerny5ffa58f2020-02-26 08:37:14 +010077 is_hash)
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010078 if utils.file_exists_on_cloud_storage(download_path):
Morten Krogh-Jespersen3aa4bff82020-09-30 16:43:26 +020079 map_path = tempfile.NamedTemporaryFile().name
80 utils.download_file_from_cloud_storage(download_path, map_path)
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010081 else:
Morten Krogh-Jespersen08701bf2019-12-02 21:31:04 +010082 print('Could not find map file from argument: %s.' % hash_or_version)
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010083 return 1
84
Ian Zerny3f54e222019-02-12 10:51:17 +010085 retrace_args = [
Morten Krogh-Jespersen89a5b062020-01-07 14:50:40 +010086 jdk.GetJavaExecutable(),
87 '-cp',
Morten Krogh-Jespersen3aa4bff82020-09-30 16:43:26 +020088 utils.R8_JAR if no_r8lib else utils.R8LIB_JAR,
Morten Krogh-Jespersen89a5b062020-01-07 14:50:40 +010089 'com.android.tools.r8.retrace.Retrace',
Morten Krogh-Jespersen3aa4bff82020-09-30 16:43:26 +020090 map_path
Ian Zerny3f54e222019-02-12 10:51:17 +010091 ]
Morten Krogh-Jespersen89a5b062020-01-07 14:50:40 +010092
Ian Zerny5ffa58f2020-02-26 08:37:14 +010093 if stacktrace:
94 retrace_args.append(stacktrace)
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010095
Morten Krogh-Jespersen3aa4bff82020-09-30 16:43:26 +020096 utils.PrintCmd(retrace_args)
Morten Krogh-Jespersena6f0f2f2019-01-17 13:57:39 +010097 return subprocess.call(retrace_args)
98
Morten Krogh-Jespersen017a7002019-01-10 14:14:17 +010099
100if __name__ == '__main__':
101 sys.exit(main())