diff options
Diffstat (limited to 'pw_build/py/pw_build/project_builder_argparse.py')
-rw-r--r-- | pw_build/py/pw_build/project_builder_argparse.py | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/pw_build/py/pw_build/project_builder_argparse.py b/pw_build/py/pw_build/project_builder_argparse.py new file mode 100644 index 000000000..18581eb66 --- /dev/null +++ b/pw_build/py/pw_build/project_builder_argparse.py @@ -0,0 +1,166 @@ +# Copyright 2022 The Pigweed Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +"""Pigweed Project Builder Common argparse.""" + +import argparse +from pathlib import Path + + +def add_project_builder_arguments( + parser: argparse.ArgumentParser, +) -> argparse.ArgumentParser: + """Add ProjectBuilder.main specific arguments.""" + build_dir_group = parser.add_argument_group( + title='Build Directory and Command Options' + ) + build_dir_group.add_argument( + '-C', + '--build-directory', + dest='build_directories', + nargs='+', + action='append', + default=[], + metavar=('directory', 'target'), + help=( + "Specify a build directory and optionally targets to " + "build. `pw watch -C out target1 target2` is equivalent to 'ninja " + "-C out taret1 target2'. The 'out' directory will be used if no " + "others are provided." + ), + ) + + build_dir_group.add_argument( + 'default_build_targets', + nargs='*', + metavar='target', + default=[], + help=( + "Default build targets. For example if the build directory is " + "'out' then, 'ninja -C out taret1 target2' will be run. To " + "specify one or more directories, use the " + "``-C / --build-directory`` option." + ), + ) + + build_dir_group.add_argument( + '--build-system-command', + nargs=2, + action='append', + default=[], + dest='build_system_commands', + metavar=('directory', 'command'), + help='Build system command for . Default: ninja', + ) + + build_dir_group.add_argument( + '--run-command', + action='append', + default=[], + help=( + 'Additional commands to run. These are run before any -C ' + 'arguments and may be repeated. For example: ' + "--run-command 'bazel build //pw_cli/...'" + "--run-command 'bazel test //pw_cli/...'" + "-C out python.lint python.test" + ), + ) + + build_options_group = parser.add_argument_group( + title='Build Execution Options' + ) + build_options_group.add_argument( + '-j', + '--jobs', + type=int, + help=( + 'Specify the number of cores to use for each build system.' + 'This is passed to ninja, bazel and make as "-j"' + ), + ) + build_options_group.add_argument( + '-k', + '--keep-going', + action='store_true', + help=( + 'Keep building past the first failure. This is equivalent to ' + 'running "ninja -k 0" or "bazel build -k".' + ), + ) + build_options_group.add_argument( + '--parallel', + action='store_true', + help='Run all builds in parallel.', + ) + build_options_group.add_argument( + '--parallel-workers', + default=0, + type=int, + help=( + 'How many builds may run at the same time when --parallel is ' + 'enabled. Default: 0 meaning run all in parallel.' + ), + ) + + logfile_group = parser.add_argument_group(title='Log File Options') + logfile_group.add_argument( + '--logfile', + type=Path, + help='Global build output log file.', + ) + + logfile_group.add_argument( + '--separate-logfiles', + action='store_true', + help='Create separate log files per build directory.', + ) + + logfile_group.add_argument( + '--debug-logging', + action='store_true', + help='Enable Python build execution tool debug logging.', + ) + + output_group = parser.add_argument_group(title='Display Output Options') + + # TODO(b/248257406) Use argparse.BooleanOptionalAction when Python 3.8 is + # no longer supported. + output_group.add_argument( + '--banners', + action='store_true', + default=True, + help='Show pass/fail banners.', + ) + output_group.add_argument( + '--no-banners', + action='store_false', + dest='banners', + help='Hide pass/fail banners.', + ) + + # TODO(b/248257406) Use argparse.BooleanOptionalAction when Python 3.8 is + # no longer supported. + output_group.add_argument( + '--colors', + action='store_true', + default=True, + help='Force color output from ninja.', + ) + output_group.add_argument( + '--no-colors', + action='store_false', + dest='colors', + help="Don't force ninja to use color output.", + ) + + return parser |