blob: d561e7e4686edf134eb2bb3c677064deb7342e3d [file] [log] [blame]
Mads Ager418d1ca2017-05-22 09:35:49 +02001#!/usr/bin/env python
2# Copyright (c) 2017, 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
6import os
7import subprocess
8import sys
9import utils
10
11DEFAULT_TEST = 'org.apache.harmony.jpda.tests.share.AllTests'
12
13TEST_RUNNER = 'org.junit.runner.JUnitCore'
14TEST_PACKAGE = 'org.apache.harmony.jpda.tests.jdwp'
15
16VERSIONS = [
17 'default',
18 '7.0.0',
19 '6.0.1',
20 '5.1.1',
21]
22
23BOOT_LIBS = [
24 'core-libart-hostdex.jar',
25 'core-oj-hostdex.jar',
26 'apache-xml-hostdex.jar',
27]
28
29JUNIT_HOSTDEX = os.path.join(
30 utils.REPO_ROOT,
31 'third_party', 'jdwp-tests', 'junit-hostdex.jar')
32
33JDWP_TESTS_HOSTDEX = os.path.join(
34 utils.REPO_ROOT,
35 'third_party', 'jdwp-tests', 'apache-harmony-jdwp-tests-hostdex.jar')
36
37IMAGE='/system/non/existent/jdwp/image.art'
38
39# Timeout in ms
40TIMEOUT=10000
41
42DEBUGGER_EXTRA_FLAGS = [
43 '-Xjnigreflimit:2000',
44 '-Duser.language=en',
45 '-Duser.region=US',
46 '-Djpda.settings.verbose=true',
47 '-Djpda.settings.transportAddress=127.0.0.1:55107',
48 '-Djpda.settings.timeout=%d' % TIMEOUT,
49 '-Djpda.settings.waitingTime=%d' % TIMEOUT
50]
51
52DEBUGGEE_EXTRA_FLAGS = [
53]
54
55def get_art_dir(version):
56 art_dir = version == 'default' and 'art' or 'art-%s' % version
57 return os.path.join(utils.REPO_ROOT, 'tools', 'linux', art_dir)
58
59def get_lib_dir(version):
60 return os.path.join(get_art_dir(version), 'lib')
61
62def get_fw_dir(version):
63 return os.path.join(get_art_dir(version), 'framework')
64
65def get_vm(version):
66 return os.path.join(get_art_dir(version), 'bin', 'dalvikvm64')
67
68def setup_environment(version):
69 art_dir = get_art_dir(version)
70 lib_dir = get_lib_dir(version)
71 android_data = os.path.join(utils.REPO_ROOT, 'build', 'tmp', version)
72 if not os.path.isdir(android_data):
73 os.mkdir(android_data)
74 os.environ['ANDROID_DATA'] = android_data
75 os.environ['ANDROID_ROOT'] = art_dir
76 os.environ['LD_LIBRARY_PATH'] = lib_dir
77 os.environ['DYLD_LIBRARY_PATH'] = lib_dir
78 os.environ['LD_USE_LOAD_BIAS'] = '1'
79
80def get_boot_libs(version):
81 return [os.path.join(get_fw_dir(version), lib) for lib in BOOT_LIBS]
82
83def get_common_flags(version):
84 flags = ['-Ximage:%s' % IMAGE]
85 if version != '5.1.1':
86 flags.extend(['-Xcompiler-option', '--debuggable'])
87 if version != '6.0.1':
88 flags.extend(['-Xcompiler-option', '--compiler-filter=interpret-only'])
89 return flags
90
91def get_debuggee_flags(version):
92 return get_common_flags(version) + DEBUGGEE_EXTRA_FLAGS
93
94def get_debugger_flags(version):
95 return get_common_flags(version) + DEBUGGER_EXTRA_FLAGS
96
97def runDebuggee(version, args):
98 art_dir = get_art_dir(version)
99 lib_dir = get_lib_dir(version)
100 fw_dir = get_fw_dir(version)
101 cmd = [get_vm(version)]
102 cmd.append('-Xbootclasspath:%s' % ':'.join(get_boot_libs(version)))
103 cmd.extend(get_debuggee_flags(version))
104 cmd.extend(args)
105 setup_environment(version)
106 print "Running debuggee as:", cmd
107 return subprocess.check_call(cmd)
108
109def runDebugger(version, classpath, args):
110 art_dir = get_art_dir(version)
111 lib_dir = get_lib_dir(version)
112 fw_dir = get_fw_dir(version)
113 dalvikvm = os.path.join(art_dir, 'bin', 'dalvikvm64')
114 cmd = [dalvikvm]
115 cmd.extend(['-classpath', '%s:%s' % (classpath, JUNIT_HOSTDEX)])
116 cmd.append('-Xbootclasspath:%s' % ':'.join(get_boot_libs(version)))
117 cmd.extend(get_debugger_flags(version))
118 cmd.append('-Djpda.settings.debuggeeJavaPath=%s %s' %\
119 (dalvikvm, ' '.join(get_debuggee_flags(version))))
120 cmd.extend(args)
121 setup_environment(version)
122 print "Running debugger as:", cmd
123 return subprocess.check_call(cmd)
124
125def usage():
126 print "Usage: %s [--debuggee] [--version=<version>] [--classpath=<classpath>] <args>" % (sys.argv[0])
127 print "where <version> is one of:", ', '.join(VERSIONS)
128 print " and <classpath> is optional classpath (default: %s)" % JDWP_TESTS_HOSTDEX
129 print " and <args> will be passed on as arguments to the art runtime."
130
131def main():
132 version = 'default'
133 debuggee = False
134 args = []
135 classpath = JDWP_TESTS_HOSTDEX
136 for arg in sys.argv[1:]:
137 if arg == '--help':
138 usage()
139 return 0
140 elif arg.startswith('--version='):
141 version = arg[len('--version='):]
142 elif arg.startswith('--classpath='):
143 classpath = arg[len('--classpath='):]
144 else:
145 args.append(arg)
146 if version not in VERSIONS:
147 print "Invalid version", version
148 usage()
149 return 1
150 if not debuggee and len(args) == 0:
151 args.append(DEFAULT_TEST)
152 if debuggee:
153 return runDebuggee(version, args)
154 else:
155 if len(args) == 0:
156 args.append(DEFAULT_TEST)
157 elif len(args) == 1:
158 args = [TEST_RUNNER, '%s.%s' % (TEST_PACKAGE, args[0])]
159 return runDebugger(version, classpath, args)
160
161if __name__ == '__main__':
162 sys.exit(main())