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