Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Side by Side Diff: testing/android/generate_native_test.py

Issue 10408091: Chromium support of running DumpRenderTree as an apk on Android (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes according to comments in Patch Set 3 Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # On Android we build unit test bundles as shared libraries. To run 6 # On Android we build unit test bundles as shared libraries. To run
7 # tests, we launch a special "test runner" apk which loads the library 7 # tests, we launch a special "test runner" apk which loads the library
8 # then jumps into it. Since java is required for many tests 8 # then jumps into it. Since java is required for many tests
9 # (e.g. PathUtils.java), a "pure native" test bundle is inadequate. 9 # (e.g. PathUtils.java), a "pure native" test bundle is inadequate.
10 # 10 #
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 [strip, '--strip-unneeded', self._native_library, '-o', dest]) 129 [strip, '--strip-unneeded', self._native_library, '-o', dest])
130 if self._jars: 130 if self._jars:
131 destdir = os.path.join(self._output_directory, 'libs') 131 destdir = os.path.join(self._output_directory, 'libs')
132 if not os.path.exists(destdir): 132 if not os.path.exists(destdir):
133 os.makedirs(destdir) 133 os.makedirs(destdir)
134 for jar in self._jars: 134 for jar in self._jars:
135 dest = os.path.join(destdir, os.path.basename(jar)) 135 dest = os.path.join(destdir, os.path.basename(jar))
136 logging.warn('%s --> %s' % (jar, dest)) 136 logging.warn('%s --> %s' % (jar, dest))
137 shutil.copyfile(jar, dest) 137 shutil.copyfile(jar, dest)
138 138
139 def CreateBundle(self): 139 def CreateBundle(self, ant_compile):
140 """Create the apk bundle source and assemble components.""" 140 """Create the apk bundle source and assemble components."""
141 if not ant_compile:
142 self._SOURCE_FILES.append('Android.mk')
143 self._REPLACEME_FILES.append('Android.mk')
141 self._CopyTemplateFiles() 144 self._CopyTemplateFiles()
142 self._ReplaceStrings() 145 self._ReplaceStrings()
143 self._CopyLibraryAndJars() 146 self._CopyLibraryAndJars()
144 147
145 def Compile(self, ant_args): 148 def Compile(self, ant_args):
146 """Build the generated apk with ant. 149 """Build the generated apk with ant.
147 150
148 Args: 151 Args:
149 ant_args: extra args to pass to ant 152 ant_args: extra args to pass to ant
150 """ 153 """
151 cmd = ['ant'] 154 cmd = ['ant']
152 if ant_args: 155 if ant_args:
153 cmd.append(ant_args) 156 cmd.append(ant_args)
154 cmd.extend(['-buildfile', 157 cmd.extend(['-buildfile',
155 os.path.join(self._output_directory, 'native_test_apk.xml')]) 158 os.path.join(self._output_directory, 'native_test_apk.xml')])
156 logging.warn(cmd) 159 logging.warn(cmd)
157 p = subprocess.Popen(cmd, stderr=subprocess.STDOUT) 160 p = subprocess.Popen(cmd, stderr=subprocess.STDOUT)
158 (stdout, _) = p.communicate() 161 (stdout, _) = p.communicate()
159 logging.warn(stdout) 162 logging.warn(stdout)
160 if p.returncode != 0: 163 if p.returncode != 0:
161 logging.error('Ant return code %d' % p.returncode) 164 logging.error('Ant return code %d' % p.returncode)
162 sys.exit(p.returncode) 165 sys.exit(p.returncode)
163 166
167 def CompileAndroidMk(self):
168 """Build the generated apk within Android source tree using Android.mk."""
169 try:
170 import compile_android_mk # pylint: disable=F0401
171 except:
172 raise AssertionError('Not in Android source tree. '
173 'Please use --ant-compile.')
174 compile_android_mk.CompileAndroidMk(self._native_library,
175 self._output_directory)
176
164 177
165 def main(argv): 178 def main(argv):
166 parser = optparse.OptionParser() 179 parser = optparse.OptionParser()
167 parser.add_option('--verbose', 180 parser.add_option('--verbose',
168 help='Be verbose') 181 help='Be verbose')
169 parser.add_option('--native_library', 182 parser.add_option('--native_library',
170 help='Full name of native shared library test bundle') 183 help='Full name of native shared library test bundle')
171 parser.add_option('--jar', action='append', 184 parser.add_option('--jar', action='append',
172 help='Include this jar; can be specified multiple times') 185 help='Include this jar; can be specified multiple times')
173 parser.add_option('--output', 186 parser.add_option('--output',
174 help='Output directory for generated files.') 187 help='Output directory for generated files.')
175 parser.add_option('--ant-compile', action='store_true', 188 parser.add_option('--ant-compile', action='store_true',
176 help='If specified, build the generated apk with ant') 189 help='If specified, build the generated apk with ant. '
190 'Otherwise assume compiling within the Android '
191 'source tree using Android.mk.')
177 parser.add_option('--ant-args', 192 parser.add_option('--ant-args',
178 help='extra args for ant') 193 help='extra args for ant')
179 194
180 options, _ = parser.parse_args(argv) 195 options, _ = parser.parse_args(argv)
181 196
182 # It is not an error to specify no native library; the apk should 197 # It is not an error to specify no native library; the apk should
183 # still be generated and build. It will, however, print 198 # still be generated and build. It will, however, print
184 # NATIVE_LOADER_FAILED when run. 199 # NATIVE_LOADER_FAILED when run.
185 if not options.output: 200 if not options.output:
186 raise Exception('No output directory specified for generated files') 201 raise Exception('No output directory specified for generated files')
187 202
188 if options.verbose: 203 if options.verbose:
189 logging.basicConfig(level=logging.DEBUG, format=' %(message)s') 204 logging.basicConfig(level=logging.DEBUG, format=' %(message)s')
190 205
206 # Ignore --ant-compile when building with Android source.
207 if 'ANDROID_BUILD_TOP' in os.environ:
208 options.ant_compile = False
209
191 ntag = NativeTestApkGenerator(native_library=options.native_library, 210 ntag = NativeTestApkGenerator(native_library=options.native_library,
192 jars=options.jar, 211 jars=options.jar,
193 output_directory=options.output) 212 output_directory=options.output)
194 ntag.CreateBundle() 213 ntag.CreateBundle(options.ant_compile)
214
195 if options.ant_compile: 215 if options.ant_compile:
196 ntag.Compile(options.ant_args) 216 ntag.Compile(options.ant_args)
217 else:
218 ntag.CompileAndroidMk()
197 219
198 logging.warn('COMPLETE.') 220 logging.warn('COMPLETE.')
199 221
200 if __name__ == '__main__': 222 if __name__ == '__main__':
201 sys.exit(main(sys.argv)) 223 sys.exit(main(sys.argv))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698