You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.1 KiB
102 lines
3.1 KiB
#!/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)
|
|
|