OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 """A tool to build chrome, executed by buildbot. | 6 """A tool to build chrome, executed by buildbot. |
7 | 7 |
8 When this is run, the current directory (cwd) should be the outer build | 8 When this is run, the current directory (cwd) should be the outer build |
9 directory (e.g., chrome-release/build/). | 9 directory (e.g., chrome-release/build/). |
10 | 10 |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 goma_ctl_cmd + ['jsonstatus', options.goma_jsonstatus], env=env) | 192 goma_ctl_cmd + ['jsonstatus', options.goma_jsonstatus], env=env) |
193 goma_utils.SendGomaTsMon(options.goma_jsonstatus, -1) | 193 goma_utils.SendGomaTsMon(options.goma_jsonstatus, -1) |
194 | 194 |
195 # Try to stop compiler_proxy so that it flushes logs and stores | 195 # Try to stop compiler_proxy so that it flushes logs and stores |
196 # GomaStats. | 196 # GomaStats. |
197 if options.build_data_dir: | 197 if options.build_data_dir: |
198 env['GOMACTL_CRASH_REPORT_ID_FILE'] = os.path.join(options.build_data_dir, | 198 env['GOMACTL_CRASH_REPORT_ID_FILE'] = os.path.join(options.build_data_dir, |
199 'crash_report_id_file') | 199 'crash_report_id_file') |
200 chromium_utils.RunCommand(goma_ctl_cmd + ['stop'], env=env) | 200 chromium_utils.RunCommand(goma_ctl_cmd + ['stop'], env=env) |
201 | 201 |
| 202 override_gsutil = None |
| 203 if options.gsutil_py_path: |
| 204 override_gsutil = [sys.executable, options.gsutil_py_path] |
| 205 |
202 # Upload compiler_proxy.INFO to investigate the reason of compiler_proxy | 206 # Upload compiler_proxy.INFO to investigate the reason of compiler_proxy |
203 # start-up failure. | 207 # start-up failure. |
204 goma_utils.UploadGomaCompilerProxyInfo() | 208 goma_utils.UploadGomaCompilerProxyInfo(override_gsutil=override_gsutil) |
205 # Upload GomaStats to make it monitored. | 209 # Upload GomaStats to make it monitored. |
206 if env.get('GOMA_DUMP_STATS_FILE'): | 210 if env.get('GOMA_DUMP_STATS_FILE'): |
207 goma_utils.SendGomaStats(env['GOMA_DUMP_STATS_FILE'], | 211 goma_utils.SendGomaStats(env['GOMA_DUMP_STATS_FILE'], |
208 env.get('GOMACTL_CRASH_REPORT_ID_FILE'), | 212 env.get('GOMACTL_CRASH_REPORT_ID_FILE'), |
209 options.build_data_dir) | 213 options.build_data_dir) |
210 | 214 |
211 if options.goma_disable_local_fallback: | 215 if options.goma_disable_local_fallback: |
212 print 'error: failed to start goma; fallback has been disabled' | 216 print 'error: failed to start goma; fallback has been disabled' |
213 raise Exception('failed to start goma') | 217 raise Exception('failed to start goma') |
214 | 218 |
215 print 'warning: failed to start goma. falling back to non-goma' | 219 print 'warning: failed to start goma. falling back to non-goma' |
216 # Drop goma from options.compiler | 220 # Drop goma from options.compiler |
217 options.compiler = options.compiler.replace('goma-', '') | 221 options.compiler = options.compiler.replace('goma-', '') |
218 if options.compiler == 'goma': | 222 if options.compiler == 'goma': |
219 options.compiler = None | 223 options.compiler = None |
220 # Reset options.goma_dir. | 224 # Reset options.goma_dir. |
221 options.goma_dir = None | 225 options.goma_dir = None |
222 env['GOMA_DISABLED'] = '1' | 226 env['GOMA_DISABLED'] = '1' |
223 return False | 227 return False |
224 | 228 |
225 | 229 |
226 def goma_teardown(options, env, exit_status): | 230 def goma_teardown(options, env, exit_status): |
227 """Tears down goma if necessary. """ | 231 """Tears down goma if necessary. """ |
228 if (options.compiler in ('goma', 'goma-clang') and | 232 if (options.compiler in ('goma', 'goma-clang') and |
229 options.goma_dir): | 233 options.goma_dir): |
| 234 override_gsutil = None |
| 235 if options.gsutil_py_path: |
| 236 override_gsutil = [sys.executable, options.gsutil_py_path] |
| 237 |
230 # If goma compiler_proxy crashes during the build, there could be crash | 238 # If goma compiler_proxy crashes during the build, there could be crash |
231 # dump. | 239 # dump. |
232 if options.build_data_dir: | 240 if options.build_data_dir: |
233 env['GOMACTL_CRASH_REPORT_ID_FILE'] = os.path.join(options.build_data_dir, | 241 env['GOMACTL_CRASH_REPORT_ID_FILE'] = os.path.join(options.build_data_dir, |
234 'crash_report_id_file') | 242 'crash_report_id_file') |
235 goma_ctl_cmd = [sys.executable, | 243 goma_ctl_cmd = [sys.executable, |
236 os.path.join(options.goma_dir, 'goma_ctl.py')] | 244 os.path.join(options.goma_dir, 'goma_ctl.py')] |
237 if options.goma_jsonstatus: | 245 if options.goma_jsonstatus: |
238 chromium_utils.RunCommand( | 246 chromium_utils.RunCommand( |
239 goma_ctl_cmd + ['jsonstatus', options.goma_jsonstatus], env=env) | 247 goma_ctl_cmd + ['jsonstatus', options.goma_jsonstatus], env=env) |
240 goma_utils.SendGomaTsMon(options.goma_jsonstatus, exit_status) | 248 goma_utils.SendGomaTsMon(options.goma_jsonstatus, exit_status) |
241 # Always stop the proxy for now to allow in-place update. | 249 # Always stop the proxy for now to allow in-place update. |
242 chromium_utils.RunCommand(goma_ctl_cmd + ['stop'], env=env) | 250 chromium_utils.RunCommand(goma_ctl_cmd + ['stop'], env=env) |
243 goma_utils.UploadGomaCompilerProxyInfo() | 251 goma_utils.UploadGomaCompilerProxyInfo(override_gsutil=override_gsutil) |
244 if env.get('GOMA_DUMP_STATS_FILE'): | 252 if env.get('GOMA_DUMP_STATS_FILE'): |
245 goma_utils.SendGomaStats(env['GOMA_DUMP_STATS_FILE'], | 253 goma_utils.SendGomaStats(env['GOMA_DUMP_STATS_FILE'], |
246 env.get('GOMACTL_CRASH_REPORT_ID_FILE'), | 254 env.get('GOMACTL_CRASH_REPORT_ID_FILE'), |
247 options.build_data_dir) | 255 options.build_data_dir) |
248 | 256 |
249 | 257 |
250 def common_xcode_settings(command, options, env, compiler=None): | 258 def common_xcode_settings(command, options, env, compiler=None): |
251 """ | 259 """ |
252 Sets desirable Mac environment variables and command-line options | 260 Sets desirable Mac environment variables and command-line options |
253 that are common to the Xcode builds. | 261 that are common to the Xcode builds. |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 if not filter_obj.was_up_to_date: | 960 if not filter_obj.was_up_to_date: |
953 print 'Failing build because ninja reported work to do.' | 961 print 'Failing build because ninja reported work to do.' |
954 print 'This means that after completing a compile, another was run and' | 962 print 'This means that after completing a compile, another was run and' |
955 print 'it resulted in still having work to do (that is, a no-op build' | 963 print 'it resulted in still having work to do (that is, a no-op build' |
956 print 'wasn\'t a no-op). Consult the first "ninja explain:" line for a' | 964 print 'wasn\'t a no-op). Consult the first "ninja explain:" line for a' |
957 print 'likely culprit.' | 965 print 'likely culprit.' |
958 return 1 | 966 return 1 |
959 return exit_status | 967 return exit_status |
960 finally: | 968 finally: |
961 goma_teardown(options, env, exit_status) | 969 goma_teardown(options, env, exit_status) |
| 970 |
| 971 override_gsutil = None |
| 972 if options.gsutil_py_path: |
| 973 override_gsutil = [sys.executable, options.gsutil_py_path] |
| 974 |
962 goma_utils.UploadNinjaLog( | 975 goma_utils.UploadNinjaLog( |
963 options.target_output_dir, options.compiler, command, exit_status) | 976 options.target_output_dir, options.compiler, command, exit_status, |
| 977 override_gsutil=override_gsutil) |
964 | 978 |
965 | 979 |
966 def main_win(options, args): | 980 def main_win(options, args): |
967 """Interprets options, clobbers object files, and calls the build tool. | 981 """Interprets options, clobbers object files, and calls the build tool. |
968 """ | 982 """ |
969 if not options.solution: | 983 if not options.solution: |
970 options.solution = 'all.sln' | 984 options.solution = 'all.sln' |
971 solution = os.path.join(options.build_dir, options.solution) | 985 solution = os.path.join(options.build_dir, options.solution) |
972 | 986 |
973 # Prefer the version specified in the .sln. When devenv.com is used at the | 987 # Prefer the version specified in the .sln. When devenv.com is used at the |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1245 option_parser.add_option('--goma-enable-compiler-info-cache', | 1259 option_parser.add_option('--goma-enable-compiler-info-cache', |
1246 action='store_true', | 1260 action='store_true', |
1247 help='Enable goma CompilerInfo cache') | 1261 help='Enable goma CompilerInfo cache') |
1248 option_parser.add_option('--goma-store-local-run-output', default=None, | 1262 option_parser.add_option('--goma-store-local-run-output', default=None, |
1249 help='Store local run output to goma servers.') | 1263 help='Store local run output to goma servers.') |
1250 option_parser.add_option('--goma-fail-fast', action='store_true') | 1264 option_parser.add_option('--goma-fail-fast', action='store_true') |
1251 option_parser.add_option('--goma-disable-local-fallback', action='store_true') | 1265 option_parser.add_option('--goma-disable-local-fallback', action='store_true') |
1252 option_parser.add_option('--goma-jsonstatus', | 1266 option_parser.add_option('--goma-jsonstatus', |
1253 help='Specify a file to dump goma_ctl jsonstatus.') | 1267 help='Specify a file to dump goma_ctl jsonstatus.') |
1254 option_parser.add_option('--verbose', action='store_true') | 1268 option_parser.add_option('--verbose', action='store_true') |
| 1269 option_parser.add_option('--gsutil-py-path', |
| 1270 help='Specify path to gsutil.py script.') |
1255 option_parser.add_option('--ninja-path', default='ninja', | 1271 option_parser.add_option('--ninja-path', default='ninja', |
1256 help='Specify path to the ninja tool.') | 1272 help='Specify path to the ninja tool.') |
1257 option_parser.add_option('--ninja-ensure-up-to-date', action='store_true', | 1273 option_parser.add_option('--ninja-ensure-up-to-date', action='store_true', |
1258 help='Checks the output of the ninja builder to ' | 1274 help='Checks the output of the ninja builder to ' |
1259 'confirm that a second compile immediately ' | 1275 'confirm that a second compile immediately ' |
1260 'the first is a no-op.') | 1276 'the first is a no-op.') |
1261 | 1277 |
1262 options, args = option_parser.parse_args() | 1278 options, args = option_parser.parse_args() |
1263 | 1279 |
1264 if not options.src_dir: | 1280 if not options.src_dir: |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1329 sys.stderr.write('Unknown build tool %s.\n' % repr(options.build_tool)) | 1345 sys.stderr.write('Unknown build tool %s.\n' % repr(options.build_tool)) |
1330 return 2 | 1346 return 2 |
1331 | 1347 |
1332 options.target_output_dir = get_target_build_dir(args, options) | 1348 options.target_output_dir = get_target_build_dir(args, options) |
1333 | 1349 |
1334 return main(options, args) | 1350 return main(options, args) |
1335 | 1351 |
1336 | 1352 |
1337 if '__main__' == __name__: | 1353 if '__main__' == __name__: |
1338 sys.exit(real_main()) | 1354 sys.exit(real_main()) |
OLD | NEW |