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