#!/usr/bin/env python3 # ex:ts=4:sw=4:sts=4:et # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (c) 2012, Intel Corporation. # All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # DESCRIPTION # 'yocto-bsp' is the Yocto BSP Tool that helps users create a new # Yocto BSP. Invoking it without any arguments will display help # screens for the 'yocto-bsp' command and list the available # 'yocto-bsp' subcommands. Invoking a subcommand without any # arguments will likewise display help screens for the specified # subcommand. Please use that interface for detailed help. # # AUTHORS # Tom Zanussi # import os import sys import argparse import logging scripts_path = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, scripts_path + '/lib') import argparse_oe from bsp.help import * from bsp.engine import * def do_create_bsp(args): """ Command-line handling for BSP creation. The real work is done by bsp.engine.yocto_bsp_create() """ if args.outdir: bsp_output_dir = args.outdir else: bsp_output_dir = "meta-" + args.bspname if args.git_check and not args.properties_file: print("Checking basic git connectivity...") if not verify_git_repo(GIT_CHECK_URI): print("Couldn't verify git connectivity, exiting\n") print("Details: couldn't access %s" % GIT_CHECK_URI) print(" (this most likely indicates a network connectivity problem or") print(" a misconfigured git intallation)") sys.exit(1) else: print("Done.\n") yocto_bsp_create(args.bspname, args.karch, scripts_path, bsp_output_dir, args.codedump, args.properties_file) def do_list_bsp(args): """ Command-line handling for listing available BSP properties and values. The real work is done by bsp.engine.yocto_bsp_list() """ yocto_bsp_list(args, scripts_path) def do_help_bsp(args): """ Command-line help tool """ help_text = command_help.get(args.subcommand) pager = subprocess.Popen('less', stdin=subprocess.PIPE) pager.communicate(bytes(help_text,'UTF-8')) command_help = { "create": yocto_bsp_create_help, "list": yocto_bsp_list_help } def start_logging(loglevel): logging.basicConfig(filename = 'yocto-bsp.log', filemode = 'w', level=loglevel) def main(): parser = argparse_oe.ArgumentParser(description='Create a customized Yocto BSP layer.', epilog="See '%(prog)s help ' for more information on a specific command.") parser.add_argument("-D", "--debug", action = "store_true", default = False, help = "output debug information") subparsers = parser.add_subparsers(title='subcommands', metavar='') subparsers.required = True create_parser = subparsers.add_parser('create', help='Create a new Yocto BSP', description='Create a new Yocto BSP') create_parser.add_argument('bspname', metavar='bsp-name', help='name for the new BSP') create_parser.add_argument('karch', help='kernel architecture') create_parser.add_argument("-o", "--outdir", help = "name of BSP dir to create") create_parser.add_argument("-i", "--infile", dest = "properties_file", help = "name of file containing the values for BSP properties as a JSON file") create_parser.add_argument("-c", "--codedump", action = "store_true", default = False, help = "dump the generated code to bspgen.out") create_parser.add_argument("-s", "--skip-git-check", dest = "git_check", action = "store_false", default = True, help = "skip the git connectivity check") create_parser.set_defaults(func=do_create_bsp) list_parser = subparsers.add_parser('list', help='List available values for options and BSP properties') list_parser.add_argument('karch', help='kernel architecture') prop_group = list_parser.add_mutually_exclusive_group() prop_group.add_argument("--properties", action = "store_true", default = False, help = "list all properties for the kernel architecture") prop_group.add_argument("--property", help = "list available values for the property") list_parser.add_argument("-o", "--outfile", dest = "properties_file", help = "dump the possible values for BSP properties to a JSON file") list_parser.set_defaults(func=do_list_bsp) help_parser = subparsers.add_parser('help', description='This command displays detailed help for the specified subcommand.') help_parser.add_argument('subcommand', nargs='?') help_parser.set_defaults(func=do_help_bsp) args = parser.parse_args() loglevel = logging.INFO if args.debug: loglevel = logging.DEBUG start_logging(loglevel) if args._subparser_name == "list": if not args.karch == "karch" and not args.properties and not args.property: print ("yocto-bsp list: error: one of the arguments --properties --property is required") list_parser.print_help() if args._subparser_name == "help": if not args.subcommand: parser.print_help() return 0 elif not command_help.get(args.subcommand): print ("yocto-bsp help: No manual entry for %s" % args.subcommand) return 1 return args.func(args) if __name__ == "__main__": try: ret = main() except Exception: ret = 1 import traceback traceback.print_exc() sys.exit(ret)