Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | # Copyright (c) 2021, 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 | |
| 6 | import argparse |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 7 | import os |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 8 | import subprocess |
| 9 | import sys |
| 10 | |
| 11 | import jdk |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 12 | import utils |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 13 | |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 14 | VERSION_EXTRACTOR = """ |
| 15 | import com.android.tools.r8.Version; |
| 16 | public class VersionExtractor { |
| 17 | public static void main(String[] args) { |
| 18 | System.out.println(Version.LABEL); |
| 19 | } |
| 20 | } |
| 21 | """ |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 22 | |
| 23 | def parse_options(): |
| 24 | parser = argparse.ArgumentParser(description='Tag R8 Versions') |
| 25 | parser.add_argument( |
Morten Krogh-Jespersen | b8b4498 | 2022-05-19 13:44:06 +0200 | [diff] [blame] | 26 | '--classpath', |
| 27 | action='append', |
| 28 | help='Dependencies to add to classpath') |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 29 | parser.add_argument( |
Morten Krogh-Jespersen | b8b4498 | 2022-05-19 13:44:06 +0200 | [diff] [blame] | 30 | '--debug-agent', |
| 31 | action='store_true', |
| 32 | default=False, |
| 33 | help='Create a socket for debugging') |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 34 | parser.add_argument( |
Morten Krogh-Jespersen | b8b4498 | 2022-05-19 13:44:06 +0200 | [diff] [blame] | 35 | '--excldeps-variant', |
| 36 | action='store_true', |
| 37 | default=False, |
| 38 | help='Mark this artifact as an "excldeps" variant of the compiler') |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 39 | parser.add_argument( |
Morten Krogh-Jespersen | b8b4498 | 2022-05-19 13:44:06 +0200 | [diff] [blame] | 40 | '--lib', |
| 41 | action='append', |
| 42 | help='Additional libraries (JDK 1.8 rt.jar already included)') |
Morten Krogh-Jespersen | 378aa61 | 2021-11-23 13:27:25 +0100 | [diff] [blame] | 43 | parser.add_argument( |
Morten Krogh-Jespersen | b8b4498 | 2022-05-19 13:44:06 +0200 | [diff] [blame] | 44 | '--output', |
| 45 | required=True, |
| 46 | help='The output path for the r8lib') |
Ian Zerny | cf8ef51 | 2022-05-04 14:54:16 +0200 | [diff] [blame] | 47 | parser.add_argument( |
Morten Krogh-Jespersen | b8b4498 | 2022-05-19 13:44:06 +0200 | [diff] [blame] | 48 | '--pg-conf', |
| 49 | action='append', |
| 50 | help='Keep configuration') |
| 51 | parser.add_argument( |
| 52 | '--r8jar', |
| 53 | required=True, |
| 54 | help='The R8 jar to compile') |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 55 | parser.add_argument( |
| 56 | '--r8compiler', |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 57 | default='build/libs/r8_with_deps.jar', |
| 58 | help='The R8 compiler to use') |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 59 | return parser.parse_args() |
| 60 | |
Ian Zerny | 848da97 | 2021-10-14 19:40:16 +0200 | [diff] [blame] | 61 | def get_r8_version(r8jar): |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 62 | with utils.TempDir() as temp: |
| 63 | name = os.path.join(temp, "VersionExtractor.java") |
| 64 | fd = open(name, 'w') |
| 65 | fd.write(VERSION_EXTRACTOR) |
| 66 | fd.close() |
| 67 | cmd = [jdk.GetJavacExecutable(), '-cp', r8jar, name] |
| 68 | print(' '.join(cmd)) |
Morten Krogh-Jespersen | 8680e08 | 2021-10-15 20:01:51 +0200 | [diff] [blame] | 69 | cp_separator = ';' if utils.IsWindows() else ':' |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 70 | subprocess.check_call(cmd) |
| 71 | output = subprocess.check_output([ |
| 72 | jdk.GetJavaExecutable(), |
| 73 | '-cp', |
Morten Krogh-Jespersen | 8680e08 | 2021-10-15 20:01:51 +0200 | [diff] [blame] | 74 | cp_separator.join([r8jar, os.path.dirname(name)]), |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 75 | 'VersionExtractor' |
| 76 | ]).decode('UTF-8').strip() |
| 77 | if output == 'main': |
| 78 | return subprocess.check_output( |
Ian Zerny | 848da97 | 2021-10-14 19:40:16 +0200 | [diff] [blame] | 79 | ['git', 'rev-parse', 'HEAD']).decode('UTF-8').strip() |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 80 | else: |
| 81 | return output |
Ian Zerny | 848da97 | 2021-10-14 19:40:16 +0200 | [diff] [blame] | 82 | |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 83 | def main(): |
| 84 | args = parse_options() |
Ian Zerny | d31dd73 | 2021-10-15 11:49:26 +0200 | [diff] [blame] | 85 | if not os.path.exists(args.r8jar): |
| 86 | print("Could not find jar: " + args.r8jar) |
| 87 | return 1 |
Ian Zerny | 848da97 | 2021-10-14 19:40:16 +0200 | [diff] [blame] | 88 | version = get_r8_version(args.r8jar) |
Ian Zerny | cf8ef51 | 2022-05-04 14:54:16 +0200 | [diff] [blame] | 89 | variant = '+excldeps' if args.excldeps_variant else '' |
| 90 | map_id_template = version + variant |
Ian Zerny | 848da97 | 2021-10-14 19:40:16 +0200 | [diff] [blame] | 91 | source_file_template = 'R8_%MAP_ID_%MAP_HASH' |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 92 | # TODO(b/139725780): See if we can remove or lower the heap size (-Xmx8g). |
| 93 | cmd = [jdk.GetJavaExecutable(), '-Xmx8g', '-ea'] |
Morten Krogh-Jespersen | b8b4498 | 2022-05-19 13:44:06 +0200 | [diff] [blame] | 94 | if args.debug_agent: |
| 95 | cmd.extend(['-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005']) |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 96 | cmd.extend(['-cp', args.r8compiler, 'com.android.tools.r8.R8']) |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 97 | cmd.append(args.r8jar) |
| 98 | cmd.append('--classfile') |
Ian Zerny | 848da97 | 2021-10-14 19:40:16 +0200 | [diff] [blame] | 99 | cmd.extend(['--map-id-template', map_id_template]) |
| 100 | cmd.extend(['--source-file-template', source_file_template]) |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 101 | cmd.extend(['--output', args.output]) |
| 102 | cmd.extend(['--pg-map-output', args.output + '.map']) |
Morten Krogh-Jespersen | eda5581 | 2023-04-25 09:26:07 +0200 | [diff] [blame] | 103 | cmd.extend(['--partition-map-output', args.output + '_map.zip']) |
Ian Zerny | 3ac8684 | 2022-10-05 11:49:35 +0200 | [diff] [blame] | 104 | cmd.extend(['--lib', jdk.GetJdkHome()]) |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 105 | if args.pg_conf: |
| 106 | for pgconf in args.pg_conf: |
| 107 | cmd.extend(['--pg-conf', pgconf]) |
| 108 | if args.lib: |
| 109 | for lib in args.lib: |
| 110 | cmd.extend(['--lib', lib]) |
Morten Krogh-Jespersen | 378aa61 | 2021-11-23 13:27:25 +0100 | [diff] [blame] | 111 | if args.classpath: |
| 112 | for cp in args.classpath: |
| 113 | cmd.extend(['--classpath', cp]) |
Ian Zerny | a0d27cf | 2021-10-14 13:55:34 +0200 | [diff] [blame] | 114 | print(' '.join(cmd)) |
| 115 | subprocess.check_call(cmd) |
| 116 | |
| 117 | if __name__ == '__main__': |
| 118 | sys.exit(main()) |