1#!/usr/bin/python2 2# 3# Copyright 2011 Google Inc. All Rights Reserved. 4"""Client for Android nightly jobs. 5 6Does the following jobs: 7 1. Checkout android toolchain sources 8 2. Build Android toolchain 9 3. Build Android tree 10 4. Checkout/build/run Android benchmarks (TODO) 11 5. Generate size/performance dashboard ? (TODO) 12""" 13 14__author__ = 'jingyu@google.com (Jing Yu)' 15 16import optparse 17import pickle 18import sys 19import xmlrpclib 20 21from automation.clients.helper import android 22from automation.common import job_group 23from automation.common import logger 24 25 26class AndroidToolchainNightlyClient(object): 27 VALID_GCC_VERSIONS = ['4.4.3', '4.6', 'google_main', 'fsf_trunk'] 28 29 def __init__(self, gcc_version, is_release): 30 assert gcc_version in self.VALID_GCC_VERSIONS 31 self.gcc_version = gcc_version 32 if is_release: 33 self.build_type = 'RELEASE' 34 else: 35 self.build_type = 'DEVELOPMENT' 36 37 def Run(self): 38 server = xmlrpclib.Server('http://localhost:8000') 39 server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup())) 40 41 def CreateJobGroup(self): 42 factory = android.JobsFactory(self.gcc_version, self.build_type) 43 44 p4_androidtc_job, checkout_dir_dep = factory.CheckoutAndroidToolchain() 45 46 tc_build_job, tc_prefix_dep = factory.BuildAndroidToolchain( 47 checkout_dir_dep) 48 49 tree_build_job = factory.BuildAndroidImage(tc_prefix_dep) 50 51 benchmark_job = factory.Benchmark(tc_prefix_dep) 52 53 all_jobs = [p4_androidtc_job, tc_build_job, tree_build_job, benchmark_job] 54 55 return job_group.JobGroup('androidtoolchain_nightly', all_jobs, True, False) 56 57 58@logger.HandleUncaughtExceptions 59def Main(argv): 60 valid_gcc_versions_string = ', '.join( 61 AndroidToolchainNightlyClient.VALID_GCC_VERSIONS) 62 63 parser = optparse.OptionParser() 64 parser.add_option('--with-gcc-version', 65 dest='gcc_version', 66 default='4.6', 67 action='store', 68 choices=AndroidToolchainNightlyClient.VALID_GCC_VERSIONS, 69 help='gcc version: %s.' % valid_gcc_versions_string) 70 parser.add_option('-r', 71 '--release', 72 dest='is_release', 73 default=False, 74 action='store_true', 75 help='Build a release toolchain?') 76 options, _ = parser.parse_args(argv) 77 78 option_list = [opt.dest for opt in parser.option_list if opt.dest] 79 80 kwargs = dict((option, getattr(options, option)) for option in option_list) 81 82 client = AndroidToolchainNightlyClient(**kwargs) 83 client.Run() 84 85 86if __name__ == '__main__': 87 Main(sys.argv) 88