mirror of https://github.com/ARMmbed/mbed-os.git
186 lines
7.2 KiB
Python
186 lines
7.2 KiB
Python
#!/usr/bin/env python
|
|
|
|
"""
|
|
Copyright (c) 2017-2019 ARM Limited. All rights reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
|
|
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
|
|
|
|
http://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
|
|
"""
|
|
|
|
from argparse import ArgumentParser
|
|
import os
|
|
from os.path import dirname, abspath, basename
|
|
from prettytable import PrettyTable
|
|
import os.path
|
|
import sys
|
|
import subprocess
|
|
import json
|
|
|
|
""" import and bulid a bunch of example programs """
|
|
|
|
ROOT = abspath(dirname(dirname(dirname(dirname(__file__)))))
|
|
sys.path.insert(0, ROOT)
|
|
|
|
from tools.utils import argparse_force_uppercase_type
|
|
from tools.utils import argparse_many
|
|
from tools.build_api import get_mbed_official_release
|
|
import examples_lib as lib
|
|
from examples_lib import SUPPORTED_TOOLCHAINS, SUPPORTED_IDES
|
|
|
|
def parse_args():
|
|
"""Parse the arguments passed to the script."""
|
|
official_targets = get_mbed_official_release("5")
|
|
official_target_names = [x[0] for x in official_targets]
|
|
|
|
|
|
parser = ArgumentParser()
|
|
parser.add_argument("-c", dest="config", default="examples.json")
|
|
parser.add_argument("-e", "--example",
|
|
help=("filter the examples used in the script"),
|
|
type=argparse_many(lambda x: x),
|
|
default=[])
|
|
subparsers = parser.add_subparsers()
|
|
import_cmd = subparsers.add_parser("import", help="import of examples in config file" )
|
|
import_cmd.set_defaults(fn=do_import)
|
|
clone_cmd = subparsers.add_parser("clone", help="clone examples in config file" )
|
|
clone_cmd.set_defaults(fn=do_clone)
|
|
list_cmd = subparsers.add_parser("list", help="list examples in config file in a table")
|
|
list_cmd.set_defaults(fn=do_list)
|
|
symlink_cmd = subparsers.add_parser("symlink", help="create symbolic link to given mbed-os PATH")
|
|
symlink_cmd.add_argument("PATH", help=" path of mbed-os to be symlinked")
|
|
symlink_cmd.set_defaults(fn=do_symlink)
|
|
deploy_cmd = subparsers.add_parser("deploy", help="mbed deploy for examples in config file" )
|
|
deploy_cmd.set_defaults(fn=do_deploy)
|
|
version_cmd = subparsers.add_parser("update", help="update mbed-os to sepcific tags")
|
|
version_cmd.add_argument("TAG", help=" tag of mbed-os")
|
|
version_cmd.set_defaults(fn=do_update)
|
|
compile_cmd = subparsers.add_parser("compile", help="compile of examples" )
|
|
compile_cmd.set_defaults(fn=do_compile),
|
|
compile_cmd.add_argument(
|
|
"toolchains", nargs="*", default=SUPPORTED_TOOLCHAINS,
|
|
type=argparse_force_uppercase_type(SUPPORTED_TOOLCHAINS,
|
|
"toolchain")),
|
|
compile_cmd.add_argument("-m", "--mcu",
|
|
help=("build for the given MCU (%s)" %
|
|
', '.join(official_target_names)),
|
|
metavar="MCU",
|
|
type=argparse_many(
|
|
argparse_force_uppercase_type(
|
|
official_target_names, "MCU")),
|
|
default=official_target_names)
|
|
|
|
compile_cmd.add_argument(
|
|
"--profiles",
|
|
nargs='+',
|
|
metavar="profile",
|
|
help="build profile(s)")
|
|
|
|
compile_cmd.add_argument("-j", "--jobs",
|
|
dest='jobs',
|
|
metavar="NUMBER",
|
|
type=int,
|
|
default=0,
|
|
help="Number of concurrent jobs. Default: 0/auto (based on host machine's number of CPUs)")
|
|
|
|
compile_cmd.add_argument("-v", "--verbose",
|
|
action="store_true",
|
|
dest="verbose",
|
|
default=False,
|
|
help="Verbose diagnostic output")
|
|
|
|
export_cmd = subparsers.add_parser("export", help="export of examples")
|
|
export_cmd.set_defaults(fn=do_export)
|
|
export_cmd.add_argument(
|
|
"ide", nargs="*", default=SUPPORTED_IDES,
|
|
type=argparse_force_uppercase_type(SUPPORTED_IDES,
|
|
"ide"))
|
|
export_cmd.add_argument("-m", "--mcu",
|
|
help=("build for the given MCU (%s)" %
|
|
', '.join(official_target_names)),
|
|
metavar="MCU",
|
|
type=argparse_many(
|
|
argparse_force_uppercase_type(
|
|
official_target_names, "MCU")),
|
|
default=official_target_names)
|
|
return parser.parse_args()
|
|
|
|
|
|
def main():
|
|
"""Entry point"""
|
|
args = parse_args()
|
|
config = json.load(open(os.path.join(os.path.dirname(__file__),
|
|
args.config)))
|
|
|
|
all_examples = []
|
|
for example in config['examples']:
|
|
name = basename(example['github'])
|
|
if name != example['name']:
|
|
exit("ERROR : repo basename '%s' and example name '%s' not match " % (name, example['name']))
|
|
all_examples.append(name)
|
|
|
|
exp_filter = [x for x in all_examples if x in args.example] if args.example else all_examples
|
|
|
|
return args.fn(args, config, exp_filter)
|
|
|
|
|
|
def do_export(args, config, examples):
|
|
"""Do export and build step"""
|
|
results = {}
|
|
results = lib.export_repos(config, args.ide, args.mcu, examples)
|
|
failures = lib.get_export_summary(results)
|
|
return failures
|
|
|
|
|
|
def do_import(_, config, examples):
|
|
"""Do the import step of this process"""
|
|
return lib.source_repos(config, examples)
|
|
|
|
|
|
def do_clone(_, config, examples):
|
|
"""Do the clone step of this process"""
|
|
return lib.clone_repos(config, examples)
|
|
|
|
|
|
def do_deploy(_, config, examples):
|
|
"""Do the deploy step of this process"""
|
|
return lib.deploy_repos(config, examples)
|
|
|
|
|
|
def do_compile(args, config, examples):
|
|
"""Do the compile step"""
|
|
results = lib.compile_repos(config, args.toolchains, args.mcu, args.profiles, args.verbose, examples, args.jobs)
|
|
failures = lib.get_build_summary(results)
|
|
return failures
|
|
|
|
def do_update(args, config, examples):
|
|
""" Test update the mbed-os to the version specified by the tag """
|
|
return lib.update_mbedos_version(config, args.TAG, examples)
|
|
|
|
def do_list(_, config, examples):
|
|
"""List the examples in the config file"""
|
|
exp_table = PrettyTable()
|
|
exp_table.hrules = 1
|
|
exp_table.field_names = ["Name", "Subs", "Feature", "Targets", "Compile", "Test"]
|
|
for example in config["examples"]:
|
|
exp_table.add_row([example['name'], '\n'.join(example['subs']),'\n'.join(example['features']),'\n'.join(example['targets']),example['compile'],example['test']])
|
|
print(exp_table)
|
|
return 0
|
|
|
|
def do_symlink(args, config, examples):
|
|
"""Create Symbolic link for given mbed-os PATH"""
|
|
return lib.symlink_mbedos(config, args.PATH, examples)
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|