diff options
Diffstat (limited to 'scripts/yocto-bsp')
-rwxr-xr-x | scripts/yocto-bsp | 132 |
1 files changed, 71 insertions, 61 deletions
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 | |||