blob: 2170e34c6cc5753b5440f1bfaad4e2d1ba13cb5f [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()