| #!/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() |