blob: 2ef479da5c929eee846676802b29fca8f75900b8 [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',
Søren Gjessefe7c0112018-12-03 12:33:12 +010018 '9.0.0',
Søren Gjesse1528c022018-11-23 15:14:05 +010019 '8.1.0',
Mads Ager418d1ca2017-05-22 09:35:49 +020020 '7.0.0',
21 '6.0.1',
22 '5.1.1',
Sebastien Hertzae6585e2017-10-04 15:07:43 +020023 '4.4.4'
Mads Ager418d1ca2017-05-22 09:35:49 +020024]
25
26JUNIT_HOSTDEX = os.path.join(
27 utils.REPO_ROOT,
28 'third_party', 'jdwp-tests', 'junit-hostdex.jar')
29
30JDWP_TESTS_HOSTDEX = os.path.join(
31 utils.REPO_ROOT,
32 'third_party', 'jdwp-tests', 'apache-harmony-jdwp-tests-hostdex.jar')
33
34IMAGE='/system/non/existent/jdwp/image.art'
35
36# Timeout in ms
37TIMEOUT=10000
38
39DEBUGGER_EXTRA_FLAGS = [
40 '-Xjnigreflimit:2000',
41 '-Duser.language=en',
42 '-Duser.region=US',
43 '-Djpda.settings.verbose=true',
44 '-Djpda.settings.transportAddress=127.0.0.1:55107',
45 '-Djpda.settings.timeout=%d' % TIMEOUT,
46 '-Djpda.settings.waitingTime=%d' % TIMEOUT
47]
48
49DEBUGGEE_EXTRA_FLAGS = [
50]
51
52def get_art_dir(version):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020053 if version == '4.4.4':
54 art_dir = 'dalvik'
55 else:
56 art_dir = version == 'default' and 'art' or 'art-%s' % version
Mads Ager418d1ca2017-05-22 09:35:49 +020057 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):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020066 return os.path.join(get_art_dir(version), 'bin', 'dalvikvm')
Mads Ager418d1ca2017-05-22 09:35:49 +020067
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)
Sebastien Hertzae6585e2017-10-04 15:07:43 +020074 if version == '4.4.4':
75 # Dalvik expects that the dalvik-cache dir already exists.
76 dalvik_cache_dir = os.path.join(android_data, 'dalvik-cache')
77 if not os.path.isdir(dalvik_cache_dir):
78 os.mkdir(dalvik_cache_dir)
Mads Ager418d1ca2017-05-22 09:35:49 +020079 os.environ['ANDROID_DATA'] = android_data
80 os.environ['ANDROID_ROOT'] = art_dir
81 os.environ['LD_LIBRARY_PATH'] = lib_dir
82 os.environ['DYLD_LIBRARY_PATH'] = lib_dir
83 os.environ['LD_USE_LOAD_BIAS'] = '1'
84
85def get_boot_libs(version):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020086 boot_libs = []
87 if version == '4.4.4':
88 # Dalvik
89 boot_libs.extend(['core-hostdex.jar'])
90 else:
91 # ART
92 boot_libs.extend(['core-libart-hostdex.jar'])
93 if version != '5.1.1' and version != '6.0.1':
94 boot_libs.extend(['core-oj-hostdex.jar'])
95 boot_libs.extend(['apache-xml-hostdex.jar'])
96 return [os.path.join(get_fw_dir(version), lib) for lib in boot_libs]
Mads Ager418d1ca2017-05-22 09:35:49 +020097
98def get_common_flags(version):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020099 flags = []
100 flags.extend(['-Xbootclasspath:%s' % ':'.join(get_boot_libs(version))])
101 if version != '4.4.4':
102 flags.extend(['-Ximage:%s' % IMAGE])
103 if version != '5.1.1':
104 flags.extend(['-Xcompiler-option', '--debuggable'])
Søren Gjessefe7c0112018-12-03 12:33:12 +0100105 if version == '9.0.0':
106 flags.extend(['-XjdwpProvider:internal'])
Mads Ager418d1ca2017-05-22 09:35:49 +0200107 return flags
108
109def get_debuggee_flags(version):
110 return get_common_flags(version) + DEBUGGEE_EXTRA_FLAGS
111
112def get_debugger_flags(version):
113 return get_common_flags(version) + DEBUGGER_EXTRA_FLAGS
114
115def runDebuggee(version, args):
116 art_dir = get_art_dir(version)
117 lib_dir = get_lib_dir(version)
118 fw_dir = get_fw_dir(version)
119 cmd = [get_vm(version)]
Mads Ager418d1ca2017-05-22 09:35:49 +0200120 cmd.extend(get_debuggee_flags(version))
121 cmd.extend(args)
122 setup_environment(version)
123 print "Running debuggee as:", cmd
124 return subprocess.check_call(cmd)
125
126def runDebugger(version, classpath, args):
127 art_dir = get_art_dir(version)
128 lib_dir = get_lib_dir(version)
129 fw_dir = get_fw_dir(version)
Sebastien Hertzae6585e2017-10-04 15:07:43 +0200130 dalvikvm = os.path.join(art_dir, 'bin', 'dalvikvm')
Mads Ager418d1ca2017-05-22 09:35:49 +0200131 cmd = [dalvikvm]
132 cmd.extend(['-classpath', '%s:%s' % (classpath, JUNIT_HOSTDEX)])
Mads Ager418d1ca2017-05-22 09:35:49 +0200133 cmd.extend(get_debugger_flags(version))
134 cmd.append('-Djpda.settings.debuggeeJavaPath=%s %s' %\
135 (dalvikvm, ' '.join(get_debuggee_flags(version))))
136 cmd.extend(args)
137 setup_environment(version)
138 print "Running debugger as:", cmd
139 return subprocess.check_call(cmd)
140
141def usage():
142 print "Usage: %s [--debuggee] [--version=<version>] [--classpath=<classpath>] <args>" % (sys.argv[0])
143 print "where <version> is one of:", ', '.join(VERSIONS)
144 print " and <classpath> is optional classpath (default: %s)" % JDWP_TESTS_HOSTDEX
145 print " and <args> will be passed on as arguments to the art runtime."
146
147def main():
148 version = 'default'
149 debuggee = False
150 args = []
151 classpath = JDWP_TESTS_HOSTDEX
152 for arg in sys.argv[1:]:
153 if arg == '--help':
154 usage()
155 return 0
156 elif arg.startswith('--version='):
157 version = arg[len('--version='):]
158 elif arg.startswith('--classpath='):
159 classpath = arg[len('--classpath='):]
160 else:
161 args.append(arg)
162 if version not in VERSIONS:
163 print "Invalid version", version
164 usage()
165 return 1
166 if not debuggee and len(args) == 0:
167 args.append(DEFAULT_TEST)
168 if debuggee:
169 return runDebuggee(version, args)
170 else:
171 if len(args) == 0:
172 args.append(DEFAULT_TEST)
173 elif len(args) == 1:
Ian Zerny345ee402018-01-30 13:22:08 +0100174 args = [TEST_RUNNER, args[0]]
Mads Ager418d1ca2017-05-22 09:35:49 +0200175 return runDebugger(version, classpath, args)
176
177if __name__ == '__main__':
178 sys.exit(main())