Index: tools/bots/cross-vm.py |
diff --git a/tools/bots/cross-vm.py b/tools/bots/cross-vm.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e58c6c0f73f82e521bc0536f727e7daefc87e75a |
--- /dev/null |
+++ b/tools/bots/cross-vm.py |
@@ -0,0 +1,89 @@ |
+#!/usr/bin/python |
+# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+# for details. All rights reserved. Use of this source code is governed by a |
+# BSD-style license that can be found in the LICENSE file. |
+ |
+import os |
+import re |
+import shutil |
+import sys |
+import tempfile |
+ |
+import bot |
+ |
+GCS_BUCKET = 'gs://dart-cross-compiled-binaries' |
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
+sys.path.append(os.path.join(SCRIPT_DIR, '..')) |
+ |
+import utils |
+ |
+CROSS_VM = r'cross-(arm)-vm-linux-(release)' |
+TARGET_VM = r'target-(arm)-vm-linux-(release)' |
+GSUTIL = utils.GetBuildbotGSUtilPath() |
+ |
+def run(args): |
+ print 'Running: %s' % (' '.join(args)) |
+ sys.stdout.flush() |
+ bot.RunProcess(args) |
+ |
+def main(): |
+ name, is_buildbot = bot.GetBotName() |
+ build_py = os.path.join('tools', 'build.py') |
+ test_py = os.path.join('tools', 'test.py') |
+ |
+ cross_vm_pattern_match = re.match(CROSS_VM, name) |
+ target_vm_pattern_match = re.match(TARGET_VM, name) |
+ if cross_vm_pattern_match: |
+ arch = cross_vm_pattern_match.group(1) |
+ mode = cross_vm_pattern_match.group(2) |
+ |
+ bot.Clobber() |
+ with bot.BuildStep('Build %s %s' % (arch, mode)): |
+ args = [sys.executable, build_py, |
+ '-m%s' % mode, '--arch=%s' % arch, 'runtime'] |
+ run(args) |
+ |
+ tarball = 'cross_build_%s_%s.tar.bz2' % (arch, mode) |
+ try: |
+ with bot.BuildStep('Create build tarball'): |
+ run(['tar', '-cjf', tarball, '--exclude=**/obj', |
+ '--exclude=**/obj.host', '--exclude=**/obj.target', |
+ '--exclude=**/*analyzer*', 'out/']) |
+ |
+ with bot.BuildStep('Upload build tarball'): |
+ uri = "%s/%s" % (GCS_BUCKET, tarball) |
+ run([GSUTIL, 'cp', tarball, uri]) |
+ run([GSUTIL, 'setacl', 'public-read', uri]) |
+ finally: |
+ if os.path.exists(tarball): |
+ os.remove(tarball) |
+ elif target_vm_pattern_match: |
+ arch = target_vm_pattern_match.group(1) |
+ mode = target_vm_pattern_match.group(2) |
+ |
+ bot.Clobber() |
+ tarball = 'cross_build_%s_%s.tar.bz2' % (arch, mode) |
+ try: |
+ test_args = [sys.executable, test_py, '--progress=line', '--report', |
+ '--time', '--mode=' + mode, '--arch=' + arch, '--compiler=none', |
+ '--runtime=vm', '--write-debug-log'] |
+ |
+ with bot.BuildStep('Fetch build tarball'): |
+ run([GSUTIL, 'cp', "%s/%s" % (GCS_BUCKET, tarball), tarball]) |
+ |
+ with bot.BuildStep('Unpack build tarball'): |
+ run(['tar', '-xjf', tarball]) |
+ |
+ with bot.BuildStep('tests'): |
+ run(test_args) |
+ |
+ with bot.BuildStep('checked_tests'): |
+ run(test_args + ['--checked']) |
+ finally: |
+ if os.path.exists(tarball): |
+ os.remove(tarball) |
+ else: |
+ raise Exception("Unknown builder name %s" % name) |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()) |