blob: 15b69c8068c48d5296ea449111123058adfe0d80 [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',
Sebastien Hertzae6585e2017-10-04 15:07:43 +020021 '4.4.4'
Mads Ager418d1ca2017-05-22 09:35:49 +020022]
23
24JUNIT_HOSTDEX = os.path.join(
25 utils.REPO_ROOT,
26 'third_party', 'jdwp-tests', 'junit-hostdex.jar')
27
28JDWP_TESTS_HOSTDEX = os.path.join(
29 utils.REPO_ROOT,
30 'third_party', 'jdwp-tests', 'apache-harmony-jdwp-tests-hostdex.jar')
31
32IMAGE='/system/non/existent/jdwp/image.art'
33
34# Timeout in ms
35TIMEOUT=10000
36
37DEBUGGER_EXTRA_FLAGS = [
38 '-Xjnigreflimit:2000',
39 '-Duser.language=en',
40 '-Duser.region=US',
41 '-Djpda.settings.verbose=true',
42 '-Djpda.settings.transportAddress=127.0.0.1:55107',
43 '-Djpda.settings.timeout=%d' % TIMEOUT,
44 '-Djpda.settings.waitingTime=%d' % TIMEOUT
45]
46
47DEBUGGEE_EXTRA_FLAGS = [
48]
49
50def get_art_dir(version):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020051 if version == '4.4.4':
52 art_dir = 'dalvik'
53 else:
54 art_dir = version == 'default' and 'art' or 'art-%s' % version
Mads Ager418d1ca2017-05-22 09:35:49 +020055 return os.path.join(utils.REPO_ROOT, 'tools', 'linux', art_dir)
56
57def get_lib_dir(version):
58 return os.path.join(get_art_dir(version), 'lib')
59
60def get_fw_dir(version):
61 return os.path.join(get_art_dir(version), 'framework')
62
63def get_vm(version):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020064 return os.path.join(get_art_dir(version), 'bin', 'dalvikvm')
Mads Ager418d1ca2017-05-22 09:35:49 +020065
66def setup_environment(version):
67 art_dir = get_art_dir(version)
68 lib_dir = get_lib_dir(version)
69 android_data = os.path.join(utils.REPO_ROOT, 'build', 'tmp', version)
70 if not os.path.isdir(android_data):
71 os.mkdir(android_data)
Sebastien Hertzae6585e2017-10-04 15:07:43 +020072 if version == '4.4.4':
73 # Dalvik expects that the dalvik-cache dir already exists.
74 dalvik_cache_dir = os.path.join(android_data, 'dalvik-cache')
75 if not os.path.isdir(dalvik_cache_dir):
76 os.mkdir(dalvik_cache_dir)
Mads Ager418d1ca2017-05-22 09:35:49 +020077 os.environ['ANDROID_DATA'] = android_data
78 os.environ['ANDROID_ROOT'] = art_dir
79 os.environ['LD_LIBRARY_PATH'] = lib_dir
80 os.environ['DYLD_LIBRARY_PATH'] = lib_dir
81 os.environ['LD_USE_LOAD_BIAS'] = '1'
82
83def get_boot_libs(version):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020084 boot_libs = []
85 if version == '4.4.4':
86 # Dalvik
87 boot_libs.extend(['core-hostdex.jar'])
88 else:
89 # ART
90 boot_libs.extend(['core-libart-hostdex.jar'])
91 if version != '5.1.1' and version != '6.0.1':
92 boot_libs.extend(['core-oj-hostdex.jar'])
93 boot_libs.extend(['apache-xml-hostdex.jar'])
94 return [os.path.join(get_fw_dir(version), lib) for lib in boot_libs]
Mads Ager418d1ca2017-05-22 09:35:49 +020095
96def get_common_flags(version):
Sebastien Hertzae6585e2017-10-04 15:07:43 +020097 flags = []
98 flags.extend(['-Xbootclasspath:%s' % ':'.join(get_boot_libs(version))])
99 if version != '4.4.4':
100 flags.extend(['-Ximage:%s' % IMAGE])
101 if version != '5.1.1':
102 flags.extend(['-Xcompiler-option', '--debuggable'])
Mads Ager418d1ca2017-05-22 09:35:49 +0200103 return flags
104
105def get_debuggee_flags(version):
106 return get_common_flags(version) + DEBUGGEE_EXTRA_FLAGS
107
108def get_debugger_flags(version):
109 return get_common_flags(version) + DEBUGGER_EXTRA_FLAGS
110
111def runDebuggee(version, args):
112 art_dir = get_art_dir(version)
113 lib_dir = get_lib_dir(version)
114 fw_dir = get_fw_dir(version)
115 cmd = [get_vm(version)]
Mads Ager418d1ca2017-05-22 09:35:49 +0200116 cmd.extend(get_debuggee_flags(version))
117 cmd.extend(args)
118 setup_environment(version)
119 print "Running debuggee as:", cmd
120 return subprocess.check_call(cmd)
121
122def runDebugger(version, classpath, args):
123 art_dir = get_art_dir(version)
124 lib_dir = get_lib_dir(version)
125 fw_dir = get_fw_dir(version)
Sebastien Hertzae6585e2017-10-04 15:07:43 +0200126 dalvikvm = os.path.join(art_dir, 'bin', 'dalvikvm')
Mads Ager418d1ca2017-05-22 09:35:49 +0200127 cmd = [dalvikvm]
128 cmd.extend(['-classpath', '%s:%s' % (classpath, JUNIT_HOSTDEX)])
Mads Ager418d1ca2017-05-22 09:35:49 +0200129 cmd.extend(get_debugger_flags(version))
130 cmd.append('-Djpda.settings.debuggeeJavaPath=%s %s' %\
131 (dalvikvm, ' '.join(get_debuggee_flags(version))))
132 cmd.extend(args)
133 setup_environment(version)
134 print "Running debugger as:", cmd
135 return subprocess.check_call(cmd)
136
137def usage():
138 print "Usage: %s [--debuggee] [--version=<version>] [--classpath=<classpath>] <args>" % (sys.argv[0])
139 print "where <version> is one of:", ', '.join(VERSIONS)
140 print " and <classpath> is optional classpath (default: %s)" % JDWP_TESTS_HOSTDEX
141 print " and <args> will be passed on as arguments to the art runtime."
142
143def main():
144 version = 'default'
145 debuggee = False
146 args = []
147 classpath = JDWP_TESTS_HOSTDEX
148 for arg in sys.argv[1:]:
149 if arg == '--help':
150 usage()
151 return 0
152 elif arg.startswith('--version='):
153 version = arg[len('--version='):]
154 elif arg.startswith('--classpath='):
155 classpath = arg[len('--classpath='):]
156 else:
157 args.append(arg)
158 if version not in VERSIONS:
159 print "Invalid version", version
160 usage()
161 return 1
162 if not debuggee and len(args) == 0:
163 args.append(DEFAULT_TEST)
164 if debuggee:
165 return runDebuggee(version, args)
166 else:
167 if len(args) == 0:
168 args.append(DEFAULT_TEST)
169 elif len(args) == 1:
170 args = [TEST_RUNNER, '%s.%s' % (TEST_PACKAGE, args[0])]
171 return runDebugger(version, classpath, args)
172
173if __name__ == '__main__':
174 sys.exit(main())