blob: 688b01f95d36d220a8dce29840e898b66741608d [file] [log] [blame]
Ian Zernyac0b1782022-02-22 14:19:50 +01001#!/usr/bin/env python3
Mads Ager418d1ca2017-05-22 09:35:49 +02002# Copyright (c) 2016, 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# Wrapper script for running gradle.
7# Will make sure we pulled down gradle before running, and will use the pulled
8# down version to have a consistent developer experience.
9
Mads Ager980ad762019-02-20 11:35:59 +010010import argparse
Mads Ager418d1ca2017-05-22 09:35:49 +020011import os
12import subprocess
13import sys
Ian Zerny5fffb0a2019-02-11 13:54:22 +010014
15import jdk
Mads Ager418d1ca2017-05-22 09:35:49 +020016import utils
17
Søren Gjessea28dcbd2024-02-09 14:17:48 +010018GRADLE8_SHA1 = os.path.join(utils.THIRD_PARTY, 'gradle.tar.gz.sha1')
19GRADLE8_TGZ = os.path.join(utils.THIRD_PARTY, 'gradle.tar.gz')
Mads Ager1d5ae402017-09-22 12:30:56 +020020
Ian Zerny45140f02024-06-17 16:47:46 +020021PROTOC_ROOT = os.path.join(utils.THIRD_PARTY, 'protoc')
22PROTOC_SHA1 = os.path.join(utils.THIRD_PARTY, 'protoc.tar.gz.sha1')
23PROTOC_TGZ = os.path.join(utils.THIRD_PARTY, 'protoc.tar.gz')
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020024
Rico Wind28f3a0e2023-10-12 14:24:07 +020025def get_gradle():
Søren Gjessea28dcbd2024-02-09 14:17:48 +010026 gradle_dir = os.path.join(utils.THIRD_PARTY, 'gradle')
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020027 if utils.IsWindows():
Søren Gjessea28dcbd2024-02-09 14:17:48 +010028 return os.path.join(gradle_dir, 'bin', 'gradle.bat')
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020029 else:
Søren Gjessea28dcbd2024-02-09 14:17:48 +010030 return os.path.join(gradle_dir, 'bin', 'gradle')
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020031
Mads Ager418d1ca2017-05-22 09:35:49 +020032
Ian Zerny5fffb0a2019-02-11 13:54:22 +010033def ParseOptions():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020034 parser = argparse.ArgumentParser(description='Call gradle.')
35 parser.add_argument('--exclude-deps',
36 '--exclude_deps',
37 help='Build without internalized dependencies.',
38 default=False,
39 action='store_true')
40 parser.add_argument(
41 '--no-internal',
42 '--no_internal',
43 help='Do not build with support for Google internal tests.',
44 default=False,
45 action='store_true')
46 parser.add_argument('--java-home',
47 '--java_home',
48 help='Use a custom java version to run gradle.')
49 parser.add_argument('--worktree',
50 help='Gradle is running in a worktree and may lock up '
51 'the gradle caches.',
52 action='store_true',
53 default=False)
54 return parser.parse_known_args()
55
Ian Zerny5fffb0a2019-02-11 13:54:22 +010056
57def GetJavaEnv(env):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020058 java_env = dict(env if env else os.environ, JAVA_HOME=jdk.GetJdkHome())
59 java_env['PATH'] = java_env['PATH'] + os.pathsep + os.path.join(
60 jdk.GetJdkHome(), 'bin')
61 java_env['GRADLE_OPTS'] = '-Xmx1g'
62 return java_env
63
Ian Zerny5fffb0a2019-02-11 13:54:22 +010064
Mads Ager418d1ca2017-05-22 09:35:49 +020065def PrintCmd(s):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020066 if type(s) is list:
67 s = ' '.join(s)
68 print('Running: %s' % s)
69 # I know this will hit os on windows eventually if we don't do this.
70 sys.stdout.flush()
71
Mads Ager418d1ca2017-05-22 09:35:49 +020072
Rico Winde6e02632023-03-02 10:29:30 +010073def EnsureGradle():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020074 utils.EnsureDepFromGoogleCloudStorage(get_gradle(), GRADLE8_TGZ,
75 GRADLE8_SHA1, 'Gradle binary')
76
Mads Ager418d1ca2017-05-22 09:35:49 +020077
Ian Zerny3f54e222019-02-12 10:51:17 +010078def EnsureJdk():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020079 # Gradle in the new setup will use the jdks in the evaluation - fetch
80 # all beforehand.
81 for root in jdk.GetAllJdkDirs():
82 jdkTgz = root + '.tar.gz'
83 jdkSha1 = jdkTgz + '.sha1'
84 utils.EnsureDepFromGoogleCloudStorage(root, jdkTgz, jdkSha1, root)
85
Ian Zerny45140f02024-06-17 16:47:46 +020086def EnsureProtoc():
87 utils.EnsureDepFromGoogleCloudStorage(
88 PROTOC_ROOT,
89 PROTOC_TGZ,
90 PROTOC_SHA1,
91 'Proto Compiler')
92
Ian Zerny3f54e222019-02-12 10:51:17 +010093
Rico Winde6e02632023-03-02 10:29:30 +010094def EnsureDeps():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020095 EnsureGradle()
96 EnsureJdk()
Ian Zerny45140f02024-06-17 16:47:46 +020097 EnsureProtoc()
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020098
Mads Agera4911eb2017-11-22 13:19:36 +010099
Rico Wind28f3a0e2023-10-12 14:24:07 +0200100def RunGradleIn(gradleCmd, args, cwd, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200101 EnsureDeps()
102 cmd = [gradleCmd]
103 args.extend(['--offline', '-c=d8_r8/settings.gradle.kts'])
104 cmd.extend(args)
105 utils.PrintCmd(cmd)
106 with utils.ChangedWorkingDirectory(cwd):
107 return_value = subprocess.call(cmd, env=GetJavaEnv(env))
108 if throw_on_failure and return_value != 0:
109 raise Exception('Failed to execute gradle')
110 return return_value
111
Mads Ager418d1ca2017-05-22 09:35:49 +0200112
Jean-Marie Henaff889dd942018-04-05 15:56:36 +0200113def RunGradleWrapperIn(args, cwd, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200114 return RunGradleIn('./gradlew', args, cwd, throw_on_failure, env=env)
115
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200116
Rico Wind28f3a0e2023-10-12 14:24:07 +0200117def RunGradle(args, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200118 return RunGradleIn(get_gradle(),
119 args,
120 utils.REPO_ROOT,
121 throw_on_failure,
122 env=env)
123
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200124
Rico Winde6e02632023-03-02 10:29:30 +0100125def RunGradleExcludeDeps(args, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200126 EnsureDeps()
127 args.append('-Pexclude_deps')
128 return RunGradle(args, throw_on_failure, env=env)
129
Mads Agera4911eb2017-11-22 13:19:36 +0100130
Rico Winde6e02632023-03-02 10:29:30 +0100131def RunGradleInGetOutput(gradleCmd, args, cwd, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200132 EnsureDeps()
133 cmd = [gradleCmd]
134 cmd.extend(args)
135 utils.PrintCmd(cmd)
136 with utils.ChangedWorkingDirectory(cwd):
137 return subprocess.check_output(cmd, env=GetJavaEnv(env)).decode('utf-8')
138
Mads Agera4911eb2017-11-22 13:19:36 +0100139
Jean-Marie Henaff889dd942018-04-05 15:56:36 +0200140def RunGradleWrapperInGetOutput(args, cwd, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200141 return RunGradleInGetOutput('./gradlew', args, cwd, env=env)
142
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200143
Rico Wind28f3a0e2023-10-12 14:24:07 +0200144def RunGradleGetOutput(args, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200145 return RunGradleInGetOutput(get_gradle(), args, utils.REPO_ROOT, env=env)
146
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200147
Mads Ager418d1ca2017-05-22 09:35:49 +0200148def Main():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200149 (options, args) = ParseOptions()
150 if options.java_home:
151 args.append('-Dorg.gradle.java.home=' + options.java_home)
152 if options.no_internal:
153 args.append('-Pno_internal')
154 if options.exclude_deps:
155 args.append('-Pexclude_deps')
156 if options.worktree:
157 args.append('-g=' + os.path.join(utils.REPO_ROOT, ".gradle_user_home"))
158 return RunGradle(args)
159
Mads Ager418d1ca2017-05-22 09:35:49 +0200160
161if __name__ == '__main__':
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200162 sys.exit(Main())