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 | |||