blob: a52e3f3e4bc2f25a8647fa9df493557b9f971a0b [file] [log] [blame]
Mads Ager418d1ca2017-05-22 09:35:49 +02001#!/usr/bin/env python
2# 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.')
Rico Wind09570612019-07-04 08:47:21 +020029 parser.add_argument('--no-internal', '--no_internal',
30 help='Do not build with support for Google internal tests.',
31 default=False, action='store_true')
Mads Ager980ad762019-02-20 11:35:59 +010032 parser.add_argument('--java-home', '--java_home',
Ian Zerny5fffb0a2019-02-11 13:54:22 +010033 help='Use a custom java version to run gradle.')
Morten Krogh-Jespersen29239502019-10-14 09:11:23 +020034 parser.add_argument('--worktree',
35 help='Gradle is running in a worktree and may lock up '
36 'the gradle caches.',
37 action='store_true',
38 default=False)
Mads Ager980ad762019-02-20 11:35:59 +010039 return parser.parse_known_args()
Ian Zerny5fffb0a2019-02-11 13:54:22 +010040
41def GetJavaEnv(env):
Rico Wind0e0bbd12019-02-27 14:43:15 +010042 java_env = dict(env if env else os.environ, JAVA_HOME = jdk.GetJdkHome())
43 java_env['PATH'] = java_env['PATH'] + os.pathsep + os.path.join(jdk.GetJdkHome(), 'bin')
Ian Zerny9794cfd2020-02-04 07:57:35 +010044 java_env['GRADLE_OPTS'] = '-Xmx1g'
Rico Wind0e0bbd12019-02-27 14:43:15 +010045 return java_env
Ian Zerny5fffb0a2019-02-11 13:54:22 +010046
Mads Ager418d1ca2017-05-22 09:35:49 +020047def PrintCmd(s):
48 if type(s) is list:
49 s = ' '.join(s)
50 print 'Running: %s' % s
51 # I know this will hit os on windows eventually if we don't do this.
52 sys.stdout.flush()
53
54def EnsureGradle():
Ian Zerny5fffb0a2019-02-11 13:54:22 +010055 utils.EnsureDepFromGoogleCloudStorage(
56 GRADLE, GRADLE_TGZ, GRADLE_SHA1, 'Gradle binary')
Mads Ager418d1ca2017-05-22 09:35:49 +020057
Ian Zerny3f54e222019-02-12 10:51:17 +010058def EnsureJdk():
59 jdkHome = jdk.GetJdkHome()
60 jdkTgz = jdkHome + '.tar.gz'
61 jdkSha1 = jdkTgz + '.sha1'
62 utils.EnsureDepFromGoogleCloudStorage(jdkHome, jdkTgz, jdkSha1, 'JDK')
63
Mads Agera4911eb2017-11-22 13:19:36 +010064def EnsureDeps():
Mads Ager418d1ca2017-05-22 09:35:49 +020065 EnsureGradle()
Ian Zerny3f54e222019-02-12 10:51:17 +010066 EnsureJdk()
Mads Agera4911eb2017-11-22 13:19:36 +010067
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020068def RunGradleIn(gradleCmd, args, cwd, throw_on_failure=True, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010069 EnsureDeps()
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020070 cmd = [gradleCmd]
Mads Ager418d1ca2017-05-22 09:35:49 +020071 cmd.extend(args)
72 utils.PrintCmd(cmd)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020073 with utils.ChangedWorkingDirectory(cwd):
Ian Zerny5fffb0a2019-02-11 13:54:22 +010074 return_value = subprocess.call(cmd, env=GetJavaEnv(env))
Tamas Kenezb787bc82017-06-27 11:32:20 +020075 if throw_on_failure and return_value != 0:
Rico Wind0c2dff92017-11-29 09:27:12 +010076 raise Exception('Failed to execute gradle')
Rico Winda94f01c2017-06-27 10:32:34 +020077 return return_value
Mads Ager418d1ca2017-05-22 09:35:49 +020078
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020079def RunGradleWrapperIn(args, cwd, throw_on_failure=True, env=None):
80 return RunGradleIn('./gradlew', args, cwd, throw_on_failure, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020081
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020082def RunGradle(args, throw_on_failure=True, env=None):
83 return RunGradleIn(GRADLE, args, utils.REPO_ROOT, throw_on_failure, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020084
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020085def RunGradleExcludeDeps(args, throw_on_failure=True, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010086 EnsureDeps()
87 args.append('-Pexclude_deps')
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020088 return RunGradle(args, throw_on_failure, env=env)
Mads Agera4911eb2017-11-22 13:19:36 +010089
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020090def RunGradleInGetOutput(gradleCmd, args, cwd, env=None):
Mads Agera4911eb2017-11-22 13:19:36 +010091 EnsureDeps()
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020092 cmd = [gradleCmd]
Mads Agera4911eb2017-11-22 13:19:36 +010093 cmd.extend(args)
94 utils.PrintCmd(cmd)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +020095 with utils.ChangedWorkingDirectory(cwd):
Ian Zerny5fffb0a2019-02-11 13:54:22 +010096 return subprocess.check_output(cmd, env=GetJavaEnv(env))
Mads Agera4911eb2017-11-22 13:19:36 +010097
Jean-Marie Henaff889dd942018-04-05 15:56:36 +020098def RunGradleWrapperInGetOutput(args, cwd, env=None):
99 return RunGradleInGetOutput('./gradlew', args, cwd, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200100
Jean-Marie Henaff889dd942018-04-05 15:56:36 +0200101def RunGradleGetOutput(args, env=None):
102 return RunGradleInGetOutput(GRADLE, args, utils.REPO_ROOT, env=env)
Jean-Marie Henaffe4e36d12018-04-05 10:33:50 +0200103
Mads Ager418d1ca2017-05-22 09:35:49 +0200104def Main():
Ian Zerny5fffb0a2019-02-11 13:54:22 +0100105 (options, args) = ParseOptions()
Ian Zerny5fffb0a2019-02-11 13:54:22 +0100106 if options.java_home:
Mads Ager980ad762019-02-20 11:35:59 +0100107 args.append('-Dorg.gradle.java.home=' + options.java_home)
Rico Wind09570612019-07-04 08:47:21 +0200108 if options.no_internal:
109 args.append('-Pno_internal')
Morten Krogh-Jespersen29239502019-10-14 09:11:23 +0200110 if options.worktree:
111 args.append('-g=' + os.path.join(utils.REPO_ROOT, ".gradle_user_home"))
Mads Ager980ad762019-02-20 11:35:59 +0100112 return RunGradle(args)
Mads Ager418d1ca2017-05-22 09:35:49 +0200113
114if __name__ == '__main__':
115 sys.exit(Main())