Index: build/android/buildbot/bb_host_steps.py |
diff --git a/build/android/buildbot/bb_host_steps.py b/build/android/buildbot/bb_host_steps.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..1e927fb399ddd2bd61badd428c8f9597c3056bfd |
--- /dev/null |
+++ b/build/android/buildbot/bb_host_steps.py |
@@ -0,0 +1,133 @@ |
+#!/usr/bin/env python |
+# Copyright 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import os |
+import json |
+import sys |
+ |
+import bb_utils |
+import bb_annotations |
+ |
+sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
+from pylib import constants |
+ |
+ |
+SLAVE_SCRIPTS_DIR = os.path.join(bb_utils.BB_BUILD_DIR, 'scripts', 'slave') |
+VALID_HOST_TESTS = set(['check_webview_licenses']) |
+ |
+DIR_BUILD_ROOT = os.path.dirname(constants.DIR_SOURCE_ROOT) |
+ |
+# Short hand for RunCmd which is used extensively in this file. |
+RunCmd = bb_utils.RunCmd |
+ |
+ |
+def SrcPath(*path): |
+ return os.path.join(constants.DIR_SOURCE_ROOT, *path) |
+ |
+ |
+def CheckWebViewLicenses(_): |
+ bb_annotations.PrintNamedStep('check_licenses') |
+ RunCmd([SrcPath('android_webview', 'tools', 'webview_licenses.py'), 'scan'], |
+ warning_code=1) |
+ |
+ |
+def RunHooks(build_type): |
+ RunCmd([SrcPath('build', 'landmines.py')]) |
+ build_path = SrcPath('out', build_type) |
+ landmine_path = os.path.join(build_path, '.landmines_triggered') |
+ clobber_env = os.environ.get('BUILDBOT_CLOBBER') |
+ if clobber_env or os.path.isfile(landmine_path): |
+ bb_annotations.PrintNamedStep('Clobber') |
+ if not clobber_env: |
+ print 'Clobbering due to triggered landmines:' |
+ with open(landmine_path) as f: |
+ print f.read() |
+ RunCmd(['rm', '-rf', build_path]) |
+ |
+ bb_annotations.PrintNamedStep('runhooks') |
+ RunCmd(['gclient', 'runhooks'], halt_on_failure=True) |
+ |
+ |
+def Compile(options): |
+ RunHooks(options.target) |
+ cmd = [os.path.join(SLAVE_SCRIPTS_DIR, 'compile.py'), |
+ '--build-tool=ninja', |
+ '--compiler=goma', |
+ '--target=%s' % options.target, |
+ '--goma-dir=%s' % bb_utils.GOMA_DIR] |
+ bb_annotations.PrintNamedStep('compile') |
+ if options.build_targets: |
+ build_targets = options.build_targets.split(',') |
+ cmd += ['--build-args', ' '.join(build_targets)] |
+ RunCmd(cmd, halt_on_failure=True, cwd=DIR_BUILD_ROOT) |
+ |
+ |
+def ZipBuild(options): |
+ bb_annotations.PrintNamedStep('zip_build') |
+ RunCmd([ |
+ os.path.join(SLAVE_SCRIPTS_DIR, 'zip_build.py'), |
+ '--src-dir', constants.DIR_SOURCE_ROOT, |
+ '--exclude-files', 'lib.target,gen,android_webview,jingle_unittests'] |
+ + bb_utils.EncodeProperties(options), cwd=DIR_BUILD_ROOT) |
+ |
+ |
+def ExtractBuild(options): |
+ bb_annotations.PrintNamedStep('extract_build') |
+ RunCmd([os.path.join(SLAVE_SCRIPTS_DIR, 'extract_build.py')] |
+ + bb_utils.EncodeProperties(options), cwd=DIR_BUILD_ROOT) |
+ |
+ |
+def BisectPerfRegression(options): |
+ args = [] |
+ if options.extra_src: |
+ args = ['--extra_src', options.extra_src] |
+ RunCmd([SrcPath('tools', 'prepare-bisect-perf-regression.py'), |
+ '-w', os.path.join(constants.DIR_SOURCE_ROOT, os.pardir)]) |
+ RunCmd([SrcPath('tools', 'run-bisect-perf-regression.py'), |
+ '-w', os.path.join(constants.DIR_SOURCE_ROOT, os.pardir), |
+ '--build-properties=%s' % json.dumps(options.build_properties)] + |
+ args) |
+ |
+ |
+def GetHostStepCmds(): |
+ return [ |
+ ('compile', Compile), |
+ ('extract_build', ExtractBuild), |
+ ('check_webview_licenses', CheckWebViewLicenses), |
+ ('bisect_perf_regression', BisectPerfRegression), |
+ ('zip_build', ZipBuild) |
+ ] |
+ |
+ |
+def GetHostStepsOptParser(): |
+ parser = bb_utils.GetParser() |
+ parser.add_option('--steps', help='Comma separated list of host tests.') |
+ parser.add_option('--build-targets', default='', |
+ help='Comma separated list of build targets.') |
+ parser.add_option('--experimental', action='store_true', |
+ help='Indicate whether to compile experimental targets.') |
+ parser.add_option('--extra_src', default='', |
+ help='Path to extra source file. If this is supplied, ' |
+ 'bisect script will use it to override default behavior.') |
+ |
+ return parser |
+ |
+ |
+def main(argv): |
+ parser = GetHostStepsOptParser() |
+ options, args = parser.parse_args(argv[1:]) |
+ if args: |
+ return sys.exit('Unused args %s' % args) |
+ |
+ setattr(options, 'target', options.factory_properties.get('target', 'Debug')) |
+ setattr(options, 'extra_src', |
+ options.factory_properties.get('extra_src', '')) |
+ |
+ if options.steps: |
+ bb_utils.RunSteps(options.steps.split(','), GetHostStepCmds(), options) |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main(sys.argv)) |