Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / build / android / buildbot / bb_host_steps.py
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 import os
7 import sys
8
9 import bb_utils
10 import bb_annotations
11
12 sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
13 from pylib import constants
14
15
16 SLAVE_SCRIPTS_DIR = os.path.join(bb_utils.BB_BUILD_DIR, 'scripts', 'slave')
17 VALID_HOST_TESTS = set(['check_webview_licenses', 'findbugs'])
18
19 DIR_BUILD_ROOT = os.path.dirname(constants.DIR_SOURCE_ROOT)
20
21 # Short hand for RunCmd which is used extensively in this file.
22 RunCmd = bb_utils.RunCmd
23
24
25 def SrcPath(*path):
26   return os.path.join(constants.DIR_SOURCE_ROOT, *path)
27
28
29 def CheckWebViewLicenses(_):
30   bb_annotations.PrintNamedStep('check_licenses')
31   RunCmd([SrcPath('android_webview', 'tools', 'webview_licenses.py'), 'scan'],
32          warning_code=1)
33
34
35 def RunHooks(build_type):
36   RunCmd([SrcPath('build', 'landmines.py')])
37   build_path = SrcPath('out', build_type)
38   landmine_path = os.path.join(build_path, '.landmines_triggered')
39   clobber_env = os.environ.get('BUILDBOT_CLOBBER')
40   if clobber_env or os.path.isfile(landmine_path):
41     bb_annotations.PrintNamedStep('Clobber')
42     if not clobber_env:
43       print 'Clobbering due to triggered landmines:'
44       with open(landmine_path) as f:
45         print f.read()
46     RunCmd(['rm', '-rf', build_path])
47
48   bb_annotations.PrintNamedStep('runhooks')
49   RunCmd(['gclient', 'runhooks'], halt_on_failure=True)
50
51
52 def Compile(options):
53   RunHooks(options.target)
54   cmd = [os.path.join(SLAVE_SCRIPTS_DIR, 'compile.py'),
55          '--build-tool=ninja',
56          '--compiler=goma',
57          '--target=%s' % options.target,
58          '--goma-dir=%s' % bb_utils.GOMA_DIR]
59   bb_annotations.PrintNamedStep('compile')
60   if options.build_targets:
61     build_targets = options.build_targets.split(',')
62     cmd += ['--build-args', ' '.join(build_targets)]
63   RunCmd(cmd, halt_on_failure=True, cwd=DIR_BUILD_ROOT)
64
65
66 def ZipBuild(options):
67   bb_annotations.PrintNamedStep('zip_build')
68   RunCmd([
69       os.path.join(SLAVE_SCRIPTS_DIR, 'zip_build.py'),
70       '--src-dir', constants.DIR_SOURCE_ROOT,
71       '--exclude-files', 'lib.target,gen,android_webview,jingle_unittests']
72       + bb_utils.EncodeProperties(options), cwd=DIR_BUILD_ROOT)
73
74
75 def ExtractBuild(options):
76   bb_annotations.PrintNamedStep('extract_build')
77   RunCmd([os.path.join(SLAVE_SCRIPTS_DIR, 'extract_build.py')]
78          + bb_utils.EncodeProperties(options),
79          warning_code=1, cwd=DIR_BUILD_ROOT)
80
81
82 def FindBugs(options):
83   bb_annotations.PrintNamedStep('findbugs')
84   build_type = []
85   if options.target == 'Release':
86     build_type = ['--release-build']
87   RunCmd([SrcPath('build', 'android', 'findbugs_diff.py')] + build_type)
88   RunCmd([SrcPath(
89       'tools', 'android', 'findbugs_plugin', 'test',
90       'run_findbugs_plugin_tests.py')] + build_type)
91
92
93 def BisectPerfRegression(_):
94   RunCmd([SrcPath('tools', 'prepare-bisect-perf-regression.py'),
95           '-w', os.path.join(constants.DIR_SOURCE_ROOT, os.pardir)])
96   RunCmd([SrcPath('tools', 'run-bisect-perf-regression.py'),
97           '-w', os.path.join(constants.DIR_SOURCE_ROOT, os.pardir)])
98
99
100 def GetHostStepCmds():
101   return [
102       ('compile', Compile),
103       ('extract_build', ExtractBuild),
104       ('check_webview_licenses', CheckWebViewLicenses),
105       ('bisect_perf_regression', BisectPerfRegression),
106       ('findbugs', FindBugs),
107       ('zip_build', ZipBuild)
108   ]
109
110
111 def GetHostStepsOptParser():
112   parser = bb_utils.GetParser()
113   parser.add_option('--steps', help='Comma separated list of host tests.')
114   parser.add_option('--build-targets', default='',
115                     help='Comma separated list of build targets.')
116   parser.add_option('--experimental', action='store_true',
117                     help='Indicate whether to compile experimental targets.')
118
119   return parser
120
121
122 def main(argv):
123   parser = GetHostStepsOptParser()
124   options, args = parser.parse_args(argv[1:])
125   if args:
126     return sys.exit('Unused args %s' % args)
127
128   setattr(options, 'target', options.factory_properties.get('target', 'Debug'))
129
130   if options.steps:
131     bb_utils.RunSteps(options.steps.split(','), GetHostStepCmds(), options)
132
133
134 if __name__ == '__main__':
135   sys.exit(main(sys.argv))