blob: 1eee1f73ff8b02464d3062984a8b13f2f40b82d6 [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,
Søren Gjessec853feb2020-03-16 09:34:41 +010017 cmd_prefix=None):
Ian Zernye92325b2020-03-13 13:29:27 +010018 cmd = []
Søren Gjessec853feb2020-03-16 09:34:41 +010019 if cmd_prefix:
20 cmd.extend(cmd_prefix)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020021 if build is None:
22 build, args = extract_build_from_args(args)
23 if build:
Tamas Keneza730a7e2018-12-10 15:02:28 +010024 gradle.RunGradle(['r8lib' if tool.startswith('r8lib') else 'r8'])
Mathias Ravdd6a6de2018-05-18 10:18:33 +020025 if track_memory_file:
26 cmd.extend(['tools/track_memory.sh', track_memory_file])
Ian Zerny3f54e222019-02-12 10:51:17 +010027 cmd.append(jdk.GetJavaExecutable())
Mathias Rav56df69d2018-06-07 12:38:21 +020028 if extra_args:
29 cmd.extend(extra_args)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020030 if debug:
31 cmd.append('-ea')
32 if profile:
33 cmd.append('-agentlib:hprof=cpu=samples,interval=1,depth=8')
Søren Gjesse95becbf2018-12-11 08:48:00 +010034 if tool == 'r8lib-d8':
35 cmd.extend(['-cp', utils.R8LIB_JAR, 'com.android.tools.r8.D8'])
Tamas Keneza730a7e2018-12-10 15:02:28 +010036 elif tool == 'r8lib-r8':
37 cmd.extend(['-cp', utils.R8LIB_JAR, 'com.android.tools.r8.R8'])
38 else:
Søren Gjesse95becbf2018-12-11 08:48:00 +010039 cmd.extend(['-jar', utils.R8_JAR, tool])
Søren Gjessec4e6a282018-10-04 12:37:03 +020040 lib, args = extract_lib_from_args(args)
41 if lib:
42 cmd.extend(["--lib", lib])
Mathias Ravdd6a6de2018-05-18 10:18:33 +020043 cmd.extend(args)
Morten Krogh-Jespersenae9557c2019-10-23 15:14:02 +020044 utils.PrintCmd(cmd, quiet=quiet)
Jinseong Jeon158a3f12019-02-08 01:40:59 -080045 if timeout > 0:
46 kill = lambda process: process.kill()
47 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
48 timer = Timer(timeout, kill, [proc])
49 try:
50 timer.start()
51 stdout, stderr = proc.communicate()
52 finally:
53 timer.cancel()
54 return stdout if return_stdout else proc.returncode
55 else:
56 if return_stdout:
57 return subprocess.check_output(cmd)
58 return subprocess.call(cmd, stdout=stdout, stderr=stderr)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020059
Ian Zerny0f5fc732018-11-15 14:34:41 +010060def run_in_tests(tool, args, build=None, debug=True, extra_args=None):
61 if build is None:
62 build, args = extract_build_from_args(args)
63 if build:
64 gradle.RunGradle([
65 'copyMavenDeps',
66 'compileTestJava',
67 ])
68 cmd = []
Ian Zerny3f54e222019-02-12 10:51:17 +010069 cmd.append(jdk.GetJavaExecutable())
Ian Zerny0f5fc732018-11-15 14:34:41 +010070 if extra_args:
71 cmd.extend(extra_args)
72 if debug:
73 cmd.append('-ea')
74 cmd.extend(['-cp', ':'.join([
75 utils.BUILD_MAIN_DIR,
76 utils.BUILD_TEST_DIR,
77 ] + glob.glob('%s/*.jar' % utils.BUILD_DEPS_DIR))])
78 cmd.extend([tool])
79 cmd.extend(args)
80 utils.PrintCmd(cmd)
81 return subprocess.call(cmd)
82
Mathias Ravdd6a6de2018-05-18 10:18:33 +020083def extract_build_from_args(input_args):
84 build = True
85 args = []
86 for arg in input_args:
87 if arg in ("--build", "--no-build"):
88 build = arg == "--build"
89 else:
90 args.append(arg)
91 return build, args
Søren Gjessec4e6a282018-10-04 12:37:03 +020092
93def extract_lib_from_args(input_args):
94 lib = None
95 args = []
96 for arg in input_args:
97 if arg == '--lib-android':
Søren Gjesse315b8252018-12-13 16:28:42 +010098 lib = utils.get_android_jar(28)
Søren Gjessec4e6a282018-10-04 12:37:03 +020099 elif arg == '--lib-java':
100 lib = utils.RT_JAR
101 else:
102 args.append(arg)
103 return lib, args