blob: 6f8da19f70f6e21ff659bb4e54b24f89452dd046 [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"]
Søren Gjesse6d1934f2017-11-09 10:00:24 +010024
25def parse_arguments():
26 parser = argparse.ArgumentParser(
27 description = 'Build and copy jars to an Android tree.')
28 parser.add_argument('android_root', nargs=1,
29 help='Android checkout root.')
Mads Ager14d9b072017-11-20 13:42:55 +010030 parser.add_argument('--commit_hash', default=None, help='Commit hash')
Rico Wind03463d32018-01-22 10:44:00 +010031 parser.add_argument('--version', default=None, help='The version to download')
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010032 parser.add_argument(
33 '--targets',
34 required=True,
35 choices=['full', 'lib'],
36 help="Use 'full' to download the full, non-optimized jars (legacy" +
Morten Krogh-Jespersen87da12f2019-01-22 10:32:32 +010037 " behaviour) and 'lib' for the R8-processed, optimized jars.",
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010038 )
39 parser.add_argument(
40 '--maps',
41 action='store_true',
42 help="Download proguard maps for jars, use only with '--target lib'.",
43 )
clementbera2bd06e82019-07-24 15:19:18 +020044 parser.add_argument(
45 '--java-max-memory-size',
46 '--java_max_memory_size',
47 help='Use a custom max memory size for the gradle java instance, eg, 4g')
Søren Gjesse6d1934f2017-11-09 10:00:24 +010048 return parser.parse_args()
49
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010050def copy_targets(root, target_root, srcs, dests, maps=False):
Tamas Kenez03ab76f2018-12-07 14:33:25 +010051 assert len(srcs) == len(dests)
Mads Ager12a56bc2017-11-27 11:51:25 +010052 for i in range(len(srcs)):
53 src = os.path.join(root, srcs[i])
54 dest = os.path.join(target_root, 'prebuilts', 'r8', dests[i])
Søren Gjesse50c29272019-11-27 15:37:12 +010055 if os.path.exists(dest):
Rico Wind3d369b42021-01-12 10:26:24 +010056 print('Copying: ' + src + ' -> ' + dest)
Søren Gjesse50c29272019-11-27 15:37:12 +010057 copyfile(src, dest)
58 if maps:
Rico Wind3d369b42021-01-12 10:26:24 +010059 print('Copying: ' + src + '.map -> ' + dest + '.map')
Søren Gjesse50c29272019-11-27 15:37:12 +010060 copyfile(src + '.map', dest + '.map')
Søren Gjessefe640e52019-11-28 12:46:04 +010061 else:
Rico Wind3d369b42021-01-12 10:26:24 +010062 print('WARNING: Not copying ' + src + ' -> ' + dest +
63 ', as' + dest + ' does not exist already')
Søren Gjessefe640e52019-11-28 12:46:04 +010064
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010065def copy_jar_targets(root, target_root, jar_targets, maps):
Morten Krogh-Jespersen8a4d1ca2021-01-19 08:27:02 +010066 srcs = list(map((lambda t: t[0] + '.jar'), jar_targets))
67 dests = list(map((lambda t: t[1] + '.jar'), jar_targets))
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +010068 copy_targets(root, target_root, srcs, dests, maps=maps)
Mads Ager12a56bc2017-11-27 11:51:25 +010069
70def copy_other_targets(root, target_root):
71 copy_targets(root, target_root, OTHER_TARGETS, OTHER_TARGETS)
72
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010073def download_hash(root, commit_hash, target, quiet=False):
74 download_target(root, target, commit_hash, True, quiet=quiet)
Rico Wind03463d32018-01-22 10:44:00 +010075
76def download_version(root, version, target):
Clément Béraf649e072020-03-25 07:15:28 +000077 download_target(root, target, version, False)
Rico Wind03463d32018-01-22 10:44:00 +010078
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010079def download_target(root, target, hash_or_version, is_hash, quiet=False):
Mads Ager12a56bc2017-11-27 11:51:25 +010080 download_path = os.path.join(root, target)
Clément Béra0c58dd82020-03-24 12:49:57 +000081 url = archive.GetUploadDestination(
82 hash_or_version,
Clément Béra729780c2020-03-25 08:50:28 +000083 target,
Clément Béra0c58dd82020-03-24 12:49:57 +000084 is_hash)
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010085 if not quiet:
Rico Wind3d369b42021-01-12 10:26:24 +010086 print('Downloading: ' + url + ' -> ' + download_path)
Christoffer Quist Adamsen870fa462020-12-15 10:50:54 +010087 utils.download_file_from_cloud_storage(url, download_path, quiet=quiet)
Mads Ager12a56bc2017-11-27 11:51:25 +010088
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +020089def main_download(hash, maps, targets, target_root, version):
90 jar_targets = JAR_TARGETS_MAP[targets]
Morten Krogh-Jespersen8a4d1ca2021-01-19 08:27:02 +010091 final_targets = list(map((lambda t: t[0] + '.jar'), jar_targets)) + OTHER_TARGETS
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +020092 with utils.TempDir() as root:
93 for target in final_targets:
94 if hash:
95 download_hash(root, hash, target)
96 if maps and target not in OTHER_TARGETS:
97 download_hash(root, hash, target + '.map')
98 else:
99 assert version
100 download_version(root, version, target)
101 if maps and target not in OTHER_TARGETS:
102 download_version(root, version, target + '.map')
103 copy_jar_targets(root, target_root, jar_targets, maps)
104 copy_other_targets(root, target_root)
105
106def main_build(maps, max_memory_size, targets, target_root):
107 jar_targets = JAR_TARGETS_MAP[targets]
108 gradle_args = map(lambda t: t[0], jar_targets)
109 if max_memory_size:
110 gradle_args.append('-Dorg.gradle.jvmargs=-Xmx' + max_memory_size)
111 gradle.RunGradle(gradle_args)
112 copy_jar_targets(utils.LIBS, target_root, jar_targets, maps)
113 copy_other_targets(utils.GENERATED_LICENSE_DIR, target_root)
114
115def main(args):
Tamas Kenez4f3fe5a2018-12-14 14:37:30 +0100116 if args.maps and args.targets != 'lib':
117 raise Exception("Use '--maps' only with '--targets lib.")
Mads Ager14d9b072017-11-20 13:42:55 +0100118 target_root = args.android_root[0]
Rico Wind03463d32018-01-22 10:44:00 +0100119 if args.commit_hash == None and args.version == None:
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200120 main_build(args.maps, args.java_max_memory_size, args.targets, target_root)
Mads Ager14d9b072017-11-20 13:42:55 +0100121 else:
Rico Wind03463d32018-01-22 10:44:00 +0100122 assert args.commit_hash == None or args.version == None
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200123 main_download(args.commit_hash, args.maps, args.targets, target_root, args.version)
Søren Gjesse6d1934f2017-11-09 10:00:24 +0100124
125if __name__ == '__main__':
Morten Krogh-Jespersen1947a862019-09-26 14:06:48 +0200126 sys.exit(main(parse_arguments()))