xref: /OK3568_Linux_fs/yocto/poky/scripts/lib/devtool/build_sdk.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# Development tool - build-sdk command plugin
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# Copyright (C) 2015-2016 Intel Corporation
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
6*4882a593Smuzhiyun#
7*4882a593Smuzhiyun
8*4882a593Smuzhiyunimport os
9*4882a593Smuzhiyunimport subprocess
10*4882a593Smuzhiyunimport logging
11*4882a593Smuzhiyunimport glob
12*4882a593Smuzhiyunimport shutil
13*4882a593Smuzhiyunimport errno
14*4882a593Smuzhiyunimport sys
15*4882a593Smuzhiyunimport tempfile
16*4882a593Smuzhiyunfrom devtool import exec_build_env_command, setup_tinfoil, parse_recipe, DevtoolError
17*4882a593Smuzhiyunfrom devtool import build_image
18*4882a593Smuzhiyun
19*4882a593Smuzhiyunlogger = logging.getLogger('devtool')
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun
22*4882a593Smuzhiyundef build_sdk(args, config, basepath, workspace):
23*4882a593Smuzhiyun    """Entry point for the devtool build-sdk command"""
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun    sdk_targets = config.get('SDK', 'sdk_targets', '').split()
26*4882a593Smuzhiyun    if sdk_targets:
27*4882a593Smuzhiyun        image = sdk_targets[0]
28*4882a593Smuzhiyun    else:
29*4882a593Smuzhiyun        raise DevtoolError('Unable to determine image to build SDK for')
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun    extra_append = ['SDK_DERIVATIVE = "1"']
32*4882a593Smuzhiyun    try:
33*4882a593Smuzhiyun        result, outputdir = build_image.build_image_task(config,
34*4882a593Smuzhiyun                                                         basepath,
35*4882a593Smuzhiyun                                                         workspace,
36*4882a593Smuzhiyun                                                         image,
37*4882a593Smuzhiyun                                                         task='populate_sdk_ext',
38*4882a593Smuzhiyun                                                         extra_append=extra_append)
39*4882a593Smuzhiyun    except build_image.TargetNotImageError:
40*4882a593Smuzhiyun        raise DevtoolError('Unable to determine image to build SDK for')
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun    if result == 0:
43*4882a593Smuzhiyun        logger.info('Successfully built SDK. You can find output files in %s'
44*4882a593Smuzhiyun                    % outputdir)
45*4882a593Smuzhiyun    return result
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun
48*4882a593Smuzhiyundef register_commands(subparsers, context):
49*4882a593Smuzhiyun    """Register devtool subcommands"""
50*4882a593Smuzhiyun    if context.fixed_setup:
51*4882a593Smuzhiyun        parser_build_sdk = subparsers.add_parser('build-sdk',
52*4882a593Smuzhiyun                                                 help='Build a derivative SDK of this one',
53*4882a593Smuzhiyun                                                 description='Builds an extensible SDK based upon this one and the items in your workspace',
54*4882a593Smuzhiyun                                                 group='advanced')
55*4882a593Smuzhiyun        parser_build_sdk.set_defaults(func=build_sdk)
56