blob: 5bfca64de8a8a7862bb7e68d69cb992a4fa30159 [file] [log] [blame]
#!/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()