| # 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') |
| |
| output_group.add_argument( |
| '--banners', |
| action=argparse.BooleanOptionalAction, |
| default=True, |
| help='Show pass/fail banners.', |
| ) |
| |
| output_group.add_argument( |
| '--colors', |
| action=argparse.BooleanOptionalAction, |
| default=True, |
| help='Force color output from ninja.', |
| ) |
| |
| return parser |