| #!/usr/bin/python |
| # |
| # 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) |