diff options
Diffstat (limited to 'buildbot_test_llvm.py')
-rwxr-xr-x | buildbot_test_llvm.py | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/buildbot_test_llvm.py b/buildbot_test_llvm.py new file mode 100755 index 00000000..a43db752 --- /dev/null +++ b/buildbot_test_llvm.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python2 +"""Script for running llvm validation tests on ChromeOS. + +This script launches a buildbot to build ChromeOS with the llvm on +a particular board; then it finds and downloads the trybot image and the +corresponding official image, and runs test for correctness. +It then generates a report, emails it to the c-compiler-chrome, as +well as copying the result into a directory. +""" + +# Script to test different toolchains against ChromeOS benchmarks. + +from __future__ import print_function + +import argparse +import datetime +import os +import sys +import time + +from cros_utils import command_executer +from cros_utils import logger + +from cros_utils import buildbot_utils + +# CL that uses LLVM to build the peppy image. +USE_LLVM_PATCH = '295217' + +CROSTC_ROOT = '/usr/local/google/crostc' +ROLE_ACCOUNT = 'mobiletc-prebuild' +TOOLCHAIN_DIR = os.path.dirname(os.path.realpath(__file__)) +MAIL_PROGRAM = '~/var/bin/mail-sheriff' +VALIDATION_RESULT_DIR = os.path.join(CROSTC_ROOT, 'validation_result') +START_DATE = datetime.date(2016, 1, 1) +TEST_PER_DAY = 2 +TEST_BOARD = [ + 'squawks', # x86_64, rambi (baytrail) + 'terra', # x86_64, strago (braswell) + 'lulu', # x86_64, auron (broadwell) + 'peach_pit', # arm, peach (exynos-5420) + 'peppy', # x86_64, slippy (haswell celeron) + 'link', # x86_64, ivybridge (ivybridge) + 'nyan_big', # arm, nyan (tegra) + 'sentry', # x86_64, kunimitsu (skylake-u) + 'chell', # x86_64, glados (skylake-y) + 'daisy', # arm, daisy (exynos) + 'caroline', # amd64 + 'kevin', # arm, gru (Rockchip) +] + + +class ToolchainVerifier(object): + """Class for the toolchain verifier.""" + + def __init__(self, board, chromeos_root, weekday, patches, compiler): + self._board = board + self._chromeos_root = chromeos_root + self._base_dir = os.getcwd() + self._ce = command_executer.GetCommandExecuter() + self._l = logger.GetLogger() + self._compiler = compiler + self._build = '%s-%s-toolchain' % (board, compiler) + self._patches = patches.split(',') if patches else [] + self._patches_string = '_'.join(str(p) for p in self._patches) + + if not weekday: + self._weekday = time.strftime('%a') + else: + self._weekday = weekday + self._reports = os.path.join(VALIDATION_RESULT_DIR, compiler, board) + + def _FinishSetup(self): + """Make sure testing_rsa file is properly set up.""" + # Fix protections on ssh key + command = ('chmod 600 /var/cache/chromeos-cache/distfiles/target' + '/chrome-src-internal/src/third_party/chromite/ssh_keys' + '/testing_rsa') + ret_val = self._ce.ChrootRunCommand(self._chromeos_root, command) + if ret_val != 0: + raise RuntimeError('chmod for testing_rsa failed') + + def DoAll(self): + """Main function inside ToolchainComparator class. + + Launch trybot, get image names, create crosperf experiment file, run + crosperf, and copy images into seven-day report directories. + """ + flags = ['--hwtest'] + date_str = datetime.date.today() + description = 'master_%s_%s_%s' % (self._patches_string, self._build, + date_str) + _ = buildbot_utils.GetTrybotImage( + self._chromeos_root, + self._build, + self._patches, + description, + other_flags=flags, + async=True) + + return 0 + +def Main(argv): + """The main function.""" + + # Common initializations + command_executer.InitCommandExecuter() + parser = argparse.ArgumentParser() + parser.add_argument( + '--chromeos_root', + dest='chromeos_root', + help='The chromeos root from which to run tests.') + parser.add_argument( + '--weekday', + default='', + dest='weekday', + help='The day of the week for which to run tests.') + parser.add_argument( + '--board', default='', dest='board', help='The board to test.') + parser.add_argument( + '--patch', + dest='patches', + default='', + help='The patches to use for the testing, ' + "seprate the patch numbers with ',' " + 'for more than one patches.') + parser.add_argument( + '--compiler', + dest='compiler', + help='Which compiler (llvm, llvm-next or gcc) to use for ' + 'testing.') + + options = parser.parse_args(argv[1:]) + if not options.chromeos_root: + print('Please specify the ChromeOS root directory.') + return 1 + if not options.compiler: + print('Please specify which compiler to test (gcc, llvm, or llvm-next).') + return 1 + patches = options.patches + if not patches and options.compiler == 'llvm': + patches = USE_LLVM_PATCH + + if options.board: + fv = ToolchainVerifier(options.board, options.chromeos_root, + options.weekday, patches, options.compiler) + return fv.Doall() + + today = datetime.date.today() + delta = today - START_DATE + days = delta.days + + start_board = (days * TEST_PER_DAY) % len(TEST_BOARD) + for i in range(TEST_PER_DAY): + try: + board = TEST_BOARD[(start_board + i) % len(TEST_BOARD)] + fv = ToolchainVerifier(board, options.chromeos_root, options.weekday, + patches, options.compiler) + fv.DoAll() + except SystemExit: + logfile = os.path.join(VALIDATION_RESULT_DIR, options.compiler, board) + with open(logfile, 'w') as f: + f.write('Verifier got an exception, please check the log.\n') + + +if __name__ == '__main__': + retval = Main(sys.argv) + sys.exit(retval) |