diff options
| -rw-r--r-- | scripts/lib/bsp/engine.py | 30 | ||||
| -rwxr-xr-x | scripts/yocto-bsp | 132 |
2 files changed, 78 insertions, 84 deletions
diff --git a/scripts/lib/bsp/engine.py b/scripts/lib/bsp/engine.py index 760efc7a60..07a15bb90c 100644 --- a/scripts/lib/bsp/engine.py +++ b/scripts/lib/bsp/engine.py | |||
| @@ -1826,16 +1826,13 @@ def yocto_layer_list_property_values(arch, property, scripts_path, properties_fi | |||
| 1826 | print_values(type, values_list) | 1826 | print_values(type, values_list) |
| 1827 | 1827 | ||
| 1828 | 1828 | ||
| 1829 | def yocto_bsp_list(args, scripts_path, properties_file): | 1829 | def yocto_bsp_list(args, scripts_path): |
| 1830 | """ | 1830 | """ |
| 1831 | Print available architectures, or the complete list of properties | 1831 | Print available architectures, or the complete list of properties |
| 1832 | defined by the BSP, or the possible values for a particular BSP | 1832 | defined by the BSP, or the possible values for a particular BSP |
| 1833 | property. | 1833 | property. |
| 1834 | """ | 1834 | """ |
| 1835 | if len(args) < 1: | 1835 | if args.karch == "karch": |
| 1836 | return False | ||
| 1837 | |||
| 1838 | if args[0] == "karch": | ||
| 1839 | lib_path = scripts_path + '/lib' | 1836 | lib_path = scripts_path + '/lib' |
| 1840 | bsp_path = lib_path + '/bsp' | 1837 | bsp_path = lib_path + '/bsp' |
| 1841 | arch_path = bsp_path + '/substrate/target/arch' | 1838 | arch_path = bsp_path + '/substrate/target/arch' |
| @@ -1844,26 +1841,13 @@ def yocto_bsp_list(args, scripts_path, properties_file): | |||
| 1844 | if arch == "common" or arch == "layer": | 1841 | if arch == "common" or arch == "layer": |
| 1845 | continue | 1842 | continue |
| 1846 | print(" %s" % arch) | 1843 | print(" %s" % arch) |
| 1847 | return True | 1844 | return |
| 1848 | else: | ||
| 1849 | arch = args[0] | ||
| 1850 | |||
| 1851 | if len(args) < 2 or len(args) > 3: | ||
| 1852 | return False | ||
| 1853 | |||
| 1854 | if len(args) == 2: | ||
| 1855 | if args[1] == "properties": | ||
| 1856 | yocto_layer_list_properties(arch, scripts_path, properties_file) | ||
| 1857 | else: | ||
| 1858 | return False | ||
| 1859 | 1845 | ||
| 1860 | if len(args) == 3: | 1846 | if args.properties: |
| 1861 | if args[1] == "property": | 1847 | yocto_layer_list_properties(args.karch, scripts_path, args.properties_file) |
| 1862 | yocto_layer_list_property_values(arch, args[2], scripts_path, properties_file) | 1848 | elif args.property: |
| 1863 | else: | 1849 | yocto_layer_list_property_values(args.karch, args.property, scripts_path, args.properties_file) |
| 1864 | return False | ||
| 1865 | 1850 | ||
| 1866 | return True | ||
| 1867 | 1851 | ||
| 1868 | 1852 | ||
| 1869 | def yocto_layer_list(args, scripts_path, properties_file): | 1853 | def yocto_layer_list(args, scripts_path, properties_file): |
diff --git a/scripts/yocto-bsp b/scripts/yocto-bsp index ac6cfa07b0..6fb1f419cc 100755 --- a/scripts/yocto-bsp +++ b/scripts/yocto-bsp | |||
| @@ -32,48 +32,28 @@ | |||
| 32 | 32 | ||
| 33 | import os | 33 | import os |
| 34 | import sys | 34 | import sys |
| 35 | import optparse | 35 | import argparse |
| 36 | import logging | 36 | import logging |
| 37 | 37 | ||
| 38 | scripts_path = os.path.abspath(os.path.dirname(os.path.abspath(sys.argv[0]))) | 38 | scripts_path = os.path.dirname(os.path.realpath(__file__)) |
| 39 | lib_path = scripts_path + '/lib' | 39 | sys.path.insert(0, scripts_path + '/lib') |
| 40 | sys.path = sys.path + [lib_path] | 40 | import argparse_oe |
| 41 | 41 | ||
| 42 | from bsp.help import * | 42 | from bsp.help import * |
| 43 | from bsp.engine import * | 43 | from bsp.engine import * |
| 44 | 44 | ||
| 45 | 45 | ||
| 46 | def yocto_bsp_create_subcommand(args, usage_str): | 46 | def do_create_bsp(args): |
| 47 | """ | 47 | """ |
| 48 | Command-line handling for BSP creation. The real work is done by | 48 | Command-line handling for BSP creation. The real work is done by |
| 49 | bsp.engine.yocto_bsp_create() | 49 | bsp.engine.yocto_bsp_create() |
| 50 | """ | 50 | """ |
| 51 | parser = optparse.OptionParser(usage = usage_str) | 51 | if args.outdir: |
| 52 | 52 | bsp_output_dir = args.outdir | |
| 53 | parser.add_option("-o", "--outdir", dest = "outdir", action = "store", | ||
| 54 | help = "name of BSP dir to create") | ||
| 55 | parser.add_option("-i", "--infile", dest = "properties_file", action = "store", | ||
| 56 | help = "name of file containing the values for BSP properties as a JSON file") | ||
| 57 | parser.add_option("-c", "--codedump", dest = "codedump", action = "store_true", | ||
| 58 | default = False, help = "dump the generated code to bspgen.out") | ||
| 59 | parser.add_option("-s", "--skip-git-check", dest = "git_check", action = "store_false", | ||
| 60 | default = True, help = "skip the git connectivity check") | ||
| 61 | (options, args) = parser.parse_args(args) | ||
| 62 | |||
| 63 | if len(args) != 2: | ||
| 64 | logging.error("Wrong number of arguments, exiting\n") | ||
| 65 | parser.print_help() | ||
| 66 | sys.exit(1) | ||
| 67 | |||
| 68 | machine = args[0] | ||
| 69 | karch = args[1] | ||
| 70 | |||
| 71 | if options.outdir: | ||
| 72 | bsp_output_dir = options.outdir | ||
| 73 | else: | 53 | else: |
| 74 | bsp_output_dir = "meta-" + machine | 54 | bsp_output_dir = "meta-" + args.bspname |
| 75 | 55 | ||
| 76 | if options.git_check and not options.properties_file: | 56 | if args.git_check and not args.properties_file: |
| 77 | print("Checking basic git connectivity...") | 57 | print("Checking basic git connectivity...") |
| 78 | if not verify_git_repo(GIT_CHECK_URI): | 58 | if not verify_git_repo(GIT_CHECK_URI): |
| 79 | print("Couldn't verify git connectivity, exiting\n") | 59 | print("Couldn't verify git connectivity, exiting\n") |
| @@ -84,34 +64,27 @@ def yocto_bsp_create_subcommand(args, usage_str): | |||
| 84 | else: | 64 | else: |
| 85 | print("Done.\n") | 65 | print("Done.\n") |
| 86 | 66 | ||
| 87 | yocto_bsp_create(machine, karch, scripts_path, bsp_output_dir, options.codedump, options.properties_file) | 67 | yocto_bsp_create(args.bspname, args.karch, scripts_path, bsp_output_dir, args.codedump, args.properties_file) |
| 88 | 68 | ||
| 89 | 69 | ||
| 90 | def yocto_bsp_list_subcommand(args, usage_str): | 70 | def do_list_bsp(args): |
| 91 | """ | 71 | """ |
| 92 | Command-line handling for listing available BSP properties and | 72 | Command-line handling for listing available BSP properties and |
| 93 | values. The real work is done by bsp.engine.yocto_bsp_list() | 73 | values. The real work is done by bsp.engine.yocto_bsp_list() |
| 94 | """ | 74 | """ |
| 95 | parser = optparse.OptionParser(usage = usage_str) | 75 | yocto_bsp_list(args, scripts_path) |
| 96 | |||
| 97 | parser.add_option("-o", "--outfile", action = "store", dest = "properties_file", | ||
| 98 | help = "dump the possible values for BSP properties to a JSON file") | ||
| 99 | |||
| 100 | (options, args) = parser.parse_args(args) | ||
| 101 | |||
| 102 | if not yocto_bsp_list(args, scripts_path, options.properties_file): | ||
| 103 | logging.error("Bad list arguments, exiting\n") | ||
| 104 | parser.print_help() | ||
| 105 | sys.exit(1) | ||
| 106 | 76 | ||
| 77 | def do_help_bsp(args): | ||
| 78 | """ | ||
| 79 | Command-line help tool | ||
| 80 | """ | ||
| 81 | help_text = command_help.get(args.subcommand) | ||
| 82 | pager = subprocess.Popen('less', stdin=subprocess.PIPE) | ||
| 83 | pager.communicate(bytes(help_text,'UTF-8')) | ||
| 107 | 84 | ||
| 108 | subcommands = { | 85 | command_help = { |
| 109 | "create": [yocto_bsp_create_subcommand, | 86 | "create": yocto_bsp_create_help, |
| 110 | yocto_bsp_create_usage, | 87 | "list": yocto_bsp_list_help |
| 111 | yocto_bsp_create_help], | ||
| 112 | "list": [yocto_bsp_list_subcommand, | ||
| 113 | yocto_bsp_list_usage, | ||
| 114 | yocto_bsp_list_help], | ||
| 115 | } | 88 | } |
| 116 | 89 | ||
| 117 | 90 | ||
| @@ -120,27 +93,65 @@ def start_logging(loglevel): | |||
| 120 | 93 | ||
| 121 | 94 | ||
| 122 | def main(): | 95 | def main(): |
| 123 | parser = optparse.OptionParser(usage = yocto_bsp_usage) | 96 | parser = argparse_oe.ArgumentParser(description='Create a customized Yocto BSP layer.', |
| 97 | epilog="See '%(prog)s help <subcommand>' for more information on a specific command.") | ||
| 124 | 98 | ||
| 125 | parser.disable_interspersed_args() | 99 | parser.add_argument("-D", "--debug", action = "store_true", |
| 126 | parser.add_option("-D", "--debug", dest = "debug", action = "store_true", | ||
| 127 | default = False, help = "output debug information") | 100 | default = False, help = "output debug information") |
| 101 | subparsers = parser.add_subparsers(title='subcommands', metavar='<subcommand>') | ||
| 102 | subparsers.required = True | ||
| 103 | |||
| 104 | create_parser = subparsers.add_parser('create', help='Create a new Yocto BSP', | ||
| 105 | description='Create a new Yocto BSP') | ||
| 106 | create_parser.add_argument('bspname', metavar='bsp-name', help='name for the new BSP') | ||
| 107 | create_parser.add_argument('karch', help='kernel architecture') | ||
| 108 | create_parser.add_argument("-o", "--outdir", help = "name of BSP dir to create") | ||
| 109 | create_parser.add_argument("-i", "--infile", dest = "properties_file", | ||
| 110 | help = "name of file containing the values for BSP properties as a JSON file") | ||
| 111 | create_parser.add_argument("-c", "--codedump", action = "store_true", default = False, | ||
| 112 | help = "dump the generated code to bspgen.out") | ||
| 113 | create_parser.add_argument("-s", "--skip-git-check", dest = "git_check", action = "store_false", | ||
| 114 | default = True, help = "skip the git connectivity check") | ||
| 115 | create_parser.set_defaults(func=do_create_bsp) | ||
| 116 | |||
| 128 | 117 | ||
| 129 | (options, args) = parser.parse_args() | 118 | list_parser = subparsers.add_parser('list', help='List available values for options and BSP properties') |
| 119 | list_parser.add_argument('karch', help='kernel architecture') | ||
| 120 | prop_group = list_parser.add_mutually_exclusive_group() | ||
| 121 | prop_group.add_argument("--properties", action = "store_true", default = False, | ||
| 122 | help = "list all properties for the kernel architecture") | ||
| 123 | prop_group.add_argument("--property", help = "list available values for the property") | ||
| 124 | list_parser.add_argument("-o", "--outfile", dest = "properties_file", | ||
| 125 | help = "dump the possible values for BSP properties to a JSON file") | ||
| 126 | |||
| 127 | list_parser.set_defaults(func=do_list_bsp) | ||
| 128 | |||
| 129 | help_parser = subparsers.add_parser('help', | ||
| 130 | description='This command displays detailed help for the specified subcommand.') | ||
| 131 | help_parser.add_argument('subcommand', nargs='?') | ||
| 132 | help_parser.set_defaults(func=do_help_bsp) | ||
| 133 | |||
| 134 | args = parser.parse_args() | ||
| 130 | 135 | ||
| 131 | loglevel = logging.INFO | 136 | loglevel = logging.INFO |
| 132 | if options.debug: | 137 | if args.debug: |
| 133 | loglevel = logging.DEBUG | 138 | loglevel = logging.DEBUG |
| 134 | start_logging(loglevel) | 139 | start_logging(loglevel) |
| 135 | 140 | ||
| 136 | if len(args): | 141 | if args._subparser_name == "list": |
| 137 | if args[0] == "help": | 142 | if not args.karch == "karch" and not args.properties and not args.property: |
| 138 | if len(args) == 1: | 143 | print ("yocto-bsp list: error: one of the arguments --properties --property is required") |
| 139 | parser.print_help() | 144 | list_parser.print_help() |
| 140 | sys.exit() | ||
| 141 | 145 | ||
| 142 | invoke_subcommand(args, parser, yocto_bsp_help_usage, subcommands) | 146 | if args._subparser_name == "help": |
| 147 | if not args.subcommand: | ||
| 148 | parser.print_help() | ||
| 149 | return 0 | ||
| 150 | elif not command_help.get(args.subcommand): | ||
| 151 | print ("yocto-bsp help: No manual entry for %s" % args.subcommand) | ||
| 152 | return 1 | ||
| 143 | 153 | ||
| 154 | return args.func(args) | ||
| 144 | 155 | ||
| 145 | if __name__ == "__main__": | 156 | if __name__ == "__main__": |
| 146 | try: | 157 | try: |
| @@ -150,4 +161,3 @@ if __name__ == "__main__": | |||
| 150 | import traceback | 161 | import traceback |
| 151 | traceback.print_exc() | 162 | traceback.print_exc() |
| 152 | sys.exit(ret) | 163 | sys.exit(ret) |
| 153 | |||
