#!/usr/bin/python
#
# Copyright 2011 Google Inc. All Rights Reserved.
"""Client for Android nightly jobs.
Does the following jobs:
1. Checkout android toolchain sources
2. Build Android toolchain
3. Build Android tree
4. Checkout/build/run Android benchmarks (TODO)
5. Generate size/performance dashboard ? (TODO)
"""
__author__ = 'jingyu@google.com (Jing Yu)'
import optparse
import pickle
import sys
import xmlrpclib
from automation.clients.helper import android
from automation.common import job_group
from automation.common import logger
class AndroidToolchainNightlyClient(object):
VALID_GCC_VERSIONS = ['4.4.3', '4.6', 'google_main', 'fsf_trunk']
def __init__(self, gcc_version, is_release):
assert gcc_version in self.VALID_GCC_VERSIONS
self.gcc_version = gcc_version
if is_release:
self.build_type = 'RELEASE'
else:
self.build_type = 'DEVELOPMENT'
def Run(self):
server = xmlrpclib.Server('http://localhost:8000')
server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup()))
def CreateJobGroup(self):
factory = android.JobsFactory(self.gcc_version, self.build_type)
p4_androidtc_job, checkout_dir_dep = factory.CheckoutAndroidToolchain()
tc_build_job, tc_prefix_dep = factory.BuildAndroidToolchain(
checkout_dir_dep)
tree_build_job = factory.BuildAndroidImage(tc_prefix_dep)
benchmark_job = factory.Benchmark(tc_prefix_dep)
all_jobs = [p4_androidtc_job, tc_build_job, tree_build_job, benchmark_job]
return job_group.JobGroup('androidtoolchain_nightly', all_jobs, True, False)
@logger.HandleUncaughtExceptions
def Main(argv):
valid_gcc_versions_string = ', '.join(
AndroidToolchainNightlyClient.VALID_GCC_VERSIONS)
parser = optparse.OptionParser()
parser.add_option('--with-gcc-version',
dest='gcc_version',
default='4.6',
action='store',
choices=AndroidToolchainNightlyClient.VALID_GCC_VERSIONS,
help='gcc version: %s.' % valid_gcc_versions_string)
parser.add_option('-r',
'--release',
dest='is_release',
default=False,
action='store_true',
help='Build a release toolchain?')
options, _ = parser.parse_args(argv)
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 = AndroidToolchainNightlyClient(**kwargs)
client.Run()
if __name__ == '__main__':
Main(sys.argv)