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