blob: 6bc89fdac0e57b2388e4f63a6f00001908163882 [file] [log] [blame]
Yunlian Jiang14cf5962015-12-11 15:50:14 -08001#!/usr/bin/python2
2"""Script for running nightly compiler tests on ChromeOS.
cmtice46093e52014-12-09 14:59:16 -08003
4This script launches a buildbot to build ChromeOS with the latest compiler on
5a particular board; then it finds and downloads the trybot image and the
6corresponding official image, and runs crosperf performance tests comparing
7the two. It then generates a report, emails it to the c-compiler-chrome, as
8well as copying the images into the seven-day reports directory.
9"""
10
11# Script to test different toolchains against ChromeOS benchmarks.
Yunlian Jiang14cf5962015-12-11 15:50:14 -080012
13from __future__ import print_function
14
Caroline Ticeeddb0632016-04-14 09:19:02 -070015import argparse
cmticece5ffa42015-02-12 15:18:43 -080016import datetime
cmtice46093e52014-12-09 14:59:16 -080017import os
Luis Lozanoc75fd052016-02-19 17:37:01 -080018import re
cmtice46093e52014-12-09 14:59:16 -080019import sys
20import time
cmtice46093e52014-12-09 14:59:16 -080021
Caroline Ticea8af9a72016-07-20 12:52:59 -070022from cros_utils import command_executer
23from cros_utils import logger
cmtice46093e52014-12-09 14:59:16 -080024
Caroline Ticea8af9a72016-07-20 12:52:59 -070025from cros_utils import buildbot_utils
cmtice46093e52014-12-09 14:59:16 -080026
27# CL that updated GCC ebuilds to use 'next_gcc'.
Luis Lozanof2a3ef42015-12-15 13:49:30 -080028USE_NEXT_GCC_PATCH = '230260'
Yunlian Jiang3c6e4672015-08-24 15:58:22 -070029
Yunlian Jiang2f563562015-08-28 13:54:04 -070030# CL that uses LLVM to build the peppy image.
Luis Lozanof2a3ef42015-12-15 13:49:30 -080031USE_LLVM_PATCH = '295217'
Yunlian Jiang2f563562015-08-28 13:54:04 -070032
Yunlian Jiang3c6e4672015-08-24 15:58:22 -070033# The boards on which we run weekly reports
Luis Lozanof2a3ef42015-12-15 13:49:30 -080034WEEKLY_REPORT_BOARDS = ['lumpy']
cmtice46093e52014-12-09 14:59:16 -080035
Luis Lozanof2a3ef42015-12-15 13:49:30 -080036CROSTC_ROOT = '/usr/local/google/crostc'
37ROLE_ACCOUNT = 'mobiletc-prebuild'
cmtice46093e52014-12-09 14:59:16 -080038TOOLCHAIN_DIR = os.path.dirname(os.path.realpath(__file__))
Luis Lozanof2a3ef42015-12-15 13:49:30 -080039MAIL_PROGRAM = '~/var/bin/mail-sheriff'
40WEEKLY_REPORTS_ROOT = os.path.join(CROSTC_ROOT, 'weekly_test_data')
41PENDING_ARCHIVES_DIR = os.path.join(CROSTC_ROOT, 'pending_archives')
42NIGHTLY_TESTS_DIR = os.path.join(CROSTC_ROOT, 'nightly_test_reports')
43
Luis Lozanoc75fd052016-02-19 17:37:01 -080044IMAGE_FS = (r'{board}-{image_type}/{chrome_version}-{tip}\.' +
45 r'{branch}\.{branch_branch}')
46TRYBOT_IMAGE_FS = 'trybot-' + IMAGE_FS + '-{build_id}'
47PFQ_IMAGE_FS = IMAGE_FS + '-rc1'
Manoj Guptaaee96b72016-10-24 13:43:28 -070048IMAGE_RE_GROUPS = {
49 'board': r'(?P<board>\S+)',
50 'image_type': r'(?P<image_type>\S+)',
51 'chrome_version': r'(?P<chrome_version>R\d+)',
52 'tip': r'(?P<tip>\d+)',
53 'branch': r'(?P<branch>\d+)',
54 'branch_branch': r'(?P<branch_branch>\d+)',
55 'build_id': r'(?P<build_id>b\d+)'
56}
Luis Lozanoc75fd052016-02-19 17:37:01 -080057TRYBOT_IMAGE_RE = TRYBOT_IMAGE_FS.format(**IMAGE_RE_GROUPS)
58
cmtice46093e52014-12-09 14:59:16 -080059
Yunlian Jiang14cf5962015-12-11 15:50:14 -080060class ToolchainComparator(object):
61 """Class for doing the nightly tests work."""
cmtice46093e52014-12-09 14:59:16 -080062
Luis Lozanof2a3ef42015-12-15 13:49:30 -080063 def __init__(self,
64 board,
65 remotes,
66 chromeos_root,
67 weekday,
68 patches,
69 noschedv2=False):
cmtice46093e52014-12-09 14:59:16 -080070 self._board = board
71 self._remotes = remotes
72 self._chromeos_root = chromeos_root
73 self._base_dir = os.getcwd()
74 self._ce = command_executer.GetCommandExecuter()
75 self._l = logger.GetLogger()
Luis Lozanof2a3ef42015-12-15 13:49:30 -080076 self._build = '%s-release' % board
Yunlian Jiang3c6e4672015-08-24 15:58:22 -070077 self._patches = patches.split(',')
78 self._patches_string = '_'.join(str(p) for p in self._patches)
Han Shen43494292015-09-14 10:26:40 -070079 self._noschedv2 = noschedv2
Yunlian Jiang3c6e4672015-08-24 15:58:22 -070080
cmtice46093e52014-12-09 14:59:16 -080081 if not weekday:
Luis Lozanof2a3ef42015-12-15 13:49:30 -080082 self._weekday = time.strftime('%a')
cmtice46093e52014-12-09 14:59:16 -080083 else:
84 self._weekday = weekday
cmtice7f3190b2015-05-22 14:14:51 -070085 timestamp = datetime.datetime.strftime(datetime.datetime.now(),
Luis Lozanof2a3ef42015-12-15 13:49:30 -080086 '%Y-%m-%d_%H:%M:%S')
Manoj Guptaaee96b72016-10-24 13:43:28 -070087 self._reports_dir = os.path.join(
88 NIGHTLY_TESTS_DIR,
89 '%s.%s' % (timestamp, board),)
cmtice46093e52014-12-09 14:59:16 -080090
Luis Lozanoc75fd052016-02-19 17:37:01 -080091 def _GetVanillaImageName(self, trybot_image):
92 """Given a trybot artifact name, get corresponding vanilla image name.
cmtice46093e52014-12-09 14:59:16 -080093
Luis Lozano783954f2015-12-21 18:06:29 -080094 Args:
95 trybot_image: artifact name such as
96 'trybot-daisy-release/R40-6394.0.0-b1389'
97
98 Returns:
99 Corresponding official image name, e.g. 'daisy-release/R40-6394.0.0'.
cmtice46093e52014-12-09 14:59:16 -0800100 """
Luis Lozanoc75fd052016-02-19 17:37:01 -0800101 mo = re.search(TRYBOT_IMAGE_RE, trybot_image)
102 assert mo
103 return IMAGE_FS.replace('\\', '').format(**mo.groupdict())
cmtice46093e52014-12-09 14:59:16 -0800104
Luis Lozanoc75fd052016-02-19 17:37:01 -0800105 def _GetNonAFDOImageName(self, trybot_image):
106 """Given a trybot artifact name, get corresponding non-AFDO image name.
107
108 We get the non-AFDO image from the PFQ builders. This image
109 is not generated for all the boards and, the closest PFQ image
110 was the one build for the previous ChromeOS version (the chrome
111 used in the current version is the one validated in the previous
112 version).
113 The previous ChromeOS does not always exist either. So, we try
114 a couple of versions before.
Luis Lozano783954f2015-12-21 18:06:29 -0800115
116 Args:
117 trybot_image: artifact name such as
118 'trybot-daisy-release/R40-6394.0.0-b1389'
119
120 Returns:
121 Corresponding chrome PFQ image name, e.g.
Luis Lozanoc75fd052016-02-19 17:37:01 -0800122 'daisy-chrome-pfq/R40-6393.0.0-rc1'.
Luis Lozano783954f2015-12-21 18:06:29 -0800123 """
Luis Lozanoc75fd052016-02-19 17:37:01 -0800124 mo = re.search(TRYBOT_IMAGE_RE, trybot_image)
125 assert mo
126 image_dict = mo.groupdict()
127 image_dict['image_type'] = 'chrome-pfq'
128 for _ in xrange(2):
129 image_dict['tip'] = str(int(image_dict['tip']) - 1)
130 nonafdo_image = PFQ_IMAGE_FS.replace('\\', '').format(**image_dict)
131 if buildbot_utils.DoesImageExist(self._chromeos_root, nonafdo_image):
132 return nonafdo_image
133 return ''
Luis Lozano783954f2015-12-21 18:06:29 -0800134
cmtice46093e52014-12-09 14:59:16 -0800135 def _FinishSetup(self):
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800136 """Make sure testing_rsa file is properly set up."""
cmtice46093e52014-12-09 14:59:16 -0800137 # Fix protections on ssh key
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800138 command = ('chmod 600 /var/cache/chromeos-cache/distfiles/target'
139 '/chrome-src-internal/src/third_party/chromite/ssh_keys'
140 '/testing_rsa')
cmtice46093e52014-12-09 14:59:16 -0800141 ret_val = self._ce.ChrootRunCommand(self._chromeos_root, command)
cmtice7f3190b2015-05-22 14:14:51 -0700142 if ret_val != 0:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800143 raise RuntimeError('chmod for testing_rsa failed')
cmtice46093e52014-12-09 14:59:16 -0800144
Luis Lozano783954f2015-12-21 18:06:29 -0800145 def _TestImages(self, trybot_image, vanilla_image, nonafdo_image):
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800146 """Create crosperf experiment file.
cmtice46093e52014-12-09 14:59:16 -0800147
Luis Lozano783954f2015-12-21 18:06:29 -0800148 Given the names of the trybot, vanilla and non-AFDO images, create the
cmtice46093e52014-12-09 14:59:16 -0800149 appropriate crosperf experiment file and launch crosperf on it.
150 """
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800151 experiment_file_dir = os.path.join(self._chromeos_root, '..', self._weekday)
152 experiment_file_name = '%s_toolchain_experiment.txt' % self._board
Yunlian Jiang2f563562015-08-28 13:54:04 -0700153
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800154 compiler_string = 'gcc'
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800155 if USE_LLVM_PATCH in self._patches_string:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800156 experiment_file_name = '%s_llvm_experiment.txt' % self._board
157 compiler_string = 'llvm'
Yunlian Jiang2f563562015-08-28 13:54:04 -0700158
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800159 experiment_file = os.path.join(experiment_file_dir, experiment_file_name)
cmtice46093e52014-12-09 14:59:16 -0800160 experiment_header = """
161 board: %s
162 remote: %s
Luis Lozanoe1efeb82015-06-16 16:35:44 -0700163 retries: 1
cmtice46093e52014-12-09 14:59:16 -0800164 """ % (self._board, self._remotes)
165 experiment_tests = """
Luis Lozano1489d642015-12-08 10:08:19 -0800166 benchmark: all_toolchain_perf {
cmtice46093e52014-12-09 14:59:16 -0800167 suite: telemetry_Crosperf
168 iterations: 3
169 }
170 """
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800171
172 with open(experiment_file, 'w') as f:
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800173 f.write(experiment_header)
174 f.write(experiment_tests)
cmtice46093e52014-12-09 14:59:16 -0800175
176 # Now add vanilla to test file.
177 official_image = """
178 vanilla_image {
179 chromeos_root: %s
180 build: %s
Caroline Ticeddde5052015-09-23 09:43:35 -0700181 compiler: gcc
cmtice46093e52014-12-09 14:59:16 -0800182 }
183 """ % (self._chromeos_root, vanilla_image)
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800184 f.write(official_image)
cmtice46093e52014-12-09 14:59:16 -0800185
Luis Lozano783954f2015-12-21 18:06:29 -0800186 # Now add non-AFDO image to test file.
Luis Lozano439f2b72016-01-08 11:56:02 -0800187 if nonafdo_image:
188 official_nonafdo_image = """
Luis Lozano783954f2015-12-21 18:06:29 -0800189 nonafdo_image {
190 chromeos_root: %s
191 build: %s
192 compiler: gcc
193 }
194 """ % (self._chromeos_root, nonafdo_image)
Luis Lozano439f2b72016-01-08 11:56:02 -0800195 f.write(official_nonafdo_image)
Luis Lozano783954f2015-12-21 18:06:29 -0800196
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800197 label_string = '%s_trybot_image' % compiler_string
Caroline Tice80eab982015-11-04 14:03:14 -0800198 if USE_NEXT_GCC_PATCH in self._patches:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800199 label_string = 'gcc_next_trybot_image'
Caroline Tice80eab982015-11-04 14:03:14 -0800200
cmtice46093e52014-12-09 14:59:16 -0800201 experiment_image = """
Caroline Tice80eab982015-11-04 14:03:14 -0800202 %s {
cmtice46093e52014-12-09 14:59:16 -0800203 chromeos_root: %s
204 build: %s
Caroline Ticeddde5052015-09-23 09:43:35 -0700205 compiler: %s
cmtice46093e52014-12-09 14:59:16 -0800206 }
Caroline Tice80eab982015-11-04 14:03:14 -0800207 """ % (label_string, self._chromeos_root, trybot_image,
208 compiler_string)
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800209 f.write(experiment_image)
cmtice46093e52014-12-09 14:59:16 -0800210
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800211 crosperf = os.path.join(TOOLCHAIN_DIR, 'crosperf', 'crosperf')
Han Shen43494292015-09-14 10:26:40 -0700212 noschedv2_opts = '--noschedv2' if self._noschedv2 else ''
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800213 command = ('{crosperf} --no_email=True --results_dir={r_dir} '
214 '--json_report=True {noschedv2_opts} {exp_file}').format(
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800215 crosperf=crosperf,
216 r_dir=self._reports_dir,
217 noschedv2_opts=noschedv2_opts,
218 exp_file=experiment_file)
cmticeaa700b02015-06-12 13:26:47 -0700219
cmtice46093e52014-12-09 14:59:16 -0800220 ret = self._ce.RunCommand(command)
cmtice7f3190b2015-05-22 14:14:51 -0700221 if ret != 0:
Manoj Guptaaee96b72016-10-24 13:43:28 -0700222 raise RuntimeError('Crosperf execution error!')
Caroline Ticeebbc3da2015-09-03 10:27:20 -0700223 else:
224 # Copy json report to pending archives directory.
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800225 command = 'cp %s/*.json %s/.' % (self._reports_dir, PENDING_ARCHIVES_DIR)
Caroline Ticeebbc3da2015-09-03 10:27:20 -0700226 ret = self._ce.RunCommand(command)
cmtice7f3190b2015-05-22 14:14:51 -0700227 return
cmtice46093e52014-12-09 14:59:16 -0800228
Luis Lozano783954f2015-12-21 18:06:29 -0800229 def _CopyWeeklyReportFiles(self, trybot_image, vanilla_image, nonafdo_image):
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800230 """Put files in place for running seven-day reports.
cmtice46093e52014-12-09 14:59:16 -0800231
232 Create tar files of the custom and official images and copy them
233 to the weekly reports directory, so they exist when the weekly report
234 gets generated. IMPORTANT NOTE: This function must run *after*
235 crosperf has been run; otherwise the vanilla images will not be there.
236 """
237
238 dry_run = False
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800239 if os.getlogin() != ROLE_ACCOUNT:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800240 self._l.LogOutput('Running this from non-role account; not copying '
241 'tar files for weekly reports.')
cmtice46093e52014-12-09 14:59:16 -0800242 dry_run = True
243
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800244 images_path = os.path.join(
245 os.path.realpath(self._chromeos_root), 'chroot/tmp')
cmtice46093e52014-12-09 14:59:16 -0800246
247 data_dir = os.path.join(WEEKLY_REPORTS_ROOT, self._board)
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800248 dest_dir = os.path.join(data_dir, self._weekday)
cmtice46093e52014-12-09 14:59:16 -0800249 if not os.path.exists(dest_dir):
250 os.makedirs(dest_dir)
251
252 # Make sure dest_dir is empty (clean out last week's data).
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800253 cmd = 'cd %s; rm -Rf %s_*_image*' % (dest_dir, self._weekday)
cmtice46093e52014-12-09 14:59:16 -0800254 if dry_run:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800255 print('CMD: %s' % cmd)
cmtice46093e52014-12-09 14:59:16 -0800256 else:
257 self._ce.RunCommand(cmd)
258
259 # Now create new tar files and copy them over.
Luis Lozano439f2b72016-01-08 11:56:02 -0800260 labels = {'test': trybot_image, 'vanilla': vanilla_image}
261 if nonafdo_image:
262 labels['nonafdo'] = nonafdo_image
263 for label_name, test_path in labels.iteritems():
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800264 tar_file_name = '%s_%s_image.tar' % (self._weekday, label_name)
265 cmd = ('cd %s; tar -cvf %s %s/chromiumos_test_image.bin; '
266 'cp %s %s/.') % (images_path, tar_file_name, test_path,
267 tar_file_name, dest_dir)
cmtice46093e52014-12-09 14:59:16 -0800268 if dry_run:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800269 print('CMD: %s' % cmd)
cmtice46093e52014-12-09 14:59:16 -0800270 tar_ret = 0
271 else:
272 tar_ret = self._ce.RunCommand(cmd)
273 if tar_ret:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800274 self._l.LogOutput('Error while creating/copying test tar file(%s).' %
275 tar_file_name)
cmtice46093e52014-12-09 14:59:16 -0800276
cmtice7f3190b2015-05-22 14:14:51 -0700277 def _SendEmail(self):
278 """Find email message generated by crosperf and send it."""
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800279 filename = os.path.join(self._reports_dir, 'msg_body.html')
cmtice7f3190b2015-05-22 14:14:51 -0700280 if (os.path.exists(filename) and
281 os.path.exists(os.path.expanduser(MAIL_PROGRAM))):
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800282 email_title = 'buildbot test results'
Yunlian Jiang2f563562015-08-28 13:54:04 -0700283 if self._patches_string == USE_LLVM_PATCH:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800284 email_title = 'buildbot llvm test results'
285 command = ('cat %s | %s -s "%s, %s" -team -html' %
286 (filename, MAIL_PROGRAM, email_title, self._board))
cmtice7f3190b2015-05-22 14:14:51 -0700287 self._ce.RunCommand(command)
cmtice46093e52014-12-09 14:59:16 -0800288
289 def DoAll(self):
Yunlian Jiang14cf5962015-12-11 15:50:14 -0800290 """Main function inside ToolchainComparator class.
cmtice46093e52014-12-09 14:59:16 -0800291
292 Launch trybot, get image names, create crosperf experiment file, run
293 crosperf, and copy images into seven-day report directories.
294 """
cmticece5ffa42015-02-12 15:18:43 -0800295 date_str = datetime.date.today()
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800296 description = 'master_%s_%s_%s' % (self._patches_string, self._build,
Han Shenfe054f12015-02-18 15:00:13 -0800297 date_str)
Manoj Guptaaee96b72016-10-24 13:43:28 -0700298 trybot_image = buildbot_utils.GetTrybotImage(
299 self._chromeos_root,
300 self._build,
301 self._patches,
302 description,
303 other_flags=['--notests'],
304 build_toolchain=True)
cmtice46093e52014-12-09 14:59:16 -0800305
cmticed54f9802015-02-05 11:04:11 -0800306 if len(trybot_image) == 0:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800307 self._l.LogError('Unable to find trybot_image for %s!' % description)
Luis Lozano7f20acb2015-11-04 17:15:08 -0800308 return 1
Luis Lozano783954f2015-12-21 18:06:29 -0800309
Luis Lozanoc75fd052016-02-19 17:37:01 -0800310 vanilla_image = self._GetVanillaImageName(trybot_image)
311 nonafdo_image = self._GetNonAFDOImageName(trybot_image)
Luis Lozano783954f2015-12-21 18:06:29 -0800312
Yunlian Jiang56f13762016-01-06 12:56:24 -0800313 # The trybot image is ready here, in some cases, the vanilla image
314 # is not ready, so we need to make sure vanilla image is available.
315 buildbot_utils.WaitForImage(self._chromeos_root, vanilla_image)
Luis Lozano783954f2015-12-21 18:06:29 -0800316 print('trybot_image: %s' % trybot_image)
317 print('vanilla_image: %s' % vanilla_image)
318 print('nonafdo_image: %s' % nonafdo_image)
Luis Lozanoc75fd052016-02-19 17:37:01 -0800319
cmtice46093e52014-12-09 14:59:16 -0800320 if os.getlogin() == ROLE_ACCOUNT:
321 self._FinishSetup()
322
Luis Lozano783954f2015-12-21 18:06:29 -0800323 self._TestImages(trybot_image, vanilla_image, nonafdo_image)
cmtice7f3190b2015-05-22 14:14:51 -0700324 self._SendEmail()
Yunlian Jiang3c6e4672015-08-24 15:58:22 -0700325 if (self._patches_string == USE_NEXT_GCC_PATCH and
326 self._board in WEEKLY_REPORT_BOARDS):
Luis Lozano7f20acb2015-11-04 17:15:08 -0800327 # Only try to copy the image files if the test runs ran successfully.
Luis Lozano783954f2015-12-21 18:06:29 -0800328 self._CopyWeeklyReportFiles(trybot_image, vanilla_image, nonafdo_image)
cmtice46093e52014-12-09 14:59:16 -0800329 return 0
330
331
332def Main(argv):
333 """The main function."""
334
335 # Common initializations
336 command_executer.InitCommandExecuter()
Caroline Ticeeddb0632016-04-14 09:19:02 -0700337 parser = argparse.ArgumentParser()
Manoj Guptaaee96b72016-10-24 13:43:28 -0700338 parser.add_argument(
339 '--remote', dest='remote', help='Remote machines to run tests on.')
340 parser.add_argument(
341 '--board', dest='board', default='x86-zgb', help='The target board.')
342 parser.add_argument(
343 '--chromeos_root',
344 dest='chromeos_root',
345 help='The chromeos root from which to run tests.')
346 parser.add_argument(
347 '--weekday',
348 default='',
349 dest='weekday',
350 help='The day of the week for which to run tests.')
351 parser.add_argument(
352 '--patch',
353 dest='patches',
354 help='The patches to use for the testing, '
355 "seprate the patch numbers with ',' "
356 'for more than one patches.')
357 parser.add_argument(
358 '--noschedv2',
359 dest='noschedv2',
360 action='store_true',
361 default=False,
362 help='Pass --noschedv2 to crosperf.')
Han Shen36413122015-08-28 11:05:40 -0700363
Caroline Ticeeddb0632016-04-14 09:19:02 -0700364 options = parser.parse_args(argv[1:])
cmtice46093e52014-12-09 14:59:16 -0800365 if not options.board:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800366 print('Please give a board.')
cmtice46093e52014-12-09 14:59:16 -0800367 return 1
368 if not options.remote:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800369 print('Please give at least one remote machine.')
cmtice46093e52014-12-09 14:59:16 -0800370 return 1
371 if not options.chromeos_root:
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800372 print('Please specify the ChromeOS root directory.')
cmtice46093e52014-12-09 14:59:16 -0800373 return 1
Yunlian Jiang76259e62015-08-21 08:44:31 -0700374 if options.patches:
Yunlian Jiang3c6e4672015-08-24 15:58:22 -0700375 patches = options.patches
376 else:
377 patches = USE_NEXT_GCC_PATCH
Yunlian Jiange52838c2015-08-20 14:32:37 -0700378
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800379 fc = ToolchainComparator(options.board, options.remote, options.chromeos_root,
380 options.weekday, patches, options.noschedv2)
cmtice46093e52014-12-09 14:59:16 -0800381 return fc.DoAll()
382
383
Luis Lozanof2a3ef42015-12-15 13:49:30 -0800384if __name__ == '__main__':
cmtice46093e52014-12-09 14:59:16 -0800385 retval = Main(sys.argv)
386 sys.exit(retval)