blob: 4dfbb7d4c2347100519c5499765e87b7679ed925 [file] [log] [blame]
Ian Zernydcb172e2022-02-22 15:36:45 +01001#!/usr/bin/env python3
Søren Gjesse6d1934f2017-11-09 10:00:24 +01002# Copyright (c) 2017, 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
6import argparse
7import gradle
8import os
Søren Gjesse6d1934f2017-11-09 10:00:24 +01009from shutil import copyfile
Mads Ager14d9b072017-11-20 13:42:55 +010010import sys
Mads Ager14d9b072017-11-20 13:42:55 +010011import utils
Clément Béra0c58dd82020-03-24 12:49:57 +000012import archive
Rico Wind03463d32018-01-22 10:44:00 +010013
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010014JAR_TARGETS_MAP = {
15 'full': [
Søren Gjessefe640e52019-11-28 12:46:04 +010016 (utils.R8, 'r8'),
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010017 ],
18 'lib': [
Søren Gjessefe640e52019-11-28 12:46:04 +010019 (utils.R8LIB, 'r8'),
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010020 ],
21}
22
Mads Ager12a56bc2017-11-27 11:51:25 +010023OTHER_TARGETS = ["LICENSE"]
Ian Zerny8c5f7b42023-05-25 11:24:05 +020024KEEPANNO_JAR = 'keepanno-annotations.jar'
Søren Gjesse6d1934f2017-11-09 10:00:24 +010025
26def parse_arguments():
27 parser = argparse.ArgumentParser(
28 description = 'Build and copy jars to an Android tree.')
29 parser.add_argument('android_root', nargs=1,
30 help='Android checkout root.')
Mads Ager14d9b072017-11-20 13:42:55 +010031 parser.add_argument('--commit_hash', default=None, help='Commit hash')
Rico Wind03463d32018-01-22 10:44:00 +010032 parser.add_argument('--version', default=None, help='The version to download')
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010033 parser.add_argument(
34 '--targets',
35 required=True,
36 choices=['full', 'lib'],
37 help="Use 'full' to download the full, non-optimized jars (legacy" +
Morten Krogh-Jespersen87da12f2019-01-22 10:32:32 +010038 " behaviour) and 'lib' for the R8-processed, optimized jars.",
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010039 )
40 parser.add_argument(
41 '--maps',
42 action='store_true',
43 help="Download proguard maps for jars, use only with '--target lib'.",
44 )
clementbera2bd06e82019-07-24 15:19:18 +020045 parser.add_argument(
Ian Zerny8c5f7b42023-05-25 11:24:05 +020046 '--keepanno',
47 action='store_true',
48 help="Download keepanno-annotations library.",
49 )
50 parser.add_argument(
clementbera2bd06e82019-07-24 15:19:18 +020051 '--java-max-memory-size',
52 '--java_max_memory_size',
53 help='Use a custom max memory size for the gradle java instance, eg, 4g')
Søren Gjesse6d1934f2017-11-09 10:00:24 +010054 return parser.parse_args()
55
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010056def copy_targets(root, target_root, srcs, dests, maps=False):
Tamas Kenez03ab76f2018-12-07 14:33:25 +010057 assert len(srcs) == len(dests)
Mads Ager12a56bc2017-11-27 11:51:25 +010058 for i in range(len(srcs)):
59 src = os.path.join(root, srcs[i])
60 dest = os.path.join(target_root, 'prebuilts', 'r8', dests[i])
Søren Gjesse50c29272019-11-27 15:37:12 +010061 if os.path.exists(dest):
Rico Wind3d369b42021-01-12 10:26:24 +010062 print('Copying: ' + src + ' -> ' + dest)
Søren Gjesse50c29272019-11-27 15:37:12 +010063 copyfile(src, dest)
64 if maps:
Rico Wind3d369b42021-01-12 10:26:24 +010065 print('Copying: ' + src + '.map -> ' + dest + '.map')
Søren Gjesse50c29272019-11-27 15:37:12 +010066 copyfile(src + '.map', dest + '.map')
Søren Gjessefe640e52019-11-28 12:46:04 +010067 else:
Rico Wind3d369b42021-01-12 10:26:24 +010068 print('WARNING: Not copying ' + src + ' -> ' + dest +
69 ', as' + dest + ' does not exist already')
Søren Gjessefe640e52019-11-28 12:46:04 +010070
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010071def copy_jar_targets(root, target_root, jar_targets, maps):
Morten Krogh-Jespersen8a4d1ca2021-01-19 08:27:02 +010072 srcs = list(map((lambda t: t[0] + '.jar'), jar_targets))
73 dests = list(map((lambda t: t[1] + '.jar'), jar_targets))
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010074 copy_targets(root, target_root, srcs, dests, maps=maps)
Mads Ager12a56bc2017-11-27 11:51:25 +010075
76def copy_other_targets(root, target_root):
77 copy_targets(root, target_root, OTHER_TARGETS, OTHER_TARGETS)
78
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010079def download_hash(root, commit_hash, target, quiet=False):
80 download_target(root, target, commit_hash, True, quiet=quiet)
Rico Wind03463d32018-01-22 10:44:00 +010081
82def download_version(root, version, target):
Clément Béraf649e072020-03-25 07:15:28 +000083 download_target(root, target, version, False)
Rico Wind03463d32018-01-22 10:44:00 +010084
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010085def download_target(root, target, hash_or_version, is_hash, quiet=False):
Mads Ager12a56bc2017-11-27 11:51:25 +010086 download_path = os.path.join(root, target)
Clément Béra0c58dd82020-03-24 12:49:57 +000087 url = archive.GetUploadDestination(
88 hash_or_version,
Clément Béra729780c2020-03-25 08:50:28 +000089 target,
Clément Béra0c58dd82020-03-24 12:49:57 +000090 is_hash)
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010091 if not quiet:
Rico Wind3d369b42021-01-12 10:26:24 +010092 print('Downloading: ' + url + ' -> ' + download_path)
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010093 utils.download_file_from_cloud_storage(url, download_path, quiet=quiet)
Mads Ager12a56bc2017-11-27 11:51:25 +010094
Ian Zerny8c5f7b42023-05-25 11:24:05 +020095def main_download(hash, maps, targets, target_root, version, keepanno=False):
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +020096 jar_targets = JAR_TARGETS_MAP[targets]
Morten Krogh-Jespersen8a4d1ca2021-01-19 08:27:02 +010097 final_targets = list(map((lambda t: t[0] + '.jar'), jar_targets)) + OTHER_TARGETS
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +020098 with utils.TempDir() as root:
99 for target in final_targets:
100 if hash:
101 download_hash(root, hash, target)
102 if maps and target not in OTHER_TARGETS:
103 download_hash(root, hash, target + '.map')
Ian Zerny8c5f7b42023-05-25 11:24:05 +0200104 if keepanno:
105 download_hash(root, hash, KEEPANNO_JAR)
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200106 else:
107 assert version
108 download_version(root, version, target)
109 if maps and target not in OTHER_TARGETS:
110 download_version(root, version, target + '.map')
Ian Zerny8c5f7b42023-05-25 11:24:05 +0200111 if keepanno:
112 download_version(root, version, KEEPANNO_JAR)
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200113 copy_jar_targets(root, target_root, jar_targets, maps)
114 copy_other_targets(root, target_root)
Ian Zerny8c5f7b42023-05-25 11:24:05 +0200115 if keepanno:
116 copy_targets(root, target_root, [KEEPANNO_JAR], [KEEPANNO_JAR])
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200117
118def main_build(maps, max_memory_size, targets, target_root):
119 jar_targets = JAR_TARGETS_MAP[targets]
120 gradle_args = map(lambda t: t[0], jar_targets)
121 if max_memory_size:
122 gradle_args.append('-Dorg.gradle.jvmargs=-Xmx' + max_memory_size)
123 gradle.RunGradle(gradle_args)
124 copy_jar_targets(utils.LIBS, target_root, jar_targets, maps)
125 copy_other_targets(utils.GENERATED_LICENSE_DIR, target_root)
126
127def main(args):
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +0100128 if args.maps and args.targets != 'lib':
129 raise Exception("Use '--maps' only with '--targets lib.")
Mads Ager14d9b072017-11-20 13:42:55 +0100130 target_root = args.android_root[0]
Rico Wind03463d32018-01-22 10:44:00 +0100131 if args.commit_hash == None and args.version == None:
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200132 main_build(args.maps, args.java_max_memory_size, args.targets, target_root)
Mads Ager14d9b072017-11-20 13:42:55 +0100133 else:
Rico Wind03463d32018-01-22 10:44:00 +0100134 assert args.commit_hash == None or args.version == None
Ian Zerny8c5f7b42023-05-25 11:24:05 +0200135 main_download(
136 args.commit_hash, args.maps, args.targets, target_root, args.version, args.keepanno)
Søren Gjesse6d1934f2017-11-09 10:00:24 +0100137
138if __name__ == '__main__':
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200139 sys.exit(main(parse_arguments()))