blob: 92503a706123da9aa998d3b40e0c25043721c2b2 [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
18GRADLE_DIR = os.path.join(utils.REPO_ROOT, 'third_party', 'gradle')
19GRADLE_SHA1 = os.path.join(GRADLE_DIR, 'gradle.tar.gz.sha1')
Stephan Herhut928ab0e2017-07-18 10:53:23 +020020GRADLE_TGZ = os.path.join(GRADLE_DIR, 'gradle.tar.gz')
Mads Ager1d5ae402017-09-22 12:30:56 +020021
Rico Windf80f5a22017-06-16 09:15:57 +020022if utils.IsWindows():
Jean-Marie Henaff872e4422017-06-13 10:26:20 +020023 GRADLE = os.path.join(GRADLE_DIR, 'gradle', 'bin', 'gradle.bat')
24else:
25 GRADLE = os.path.join(GRADLE_DIR, 'gradle', 'bin', 'gradle')
Mads Ager418d1ca2017-05-22 09:35:49 +020026
Ian Zerny5fffb0a2019-02-11 13:54:22 +010027def ParseOptions():
Mads Ager980ad762019-02-20 11:35:59 +010028 parser = argparse.ArgumentParser(description = 'Call gradle.')
Søren Gjesse5ec0a732021-01-28 11:54:00 +010029 parser.add_argument('--exclude-deps', '--exclude_deps',
30 help='Build without internalized dependencies.',
31 default=False, action='store_true')
Rico Wind09570612019-07-04 08:47:21 +020032 parser.add_argument('--no-internal', '--no_internal',
33 help='Do not build with support for Google internal tests.',
34 default=False, action='store_true')
Mads Ager980ad762019-02-20 11:35:59 +010035 parser.add_argument('--java-home', '--java_home',
Ian Zerny5fffb0a2019-02-11 13:54:22 +010036 help='Use a custom java version to run gradle.')
Morten Krogh-Jespersen29239502019-10-14 09:11:23 +020037 parser.add_argument('--worktree',
38 help='Gradle is running in a worktree and may lock up '
39 'the gradle caches.',
40 action='store_true',
41 default=False)
Mads Ager980ad762019-02-20 11:35:59 +010042 return parser.parse_known_args()
Ian Zerny5fffb0a2019-02-11 13:54:22 +010043
44def GetJavaEnv(env):
Rico Wind0e0bbd12019-02-27 14:43:15 +010045 java_env = dict(env if env else os.environ, JAVA_HOME = jdk.GetJdkHome())
46 java_env['PATH'] = java_env['PATH'] + os.pathsep + os.path.join(jdk.GetJdkHome(), 'bin')
Ian Zerny9794cfd2020-02-04 07:57:35 +010047 java_env['GRADLE_OPTS'] = '-Xmx1g'
Rico Wind0e0bbd12019-02-27 14:43:15 +010048 return java_env
Ian Zerny5fffb0a2019-02-11 13:54:22 +010049
Mads Ager418d1ca2017-05-22 09:35:49 +020050def PrintCmd(s):
51 if type(s) is list:
52 s = ' '.join(s)
Rico Wind3d369b42021-01-12 10:26:24 +010053 print('Running: %s' % s)
Mads Ager418d1ca2017-05-22 09:35:49 +020054 # I know this will hit os on windows eventually if we don't do this.
55 sys.stdout.flush()
56
57def EnsureGradle():
Ian Zerny5fffb0a2019-02-11 13:54:22 +010058 utils.EnsureDepFromGoogleCloudStorage(
59 GRADLE, GRADLE_TGZ, GRADLE_SHA1, 'Gradle binary')
Mads Ager418d1ca2017-05-22 09:35:49 +020060
Ian Zerny3f54e222019-02-12 10:51:17 +010061def EnsureJdk():
Rico Winda12d1cf2022-04-22 07:37:00 +000062 jdkRoot = jdk.GetJdkRoot()
63 jdkTgz = jdkRoot + '.tar.gz'
Ian Zerny3f54e222019-02-12 10:51:17 +010064 jdkSha1 = jdkTgz + '.sha1'
Rico Winda12d1cf2022-04-22 07:37:00 +000065 utils.EnsureDepFromGoogleCloudStorage(jdkRoot, jdkTgz, jdkSha1, 'JDK')
Ian Zerny3f54e222019-02-12 10:51:17 +010066
Mads Agera4911eb2017-11-22 13:19:36 +010067def EnsureDeps():
Mads Ager418d1ca2017-05-22 09:35:49 +020068 EnsureGradle()
Ian Zerny3f54e222019-02-12 10:51:17 +010069 EnsureJdk()
Mads Agera4911eb2017-11-22 13:19:36 +010070
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020071def RunGradleIn(gradleCmd, args, cwd, throw_on_failure=True, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010072 EnsureDeps()
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020073 cmd = [gradleCmd]
Mads Ager418d1ca2017-05-22 09:35:49 +020074 cmd.extend(args)
75 utils.PrintCmd(cmd)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020076 with utils.ChangedWorkingDirectory(cwd):
Ian Zerny5fffb0a2019-02-11 13:54:22 +010077 return_value = subprocess.call(cmd, env=GetJavaEnv(env))
Tamas Kenezb787bc82017-06-27 11:32:20 +020078 if throw_on_failure and return_value != 0:
Rico Wind0c2dff92017-11-29 09:27:12 +010079 raise Exception('Failed to execute gradle')
Rico Winda94f01c2017-06-27 10:32:34 +020080 return return_value
Mads Ager418d1ca2017-05-22 09:35:49 +020081
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020082def RunGradleWrapperIn(args, cwd, throw_on_failure=True, env=None):
83 return RunGradleIn('./gradlew', args, cwd, throw_on_failure, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020084
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020085def RunGradle(args, throw_on_failure=True, env=None):
86 return RunGradleIn(GRADLE, args, utils.REPO_ROOT, throw_on_failure, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020087
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020088def RunGradleExcludeDeps(args, throw_on_failure=True, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010089 EnsureDeps()
90 args.append('-Pexclude_deps')
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020091 return RunGradle(args, throw_on_failure, env=env)
Mads Agera4911eb2017-11-22 13:19:36 +010092
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020093def RunGradleInGetOutput(gradleCmd, args, cwd, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010094 EnsureDeps()
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020095 cmd = [gradleCmd]
Mads Agera4911eb2017-11-22 13:19:36 +010096 cmd.extend(args)
97 utils.PrintCmd(cmd)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020098 with utils.ChangedWorkingDirectory(cwd):
Rico Windfd186372022-02-28 08:55:48 +010099 return subprocess.check_output(cmd, env=GetJavaEnv(env)).decode('utf-8')
Mads Agera4911eb2017-11-22 13:19:36 +0100100
Jean-Marie Henaff889dd942018-04-05 15:56:36 +0200101def RunGradleWrapperInGetOutput(args, cwd, env=None):
102 return RunGradleInGetOutput('./gradlew', args, cwd, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200103
Jean-Marie Henaff889dd942018-04-05 15:56:36 +0200104def RunGradleGetOutput(args, env=None):
105 return RunGradleInGetOutput(GRADLE, args, utils.REPO_ROOT, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200106
Mads Ager418d1ca2017-05-22 09:35:49 +0200107def Main():
Ian Zerny5fffb0a2019-02-11 13:54:22 +0100108 (options, args) = ParseOptions()
Ian Zerny5fffb0a2019-02-11 13:54:22 +0100109 if options.java_home:
Mads Ager980ad762019-02-20 11:35:59 +0100110 args.append('-Dorg.gradle.java.home=' + options.java_home)
Rico Wind09570612019-07-04 08:47:21 +0200111 if options.no_internal:
112 args.append('-Pno_internal')
Søren Gjesse5ec0a732021-01-28 11:54:00 +0100113 if options.exclude_deps:
114 args.append('-Pexclude_deps')
Morten Krogh-Jespersen29239502019-10-14 09:11:23 +0200115 if options.worktree:
116 args.append('-g=' + os.path.join(utils.REPO_ROOT, ".gradle_user_home"))
Mads Ager980ad762019-02-20 11:35:59 +0100117 return RunGradle(args)
Mads Ager418d1ca2017-05-22 09:35:49 +0200118
119if __name__ == '__main__':
120 sys.exit(Main())