| #!/usr/bin/env python3 |
| # Copyright 2021 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. |
| """Command line interface for stm32cube_builder.""" |
| |
| import argparse |
| import pathlib |
| import sys |
| |
| try: |
| from pw_stm32cube_build import ( |
| find_files, |
| gen_file_list, |
| icf_to_ld, |
| inject_init, |
| ) |
| except ImportError: |
| # Load from this directory if pw_stm32cube_build is not available. |
| import find_files # type: ignore |
| import gen_file_list # type: ignore |
| import icf_to_ld # type: ignore |
| import inject_init # type: ignore |
| |
| |
| def _parse_args() -> argparse.Namespace: |
| """Setup argparse and parse command line args.""" |
| parser = argparse.ArgumentParser() |
| |
| subparsers = parser.add_subparsers( |
| dest='command', metavar='<command>', required=True |
| ) |
| |
| gen_file_list_parser = subparsers.add_parser( |
| 'gen_file_list', help='generate files.txt for stm32cube directory' |
| ) |
| gen_file_list_parser.add_argument('stm32cube_dir', type=pathlib.Path) |
| |
| find_files_parser = subparsers.add_parser( |
| 'find_files', help='find files in stm32cube directory' |
| ) |
| find_files_parser.add_argument('stm32cube_dir', type=pathlib.Path) |
| find_files_parser.add_argument('product_str') |
| find_files_parser.add_argument('--init', default=False, action='store_true') |
| |
| icf_to_ld_parser = subparsers.add_parser( |
| 'icf_to_ld', help='convert stm32cube .icf linker files to .ld' |
| ) |
| icf_to_ld_parser.add_argument('icf_path', type=pathlib.Path) |
| icf_to_ld_parser.add_argument( |
| '--ld-path', nargs=1, default=None, type=pathlib.Path |
| ) |
| |
| inject_init_parser = subparsers.add_parser( |
| 'inject_init', help='inject `pw_stm32cube_Init()` into startup_*.s' |
| ) |
| inject_init_parser.add_argument('in_startup_path', type=pathlib.Path) |
| inject_init_parser.add_argument( |
| '--out-startup-path', nargs=1, default=None, type=pathlib.Path |
| ) |
| |
| return parser.parse_args() |
| |
| |
| def main(): |
| """Main command line function.""" |
| args = _parse_args() |
| |
| if args.command == 'gen_file_list': |
| gen_file_list.gen_file_list(args.stm32cube_dir) |
| elif args.command == 'find_files': |
| find_files.find_files(args.stm32cube_dir, args.product_str, args.init) |
| elif args.command == 'icf_to_ld': |
| icf_to_ld.icf_to_ld( |
| args.icf_path, args.ld_path[0] if args.ld_path else None |
| ) |
| elif args.command == 'inject_init': |
| inject_init.inject_init( |
| args.in_startup_path, |
| args.out_startup_path[0] if args.out_startup_path else None, |
| ) |
| |
| sys.exit(0) |
| |
| |
| if __name__ == '__main__': |
| main() |