1*a707b3dbSJagannadha Sutradharudu Teki#!/usr/bin/env python 2fc3fe1c2SSimon Glass# 3fc3fe1c2SSimon Glass# Copyright (c) 2012 The Chromium OS Authors. 4fc3fe1c2SSimon Glass# 51a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 6fc3fe1c2SSimon Glass# 7fc3fe1c2SSimon Glass 8fc3fe1c2SSimon Glass"""See README for more information""" 9fc3fe1c2SSimon Glass 10fc3fe1c2SSimon Glassimport multiprocessing 11fc3fe1c2SSimon Glassfrom optparse import OptionParser 12fc3fe1c2SSimon Glassimport os 13fc3fe1c2SSimon Glassimport re 14fc3fe1c2SSimon Glassimport sys 15fc3fe1c2SSimon Glassimport unittest 16fc3fe1c2SSimon Glass 17fc3fe1c2SSimon Glass# Bring in the patman libraries 18fc3fe1c2SSimon Glassour_path = os.path.dirname(os.path.realpath(__file__)) 19fc3fe1c2SSimon Glasssys.path.append(os.path.join(our_path, '../patman')) 20fc3fe1c2SSimon Glass 21fc3fe1c2SSimon Glass# Our modules 22fc3fe1c2SSimon Glassimport board 23fc3fe1c2SSimon Glassimport builder 24fc3fe1c2SSimon Glassimport checkpatch 25fc3fe1c2SSimon Glassimport command 26fc3fe1c2SSimon Glassimport control 27fc3fe1c2SSimon Glassimport doctest 28fc3fe1c2SSimon Glassimport gitutil 29fc3fe1c2SSimon Glassimport patchstream 30fc3fe1c2SSimon Glassimport terminal 31fc3fe1c2SSimon Glassimport toolchain 32fc3fe1c2SSimon Glass 33fc3fe1c2SSimon Glassdef RunTests(): 34fc3fe1c2SSimon Glass import test 354281ad8eSSimon Glass import doctest 364281ad8eSSimon Glass 374281ad8eSSimon Glass result = unittest.TestResult() 384281ad8eSSimon Glass for module in ['toolchain']: 394281ad8eSSimon Glass suite = doctest.DocTestSuite(module) 404281ad8eSSimon Glass suite.run(result) 414281ad8eSSimon Glass 424281ad8eSSimon Glass # TODO: Surely we can just 'print' result? 434281ad8eSSimon Glass print result 444281ad8eSSimon Glass for test, err in result.errors: 454281ad8eSSimon Glass print err 464281ad8eSSimon Glass for test, err in result.failures: 474281ad8eSSimon Glass print err 48fc3fe1c2SSimon Glass 49fc3fe1c2SSimon Glass sys.argv = [sys.argv[0]] 50fc3fe1c2SSimon Glass suite = unittest.TestLoader().loadTestsFromTestCase(test.TestBuild) 51fc3fe1c2SSimon Glass result = unittest.TestResult() 52fc3fe1c2SSimon Glass suite.run(result) 53fc3fe1c2SSimon Glass 54fc3fe1c2SSimon Glass # TODO: Surely we can just 'print' result? 55fc3fe1c2SSimon Glass print result 56fc3fe1c2SSimon Glass for test, err in result.errors: 57fc3fe1c2SSimon Glass print err 58fc3fe1c2SSimon Glass for test, err in result.failures: 59fc3fe1c2SSimon Glass print err 60fc3fe1c2SSimon Glass 61fc3fe1c2SSimon Glass 62fc3fe1c2SSimon Glassparser = OptionParser() 63fc3fe1c2SSimon Glassparser.add_option('-b', '--branch', type='string', 64fc3fe1c2SSimon Glass help='Branch name to build') 65fc3fe1c2SSimon Glassparser.add_option('-B', '--bloat', dest='show_bloat', 66fc3fe1c2SSimon Glass action='store_true', default=False, 67fc3fe1c2SSimon Glass help='Show changes in function code size for each board') 68fc3fe1c2SSimon Glassparser.add_option('-c', '--count', dest='count', type='int', 69fc3fe1c2SSimon Glass default=-1, help='Run build on the top n commits') 70fc3fe1c2SSimon Glassparser.add_option('-e', '--show_errors', action='store_true', 71fc3fe1c2SSimon Glass default=False, help='Show errors and warnings') 72fc3fe1c2SSimon Glassparser.add_option('-f', '--force-build', dest='force_build', 73fc3fe1c2SSimon Glass action='store_true', default=False, 74fc3fe1c2SSimon Glass help='Force build of boards even if already built') 75fc3fe1c2SSimon Glassparser.add_option('-d', '--detail', dest='show_detail', 76fc3fe1c2SSimon Glass action='store_true', default=False, 77fc3fe1c2SSimon Glass help='Show detailed information for each board in summary') 78fc3fe1c2SSimon Glassparser.add_option('-g', '--git', type='string', 79fc3fe1c2SSimon Glass help='Git repo containing branch to build', default='.') 80fc3fe1c2SSimon Glassparser.add_option('-H', '--full-help', action='store_true', dest='full_help', 81fc3fe1c2SSimon Glass default=False, help='Display the README file') 82fc3fe1c2SSimon Glassparser.add_option('-j', '--jobs', dest='jobs', type='int', 83fc3fe1c2SSimon Glass default=None, help='Number of jobs to run at once (passed to make)') 84fc3fe1c2SSimon Glassparser.add_option('-k', '--keep-outputs', action='store_true', 85fc3fe1c2SSimon Glass default=False, help='Keep all build output files (e.g. binaries)') 86fc3fe1c2SSimon Glassparser.add_option('--list-tool-chains', action='store_true', default=False, 87fc3fe1c2SSimon Glass help='List available tool chains') 88fc3fe1c2SSimon Glassparser.add_option('-n', '--dry-run', action='store_true', dest='dry_run', 89fc3fe1c2SSimon Glass default=False, help="Do a try run (describe actions, but no nothing)") 90fc3fe1c2SSimon Glassparser.add_option('-Q', '--quick', action='store_true', 91fc3fe1c2SSimon Glass default=False, help='Do a rough build, with limited warning resolution') 92fc3fe1c2SSimon Glassparser.add_option('-s', '--summary', action='store_true', 93fc3fe1c2SSimon Glass default=False, help='Show a build summary') 94fc3fe1c2SSimon Glassparser.add_option('-S', '--show-sizes', action='store_true', 95fc3fe1c2SSimon Glass default=False, help='Show image size variation in summary') 96fc3fe1c2SSimon Glassparser.add_option('--step', type='int', 97fc3fe1c2SSimon Glass default=1, help='Only build every n commits (0=just first and last)') 98fc3fe1c2SSimon Glassparser.add_option('-t', '--test', action='store_true', dest='test', 99fc3fe1c2SSimon Glass default=False, help='run tests') 100fc3fe1c2SSimon Glassparser.add_option('-T', '--threads', type='int', 101fc3fe1c2SSimon Glass default=None, help='Number of builder threads to use') 102fc3fe1c2SSimon Glassparser.add_option('-u', '--show_unknown', action='store_true', 103fc3fe1c2SSimon Glass default=False, help='Show boards with unknown build result') 104fc3fe1c2SSimon Glass 105fc3fe1c2SSimon Glassparser.usage = """buildman -b <branch> [options] 106fc3fe1c2SSimon Glass 107fc3fe1c2SSimon GlassBuild U-Boot for all commits in a branch. Use -n to do a dry run""" 108fc3fe1c2SSimon Glass 109fc3fe1c2SSimon Glass(options, args) = parser.parse_args() 110fc3fe1c2SSimon Glass 111fc3fe1c2SSimon Glass# Run our meagre tests 112fc3fe1c2SSimon Glassif options.test: 113fc3fe1c2SSimon Glass RunTests() 114fc3fe1c2SSimon Glasselif options.full_help: 115fc3fe1c2SSimon Glass pager = os.getenv('PAGER') 116fc3fe1c2SSimon Glass if not pager: 117fc3fe1c2SSimon Glass pager = 'more' 118fc3fe1c2SSimon Glass fname = os.path.join(os.path.dirname(sys.argv[0]), 'README') 119fc3fe1c2SSimon Glass command.Run(pager, fname) 120fc3fe1c2SSimon Glass 121fc3fe1c2SSimon Glass# Build selected commits for selected boards 122fc3fe1c2SSimon Glasselse: 123fc3fe1c2SSimon Glass control.DoBuildman(options, args) 124