aboutsummaryrefslogtreecommitdiff
path: root/deprecated/automation/clients/crosstool.py
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/automation/clients/crosstool.py')
-rwxr-xr-xdeprecated/automation/clients/crosstool.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/deprecated/automation/clients/crosstool.py b/deprecated/automation/clients/crosstool.py
new file mode 100755
index 00000000..9ba83807
--- /dev/null
+++ b/deprecated/automation/clients/crosstool.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python2
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import logging
+import optparse
+import pickle
+import sys
+import xmlrpclib
+
+from automation.clients.helper import crosstool
+from automation.common import job_group
+from automation.common import logger
+
+
+class CrosstoolNightlyClient(object):
+ VALID_TARGETS = ['gcc-4.6.x-ubuntu_lucid-arm',
+ 'gcc-4.6.x-ubuntu_lucid-x86_64',
+ 'gcc-4.6.x-grtev2-armv7a-vfpv3.d16-hard',
+ 'gcc-4.6.x-glibc-2.11.1-grte',
+ 'gcc-4.6.x-glibc-2.11.1-powerpc']
+ VALID_BOARDS = ['qemu', 'pandaboard', 'unix']
+
+ def __init__(self, target, boards):
+ assert target in self.VALID_TARGETS
+ assert all(board in self.VALID_BOARDS for board in boards)
+
+ self._target = target
+ self._boards = boards
+
+ def Run(self):
+ server = xmlrpclib.Server('http://localhost:8000')
+ server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup()))
+
+ def CreateJobGroup(self):
+ factory = crosstool.JobsFactory()
+
+ checkout_crosstool_job, checkout_dir, manifests_dir = \
+ factory.CheckoutCrosstool(self._target)
+
+ all_jobs = [checkout_crosstool_job]
+
+ # Build crosstool target
+ build_release_job, build_tree_dir = factory.BuildRelease(checkout_dir,
+ self._target)
+ all_jobs.append(build_release_job)
+
+ testruns = []
+
+ # Perform crosstool tests
+ for board in self._boards:
+ for component in ('gcc', 'binutils'):
+ test_job, testrun_dir = factory.RunTests(checkout_dir, build_tree_dir,
+ self._target, board, component)
+ all_jobs.append(test_job)
+ testruns.append(testrun_dir)
+
+ if testruns:
+ all_jobs.append(factory.GenerateReport(testruns, manifests_dir,
+ self._target, self._boards))
+
+ return job_group.JobGroup('Crosstool Nightly Build (%s)' % self._target,
+ all_jobs, True, False)
+
+
+@logger.HandleUncaughtExceptions
+def Main(argv):
+ valid_boards_string = ', '.join(CrosstoolNightlyClient.VALID_BOARDS)
+
+ parser = optparse.OptionParser()
+ parser.add_option(
+ '-b',
+ '--board',
+ dest='boards',
+ action='append',
+ choices=CrosstoolNightlyClient.VALID_BOARDS,
+ default=[],
+ help=('Run DejaGNU tests on selected boards: %s.' % valid_boards_string))
+ options, args = parser.parse_args(argv)
+
+ if len(args) == 2:
+ target = args[1]
+ else:
+ logging.error('Exactly one target required as a command line argument!')
+ logging.info('List of valid targets:')
+ for pair in enumerate(CrosstoolNightlyClient.VALID_TARGETS, start=1):
+ logging.info('%d) %s', pair)
+ sys.exit(1)
+
+ option_list = [opt.dest for opt in parser.option_list if opt.dest]
+
+ kwargs = dict((option, getattr(options, option)) for option in option_list)
+
+ client = CrosstoolNightlyClient(target, **kwargs)
+ client.Run()
+
+
+if __name__ == '__main__':
+ logger.SetUpRootLogger(level=logging.DEBUG, display_flags={'name': False})
+ Main(sys.argv)