blob: ef77a5c73278d51e1474eef6fac9c83dca1838fd [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
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020021
Rico Wind28f3a0e2023-10-12 14:24:07 +020022def get_gradle():
Søren Gjessea28dcbd2024-02-09 14:17:48 +010023 gradle_dir = os.path.join(utils.THIRD_PARTY, 'gradle')
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020024 if utils.IsWindows():
Søren Gjessea28dcbd2024-02-09 14:17:48 +010025 return os.path.join(gradle_dir, 'bin', 'gradle.bat')
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020026 else:
Søren Gjessea28dcbd2024-02-09 14:17:48 +010027 return os.path.join(gradle_dir, 'bin', 'gradle')
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020028
Mads Ager418d1ca2017-05-22 09:35:49 +020029
Ian Zerny5fffb0a2019-02-11 13:54:22 +010030def ParseOptions():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020031 parser = argparse.ArgumentParser(description='Call gradle.')
32 parser.add_argument('--exclude-deps',
33 '--exclude_deps',
34 help='Build without internalized dependencies.',
35 default=False,
36 action='store_true')
37 parser.add_argument(
38 '--no-internal',
39 '--no_internal',
40 help='Do not build with support for Google internal tests.',
41 default=False,
42 action='store_true')
43 parser.add_argument('--java-home',
44 '--java_home',
45 help='Use a custom java version to run gradle.')
46 parser.add_argument('--worktree',
47 help='Gradle is running in a worktree and may lock up '
48 'the gradle caches.',
49 action='store_true',
50 default=False)
51 return parser.parse_known_args()
52
Ian Zerny5fffb0a2019-02-11 13:54:22 +010053
54def GetJavaEnv(env):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020055 java_env = dict(env if env else os.environ, JAVA_HOME=jdk.GetJdkHome())
56 java_env['PATH'] = java_env['PATH'] + os.pathsep + os.path.join(
57 jdk.GetJdkHome(), 'bin')
58 java_env['GRADLE_OPTS'] = '-Xmx1g'
59 return java_env
60
Ian Zerny5fffb0a2019-02-11 13:54:22 +010061
Mads Ager418d1ca2017-05-22 09:35:49 +020062def PrintCmd(s):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020063 if type(s) is list:
64 s = ' '.join(s)
65 print('Running: %s' % s)
66 # I know this will hit os on windows eventually if we don't do this.
67 sys.stdout.flush()
68
Mads Ager418d1ca2017-05-22 09:35:49 +020069
Rico Winde6e02632023-03-02 10:29:30 +010070def EnsureGradle():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020071 utils.EnsureDepFromGoogleCloudStorage(get_gradle(), GRADLE8_TGZ,
72 GRADLE8_SHA1, 'Gradle binary')
73
Mads Ager418d1ca2017-05-22 09:35:49 +020074
Ian Zerny3f54e222019-02-12 10:51:17 +010075def EnsureJdk():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020076 # Gradle in the new setup will use the jdks in the evaluation - fetch
77 # all beforehand.
78 for root in jdk.GetAllJdkDirs():
79 jdkTgz = root + '.tar.gz'
80 jdkSha1 = jdkTgz + '.sha1'
81 utils.EnsureDepFromGoogleCloudStorage(root, jdkTgz, jdkSha1, root)
82
Ian Zerny3f54e222019-02-12 10:51:17 +010083
Rico Winde6e02632023-03-02 10:29:30 +010084def EnsureDeps():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020085 EnsureGradle()
86 EnsureJdk()
87
Mads Agera4911eb2017-11-22 13:19:36 +010088
Rico Wind28f3a0e2023-10-12 14:24:07 +020089def RunGradleIn(gradleCmd, args, cwd, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +020090 EnsureDeps()
91 cmd = [gradleCmd]
92 args.extend(['--offline', '-c=d8_r8/settings.gradle.kts'])
93 cmd.extend(args)
94 utils.PrintCmd(cmd)
95 with utils.ChangedWorkingDirectory(cwd):
96 return_value = subprocess.call(cmd, env=GetJavaEnv(env))
97 if throw_on_failure and return_value != 0:
98 raise Exception('Failed to execute gradle')
99 return return_value
100
Mads Ager418d1ca2017-05-22 09:35:49 +0200101
Jean-Marie Henaff889dd942018-04-05 15:56:36 +0200102def RunGradleWrapperIn(args, cwd, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200103 return RunGradleIn('./gradlew', args, cwd, throw_on_failure, env=env)
104
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200105
Rico Wind28f3a0e2023-10-12 14:24:07 +0200106def RunGradle(args, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200107 return RunGradleIn(get_gradle(),
108 args,
109 utils.REPO_ROOT,
110 throw_on_failure,
111 env=env)
112
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200113
Rico Winde6e02632023-03-02 10:29:30 +0100114def RunGradleExcludeDeps(args, throw_on_failure=True, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200115 EnsureDeps()
116 args.append('-Pexclude_deps')
117 return RunGradle(args, throw_on_failure, env=env)
118
Mads Agera4911eb2017-11-22 13:19:36 +0100119
Rico Winde6e02632023-03-02 10:29:30 +0100120def RunGradleInGetOutput(gradleCmd, args, cwd, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200121 EnsureDeps()
122 cmd = [gradleCmd]
123 cmd.extend(args)
124 utils.PrintCmd(cmd)
125 with utils.ChangedWorkingDirectory(cwd):
126 return subprocess.check_output(cmd, env=GetJavaEnv(env)).decode('utf-8')
127
Mads Agera4911eb2017-11-22 13:19:36 +0100128
Jean-Marie Henaff889dd942018-04-05 15:56:36 +0200129def RunGradleWrapperInGetOutput(args, cwd, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200130 return RunGradleInGetOutput('./gradlew', args, cwd, env=env)
131
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200132
Rico Wind28f3a0e2023-10-12 14:24:07 +0200133def RunGradleGetOutput(args, env=None):
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200134 return RunGradleInGetOutput(get_gradle(), args, utils.REPO_ROOT, env=env)
135
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200136
Mads Ager418d1ca2017-05-22 09:35:49 +0200137def Main():
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200138 (options, args) = ParseOptions()
139 if options.java_home:
140 args.append('-Dorg.gradle.java.home=' + options.java_home)
141 if options.no_internal:
142 args.append('-Pno_internal')
143 if options.exclude_deps:
144 args.append('-Pexclude_deps')
145 if options.worktree:
146 args.append('-g=' + os.path.join(utils.REPO_ROOT, ".gradle_user_home"))
147 return RunGradle(args)
148
Mads Ager418d1ca2017-05-22 09:35:49 +0200149
150if __name__ == '__main__':
Christoffer Quist Adamsen2434a4d2023-10-16 11:29:03 +0200151 sys.exit(Main())