buildman: Support in-tree builds
authorSimon Glass <sjg@chromium.org>
Mon, 14 Jul 2014 23:51:03 +0000 (17:51 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 28 Jul 2014 03:52:55 +0000 (04:52 +0100)
At present buildman always builds out-of-tree, that is it uses a separate
output directory from the source directory. Normally this is what you want,
but it is important that in-tree builds work also. Some Makefile changes may
break this.

Add a -i option to tell buildman to use in-tree builds, so that it is easy
to test this feature.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/buildman/builder.py
tools/buildman/buildman.py
tools/buildman/control.py

index 767b1f69284e77909fd7521babec7e6f88d0b1ac..0a3900c2f251f6ec07005396d8a726da15b3de1c 100644 (file)
@@ -213,7 +213,10 @@ class BuilderThread(threading.Thread):
         # self.Make() below, in the event that we do a build.
         result = command.CommandResult()
         result.return_code = 0
-        out_dir = os.path.join(work_dir, 'build')
+        if self.builder.in_tree:
+            out_dir = work_dir
+        else:
+            out_dir = os.path.join(work_dir, 'build')
 
         # Check if the job was already completed last time
         done_file = self.builder.GetDoneFile(commit_upto, brd.target)
@@ -257,7 +260,10 @@ class BuilderThread(threading.Thread):
                 # Set up the environment and command line
                 env = self.toolchain.MakeEnvironment()
                 Mkdir(out_dir)
-                args = ['O=build', '-s']
+                args = []
+                if not self.builder.in_tree:
+                    args.append('O=build')
+                args.append('-s')
                 if self.builder.num_jobs is not None:
                     args.extend(['-j', str(self.builder.num_jobs)])
                 config_args = ['%s_config' % brd.target]
@@ -531,6 +537,9 @@ class Builder:
             the following commits. In fact buildman will reconfigure and
             retry for any failing commits, so generally the only effect of
             this option is to slow things down.
+        in_tree: Build U-Boot in-tree instead of specifying an output
+            directory separate from the source code. This option is really
+            only useful for testing in-tree builds.
 
     Private members:
         _base_board_dict: Last-summarised Dict of boards
@@ -602,6 +611,7 @@ class Builder:
         self.force_build_failures = False
         self.force_reconfig = False
         self._step = step
+        self.in_tree = False
 
         self.col = terminal.Color()
 
index 5046b160e9ea5737d3716df8aa05bd2cc0af0072..42847acb3c56eded4ef10b9368f82fadc4a39f78 100755 (executable)
@@ -85,6 +85,9 @@ parser.add_option('-g', '--git', type='string',
        help='Git repo containing branch to build', default='.')
 parser.add_option('-H', '--full-help', action='store_true', dest='full_help',
        default=False, help='Display the README file')
+parser.add_option('-i', '--in-tree', dest='in_tree',
+       action='store_true', default=False,
+       help='Build in the source tree instead of a separate directory')
 parser.add_option('-j', '--jobs', dest='jobs', type='int',
        default=None, help='Number of jobs to run at once (passed to make)')
 parser.add_option('-k', '--keep-outputs', action='store_true',
index a737fd1bdc0d4629249bbbd281a3c6796d44da0e..2dd80434ebd1b3101ce74cbba655cbf0b2b38699 100644 (file)
@@ -158,6 +158,7 @@ def DoBuildman(options, args):
         builder.force_build = options.force_build
         builder.force_build_failures = options.force_build_failures
         builder.force_reconfig = options.force_reconfig
+        builder.in_tree = options.in_tree
 
         # Work out which boards to build
         board_selected = boards.GetSelectedDict()