blob: 10da97de2d2fc89ca3d24563fc4488f87eb4434f [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 gradle
Ian Zerny3f54e222019-02-12 10:51:17 +01007import jdk
Mathias Ravdd6a6de2018-05-18 10:18:33 +02008import subprocess
Jinseong Jeon158a3f12019-02-08 01:40:59 -08009from threading import Timer
Mathias Ravdd6a6de2018-05-18 10:18:33 +020010import utils
11
12def run(tool, args, build=None, debug=True,
Rico Wind5fdec152018-12-17 09:16:14 +010013 profile=False, track_memory_file=None, extra_args=None,
Jinseong Jeon158a3f12019-02-08 01:40:59 -080014 stderr=None, stdout=None, return_stdout=False, timeout=0):
Mathias Ravdd6a6de2018-05-18 10:18:33 +020015 if build is None:
16 build, args = extract_build_from_args(args)
17 if build:
Tamas Keneza730a7e2018-12-10 15:02:28 +010018 gradle.RunGradle(['r8lib' if tool.startswith('r8lib') else 'r8'])
Mathias Ravdd6a6de2018-05-18 10:18:33 +020019 cmd = []
20 if track_memory_file:
21 cmd.extend(['tools/track_memory.sh', track_memory_file])
Ian Zerny3f54e222019-02-12 10:51:17 +010022 cmd.append(jdk.GetJavaExecutable())
Mathias Rav56df69d2018-06-07 12:38:21 +020023 if extra_args:
24 cmd.extend(extra_args)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020025 if debug:
26 cmd.append('-ea')
27 if profile:
28 cmd.append('-agentlib:hprof=cpu=samples,interval=1,depth=8')
Søren Gjesse95becbf2018-12-11 08:48:00 +010029 if tool == 'r8lib-d8':
30 cmd.extend(['-cp', utils.R8LIB_JAR, 'com.android.tools.r8.D8'])
Tamas Keneza730a7e2018-12-10 15:02:28 +010031 elif tool == 'r8lib-r8':
32 cmd.extend(['-cp', utils.R8LIB_JAR, 'com.android.tools.r8.R8'])
33 else:
Søren Gjesse95becbf2018-12-11 08:48:00 +010034 cmd.extend(['-jar', utils.R8_JAR, tool])
Søren Gjessec4e6a282018-10-04 12:37:03 +020035 lib, args = extract_lib_from_args(args)
36 if lib:
37 cmd.extend(["--lib", lib])
Mathias Ravdd6a6de2018-05-18 10:18:33 +020038 cmd.extend(args)
39 utils.PrintCmd(cmd)
Jinseong Jeon158a3f12019-02-08 01:40:59 -080040 if timeout > 0:
41 kill = lambda process: process.kill()
42 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
43 timer = Timer(timeout, kill, [proc])
44 try:
45 timer.start()
46 stdout, stderr = proc.communicate()
47 finally:
48 timer.cancel()
49 return stdout if return_stdout else proc.returncode
50 else:
51 if return_stdout:
52 return subprocess.check_output(cmd)
53 return subprocess.call(cmd, stdout=stdout, stderr=stderr)
Mathias Ravdd6a6de2018-05-18 10:18:33 +020054
Ian Zerny0f5fc732018-11-15 14:34:41 +010055def run_in_tests(tool, args, build=None, debug=True, extra_args=None):
56 if build is None:
57 build, args = extract_build_from_args(args)
58 if build:
59 gradle.RunGradle([
60 'copyMavenDeps',
61 'compileTestJava',
62 ])
63 cmd = []
Ian Zerny3f54e222019-02-12 10:51:17 +010064 cmd.append(jdk.GetJavaExecutable())
Ian Zerny0f5fc732018-11-15 14:34:41 +010065 if extra_args:
66 cmd.extend(extra_args)
67 if debug:
68 cmd.append('-ea')
69 cmd.extend(['-cp', ':'.join([
70 utils.BUILD_MAIN_DIR,
71 utils.BUILD_TEST_DIR,
72 ] + glob.glob('%s/*.jar' % utils.BUILD_DEPS_DIR))])
73 cmd.extend([tool])
74 cmd.extend(args)
75 utils.PrintCmd(cmd)
76 return subprocess.call(cmd)
77
Mathias Ravdd6a6de2018-05-18 10:18:33 +020078def extract_build_from_args(input_args):
79 build = True
80 args = []
81 for arg in input_args:
82 if arg in ("--build", "--no-build"):
83 build = arg == "--build"
84 else:
85 args.append(arg)
86 return build, args
Søren Gjessec4e6a282018-10-04 12:37:03 +020087
88def extract_lib_from_args(input_args):
89 lib = None
90 args = []
91 for arg in input_args:
92 if arg == '--lib-android':
Søren Gjesse315b8252018-12-13 16:28:42 +010093 lib = utils.get_android_jar(28)
Søren Gjessec4e6a282018-10-04 12:37:03 +020094 elif arg == '--lib-java':
95 lib = utils.RT_JAR
96 else:
97 args.append(arg)
98 return lib, args