xref: /rk3399_rockchip-uboot/tools/buildman/buildman.py (revision 2c3deb9758c5be1c590bebdd25d8a36d486ea5e9)
1a707b3dbSJagannadha 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')
7097e91526SSimon Glassparser.add_option('-C', '--force-reconfig', dest='force_reconfig',
7197e91526SSimon Glass       action='store_true', default=False,
7297e91526SSimon Glass       help='Reconfigure for every commit (disable incremental build)')
73c1de5014SSimon Glassparser.add_option('-d', '--detail', dest='show_detail',
74c1de5014SSimon Glass       action='store_true', default=False,
75c1de5014SSimon Glass       help='Show detailed information for each board in summary')
76fc3fe1c2SSimon Glassparser.add_option('-e', '--show_errors', action='store_true',
77fc3fe1c2SSimon Glass       default=False, help='Show errors and warnings')
78fc3fe1c2SSimon Glassparser.add_option('-f', '--force-build', dest='force_build',
79fc3fe1c2SSimon Glass       action='store_true', default=False,
80fc3fe1c2SSimon Glass       help='Force build of boards even if already built')
814266dc28SSimon Glassparser.add_option('-F', '--force-build-failures', dest='force_build_failures',
824266dc28SSimon Glass       action='store_true', default=False,
834266dc28SSimon Glass       help='Force build of previously-failed build')
84fc3fe1c2SSimon Glassparser.add_option('-g', '--git', type='string',
85fc3fe1c2SSimon Glass       help='Git repo containing branch to build', default='.')
860f7c9ddaSSimon Glassparser.add_option('-G', '--config-file', type='string',
870f7c9ddaSSimon Glass       help='Path to buildman config file', default='')
88fc3fe1c2SSimon Glassparser.add_option('-H', '--full-help', action='store_true', dest='full_help',
89fc3fe1c2SSimon Glass       default=False, help='Display the README file')
90189a4968SSimon Glassparser.add_option('-i', '--in-tree', dest='in_tree',
91189a4968SSimon Glass       action='store_true', default=False,
92189a4968SSimon Glass       help='Build in the source tree instead of a separate directory')
93fc3fe1c2SSimon Glassparser.add_option('-j', '--jobs', dest='jobs', type='int',
94fc3fe1c2SSimon Glass       default=None, help='Number of jobs to run at once (passed to make)')
95fc3fe1c2SSimon Glassparser.add_option('-k', '--keep-outputs', action='store_true',
96fc3fe1c2SSimon Glass       default=False, help='Keep all build output files (e.g. binaries)')
97fc3fe1c2SSimon Glassparser.add_option('--list-tool-chains', action='store_true', default=False,
98fc3fe1c2SSimon Glass       help='List available tool chains')
99fc3fe1c2SSimon Glassparser.add_option('-n', '--dry-run', action='store_true', dest='dry_run',
100fc3fe1c2SSimon Glass       default=False, help="Do a try run (describe actions, but no nothing)")
101c1de5014SSimon Glassparser.add_option('-o', '--output-dir', type='string',
102c1de5014SSimon Glass       dest='output_dir', default='..',
103c1de5014SSimon Glass       help='Directory where all builds happen and buildman has its workspace (default is ../)')
104fc3fe1c2SSimon Glassparser.add_option('-Q', '--quick', action='store_true',
105fc3fe1c2SSimon Glass       default=False, help='Do a rough build, with limited warning resolution')
106fc3fe1c2SSimon Glassparser.add_option('-s', '--summary', action='store_true',
107fc3fe1c2SSimon Glass       default=False, help='Show a build summary')
108fc3fe1c2SSimon Glassparser.add_option('-S', '--show-sizes', action='store_true',
109fc3fe1c2SSimon Glass       default=False, help='Show image size variation in summary')
110fc3fe1c2SSimon Glassparser.add_option('--step', type='int',
111fc3fe1c2SSimon Glass       default=1, help='Only build every n commits (0=just first and last)')
112fc3fe1c2SSimon Glassparser.add_option('-t', '--test', action='store_true', dest='test',
113fc3fe1c2SSimon Glass                  default=False, help='run tests')
114fc3fe1c2SSimon Glassparser.add_option('-T', '--threads', type='int',
115fc3fe1c2SSimon Glass       default=None, help='Number of builder threads to use')
116fc3fe1c2SSimon Glassparser.add_option('-u', '--show_unknown', action='store_true',
117fc3fe1c2SSimon Glass       default=False, help='Show boards with unknown build result')
118e5a0e5d8SSimon Glassparser.add_option('-v', '--verbose', action='store_true',
119e5a0e5d8SSimon Glass       default=False, help='Show build results while the build progresses')
120fc3fe1c2SSimon Glass
1217f6b8315SMasahiro Yamadaparser.usage += """
122fc3fe1c2SSimon Glass
123fc3fe1c2SSimon GlassBuild U-Boot for all commits in a branch. Use -n to do a dry run"""
124fc3fe1c2SSimon Glass
125fc3fe1c2SSimon Glass(options, args) = parser.parse_args()
126fc3fe1c2SSimon Glass
127fc3fe1c2SSimon Glass# Run our meagre tests
128fc3fe1c2SSimon Glassif options.test:
129fc3fe1c2SSimon Glass    RunTests()
130fc3fe1c2SSimon Glasselif options.full_help:
131fc3fe1c2SSimon Glass    pager = os.getenv('PAGER')
132fc3fe1c2SSimon Glass    if not pager:
133fc3fe1c2SSimon Glass        pager = 'more'
134fc3fe1c2SSimon Glass    fname = os.path.join(os.path.dirname(sys.argv[0]), 'README')
135fc3fe1c2SSimon Glass    command.Run(pager, fname)
136fc3fe1c2SSimon Glass
137fc3fe1c2SSimon Glass# Build selected commits for selected boards
138fc3fe1c2SSimon Glasselse:
139*2c3deb97SSimon Glass    ret_code = control.DoBuildman(options, args)
140*2c3deb97SSimon Glass    sys.exit(ret_code)
141