blob: cc1a9cb10f65ce7308a1488a0a9affcc9f35a62f [file] [log] [blame]
Mathias Ravdd6a6de2018-05-18 10:18:33 +02001# Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
2# for details. All rights reserved. Use of this source code is governed by a
3# BSD-style license that can be found in the LICENSE file.
4
Ian Zerny0f5fc732018-11-15 14:34:41 +01005import glob
Mathias Ravdd6a6de2018-05-18 10:18:33 +02006import subprocess
Jinseong Jeon158a3f12019-02-08 01:40:59 -08007from threading import Timer
Ian Zernye92325b2020-03-13 13:29:27 +01008
9import gradle
10import jdk
Mathias Ravdd6a6de2018-05-18 10:18:33 +020011import utils
12
Ian Zernye92325b2020-03-13 13:29:27 +010013
Mathias Ravdd6a6de2018-05-18 10:18:33 +020014def run(tool, args, build=None, debug=True,
Rico Wind5fdec152018-12-17 09:16:14 +010015 profile=False, track_memory_file=None, extra_args=None,
Søren Gjesse943389f2020-03-13 10:40:25 +010016 stderr=None, stdout=None, return_stdout=False, timeout=0, quiet=False,
17 cmd_prefix=[]):
Ian Zernye92325b2020-03-13 13:29:27 +010018 cmd = []
19 cmd.extend(cmd_prefix)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020020 if build is None:
21 build, args = extract_build_from_args(args)
22 if build:
Tamas Keneza730a7e2018-12-10 15:02:28 +010023 gradle.RunGradle(['r8lib' if tool.startswith('r8lib') else 'r8'])
Mathias Ravdd6a6de2018-05-18 10:18:33 +020024 if track_memory_file:
25 cmd.extend(['tools/track_memory.sh', track_memory_file])
Ian Zerny3f54e222019-02-12 10:51:17 +010026 cmd.append(jdk.GetJavaExecutable())
Mathias Rav56df69d2018-06-07 12:38:21 +020027 if extra_args:
28 cmd.extend(extra_args)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020029 if debug:
30 cmd.append('-ea')
31 if profile:
32 cmd.append('-agentlib:hprof=cpu=samples,interval=1,depth=8')
Søren Gjesse95becbf2018-12-11 08:48:00 +010033 if tool == 'r8lib-d8':
34 cmd.extend(['-cp', utils.R8LIB_JAR, 'com.android.tools.r8.D8'])
Tamas Keneza730a7e2018-12-10 15:02:28 +010035 elif tool == 'r8lib-r8':
36 cmd.extend(['-cp', utils.R8LIB_JAR, 'com.android.tools.r8.R8'])
37 else:
Søren Gjesse95becbf2018-12-11 08:48:00 +010038 cmd.extend(['-jar', utils.R8_JAR, tool])
Søren Gjessec4e6a282018-10-04 12:37:03 +020039 lib, args = extract_lib_from_args(args)
40 if lib:
41 cmd.extend(["--lib", lib])
Mathias Ravdd6a6de2018-05-18 10:18:33 +020042 cmd.extend(args)
Morten Krogh-Jespersenae9557c2019-10-23 15:14:02 +020043 utils.PrintCmd(cmd, quiet=quiet)
Jinseong Jeon158a3f12019-02-08 01:40:59 -080044 if timeout > 0:
45 kill = lambda process: process.kill()
46 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
47 timer = Timer(timeout, kill, [proc])
48 try:
49 timer.start()
50 stdout, stderr = proc.communicate()
51 finally:
52 timer.cancel()
53 return stdout if return_stdout else proc.returncode
54 else:
55 if return_stdout:
56 return subprocess.check_output(cmd)
57 return subprocess.call(cmd, stdout=stdout, stderr=stderr)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020058
Ian Zerny0f5fc732018-11-15 14:34:41 +010059def run_in_tests(tool, args, build=None, debug=True, extra_args=None):
60 if build is None:
61 build, args = extract_build_from_args(args)
62 if build:
63 gradle.RunGradle([
64 'copyMavenDeps',
65 'compileTestJava',
66 ])
67 cmd = []
Ian Zerny3f54e222019-02-12 10:51:17 +010068 cmd.append(jdk.GetJavaExecutable())
Ian Zerny0f5fc732018-11-15 14:34:41 +010069 if extra_args:
70 cmd.extend(extra_args)
71 if debug:
72 cmd.append('-ea')
73 cmd.extend(['-cp', ':'.join([
74 utils.BUILD_MAIN_DIR,
75 utils.BUILD_TEST_DIR,
76 ] + glob.glob('%s/*.jar' % utils.BUILD_DEPS_DIR))])
77 cmd.extend([tool])
78 cmd.extend(args)
79 utils.PrintCmd(cmd)
80 return subprocess.call(cmd)
81
Mathias Ravdd6a6de2018-05-18 10:18:33 +020082def extract_build_from_args(input_args):
83 build = True
84 args = []
85 for arg in input_args:
86 if arg in ("--build", "--no-build"):
87 build = arg == "--build"
88 else:
89 args.append(arg)
90 return build, args
Søren Gjessec4e6a282018-10-04 12:37:03 +020091
92def extract_lib_from_args(input_args):
93 lib = None
94 args = []
95 for arg in input_args:
96 if arg == '--lib-android':
Søren Gjesse315b8252018-12-13 16:28:42 +010097 lib = utils.get_android_jar(28)
Søren Gjessec4e6a282018-10-04 12:37:03 +020098 elif arg == '--lib-java':
99 lib = utils.RT_JAR
100 else:
101 args.append(arg)
102 return lib, args