diff options
-rw-r--r-- | tools/buildman/builderthread.py | 38 | ||||
-rw-r--r-- | tools/buildman/buildman.rst | 6 |
2 files changed, 26 insertions, 18 deletions
diff --git a/tools/buildman/builderthread.py b/tools/buildman/builderthread.py index b4cb66397bb..4617f516f40 100644 --- a/tools/buildman/builderthread.py +++ b/tools/buildman/builderthread.py @@ -37,6 +37,8 @@ def mkdir(dirname, parents=False): Raises: OSError: File already exists """ + if os.path.exists(dirname): + return try: if parents: os.makedirs(dirname) @@ -45,8 +47,8 @@ def mkdir(dirname, parents=False): except OSError as err: if err.errno == errno.EEXIST: if os.path.realpath('.') == os.path.realpath(dirname): - print(f"Cannot create the current working directory '{dirname}'!") - sys.exit(1) + raise ValueError( + f"Cannot create the current working directory '{dirname}'!") else: raise @@ -205,21 +207,20 @@ class BuilderThread(threading.Thread): args = [] cwd = work_dir src_dir = os.path.realpath(work_dir) - if not self.builder.in_tree: - if commit_upto is None: - # In this case we are building in the original source directory - # (i.e. the current directory where buildman is invoked. The - # output directory is set to this thread's selected work - # directory. - # - # Symlinks can confuse U-Boot's Makefile since we may use '..' - # in our path, so remove them. - real_dir = os.path.realpath(out_dir) - args.append(f'O={real_dir}') - cwd = None - src_dir = os.getcwd() - else: - args.append(f'O={out_rel_dir}') + if commit_upto is None: + # In this case we are building in the original source directory + # (i.e. the current directory where buildman is invoked. The + # output directory is set to this thread's selected work + # directory. + # + # Symlinks can confuse U-Boot's Makefile since we may use '..' + # in our path, so remove them. + real_dir = os.path.realpath(out_dir) + args.append(f'O={real_dir}') + cwd = None + src_dir = os.getcwd() + elif out_rel_dir: + args.append(f'O={out_rel_dir}') if self.builder.verbose_build: args.append('V=1') else: @@ -409,7 +410,8 @@ class BuilderThread(threading.Thread): """ # Set up the environment and command line env = self.builder.make_environment(self.toolchain) - mkdir(out_dir) + if not os.path.exists(out_dir): + mkdir(out_dir) args, cwd, src_dir = self._build_args(brd, out_dir, out_rel_dir, work_dir, commit_upto) diff --git a/tools/buildman/buildman.rst b/tools/buildman/buildman.rst index 5fa7b277cb8..2555139334f 100644 --- a/tools/buildman/buildman.rst +++ b/tools/buildman/buildman.rst @@ -1333,6 +1333,12 @@ To build a particular target, rather than the default U-Boot target, use the `--target` option. This is unlikely to be useful unless you are building a single board. +Buildman normally builds out-of-tree, meaning that the source directory is not +disturbed by the build. Use `-i` to do an in-tree build instead. Note that this +does not affect the source directory, since buildman creates a separate git +'worktree' for each board. This means that it is possible to do an in-tree +build of an entire branch, or even a 'current source' build for multiple boards. + Build summary ------------- |