diff options
Diffstat (limited to 'bitbake/bin/bitbake-setup')
| -rwxr-xr-x | bitbake/bin/bitbake-setup | 94 |
1 files changed, 47 insertions, 47 deletions
diff --git a/bitbake/bin/bitbake-setup b/bitbake/bin/bitbake-setup index a0426005ff..3cd67805fe 100755 --- a/bitbake/bin/bitbake-setup +++ b/bitbake/bin/bitbake-setup | |||
| @@ -114,7 +114,7 @@ def checkout_layers(layers, layerdir, d): | |||
| 114 | os.remove(symlink) | 114 | os.remove(symlink) |
| 115 | os.symlink(os.path.relpath(t,layerdir),symlink) | 115 | os.symlink(os.path.relpath(t,layerdir),symlink) |
| 116 | 116 | ||
| 117 | def setup_bitbake_build(bitbake_config, layerdir, builddir, thisdir): | 117 | def setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir): |
| 118 | def _setup_build_conf(layers, build_conf_dir): | 118 | def _setup_build_conf(layers, build_conf_dir): |
| 119 | os.makedirs(build_conf_dir) | 119 | os.makedirs(build_conf_dir) |
| 120 | layers_s = [] | 120 | layers_s = [] |
| @@ -188,7 +188,7 @@ def setup_bitbake_build(bitbake_config, layerdir, builddir, thisdir): | |||
| 188 | f.write('\n') | 188 | f.write('\n') |
| 189 | f.write(content) | 189 | f.write(content) |
| 190 | 190 | ||
| 191 | bitbake_builddir = os.path.join(builddir, "build") | 191 | bitbake_builddir = os.path.join(setupdir, "build") |
| 192 | print("Setting up bitbake configuration in\n {}\n".format(bitbake_builddir)) | 192 | print("Setting up bitbake configuration in\n {}\n".format(bitbake_builddir)) |
| 193 | 193 | ||
| 194 | template = bitbake_config.get("oe-template") | 194 | template = bitbake_config.get("oe-template") |
| @@ -220,7 +220,7 @@ def setup_bitbake_build(bitbake_config, layerdir, builddir, thisdir): | |||
| 220 | _prepend_passthrough_to_init_build_env(bitbake_builddir) | 220 | _prepend_passthrough_to_init_build_env(bitbake_builddir) |
| 221 | 221 | ||
| 222 | siteconf_symlink = os.path.join(bitbake_confdir, "site.conf") | 222 | siteconf_symlink = os.path.join(bitbake_confdir, "site.conf") |
| 223 | siteconf = os.path.normpath(os.path.join(builddir, '..', "site.conf")) | 223 | siteconf = os.path.normpath(os.path.join(setupdir, '..', "site.conf")) |
| 224 | if os.path.lexists(siteconf_symlink): | 224 | if os.path.lexists(siteconf_symlink): |
| 225 | os.remove(symlink) | 225 | os.remove(symlink) |
| 226 | os.symlink(os.path.relpath(siteconf, bitbake_confdir) ,siteconf_symlink) | 226 | os.symlink(os.path.relpath(siteconf, bitbake_confdir) ,siteconf_symlink) |
| @@ -267,7 +267,7 @@ def get_registry_config(registry_path, id): | |||
| 267 | return os.path.join(root, f) | 267 | return os.path.join(root, f) |
| 268 | raise Exception("Unable to find {} in available configurations; use 'list' sub-command to see what is available".format(id)) | 268 | raise Exception("Unable to find {} in available configurations; use 'list' sub-command to see what is available".format(id)) |
| 269 | 269 | ||
| 270 | def update_build(config, confdir, builddir, layerdir, d): | 270 | def update_build(config, confdir, setupdir, layerdir, d): |
| 271 | layer_config = config["data"]["sources"] | 271 | layer_config = config["data"]["sources"] |
| 272 | layer_overrides = config["source-overrides"]["sources"] | 272 | layer_overrides = config["source-overrides"]["sources"] |
| 273 | for k,v in layer_overrides.items(): | 273 | for k,v in layer_overrides.items(): |
| @@ -276,7 +276,7 @@ def update_build(config, confdir, builddir, layerdir, d): | |||
| 276 | checkout_layers(layer_config, layerdir, d) | 276 | checkout_layers(layer_config, layerdir, d) |
| 277 | bitbake_config = config["bitbake-config"] | 277 | bitbake_config = config["bitbake-config"] |
| 278 | thisdir = os.path.dirname(config["path"]) if config["type"] == 'local' else None | 278 | thisdir = os.path.dirname(config["path"]) if config["type"] == 'local' else None |
| 279 | setup_bitbake_build(bitbake_config, layerdir, builddir, thisdir) | 279 | setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir) |
| 280 | 280 | ||
| 281 | def int_input(allowed_values): | 281 | def int_input(allowed_values): |
| 282 | n = None | 282 | n = None |
| @@ -441,22 +441,22 @@ def init_config(top_dir, settings, args, d): | |||
| 441 | upstream_config = obtain_config(top_dir, settings, args, source_overrides, d) | 441 | upstream_config = obtain_config(top_dir, settings, args, source_overrides, d) |
| 442 | print("\nRun 'bitbake-setup init --non-interactive {}' to select this configuration non-interactively.\n".format(" ".join(upstream_config['non-interactive-cmdline-options']))) | 442 | print("\nRun 'bitbake-setup init --non-interactive {}' to select this configuration non-interactively.\n".format(" ".join(upstream_config['non-interactive-cmdline-options']))) |
| 443 | 443 | ||
| 444 | builddir = os.path.join(os.path.abspath(top_dir), args.build_dir_name or "{}-{}".format(upstream_config['name']," ".join(upstream_config['non-interactive-cmdline-options'][1:]).replace(" ","-").replace("/","_"))) | 444 | setupdir = os.path.join(os.path.abspath(top_dir), args.setup_dir_name or "{}-{}".format(upstream_config['name']," ".join(upstream_config['non-interactive-cmdline-options'][1:]).replace(" ","-").replace("/","_"))) |
| 445 | if os.path.exists(os.path.join(builddir, "layers")): | 445 | if os.path.exists(os.path.join(setupdir, "layers")): |
| 446 | print(f"Build already initialized in:\n {builddir}\nUse 'bitbake-setup status' to check if it needs to be updated, or 'bitbake-setup update' to perform the update.\nIf you would like to start over and re-initialize a build in this directory, remove it, and run 'bitbake-setup init' again.") | 446 | print(f"Setup already initialized in:\n {setupdir}\nUse 'bitbake-setup status' to check if it needs to be updated, or 'bitbake-setup update' to perform the update.\nIf you would like to start over and re-initialize in this directory, remove it, and run 'bitbake-setup init' again.") |
| 447 | return | 447 | return |
| 448 | 448 | ||
| 449 | print("Initializing a build in\n {}".format(builddir)) | 449 | print("Initializing a setup directory in\n {}".format(setupdir)) |
| 450 | if not args.non_interactive: | 450 | if not args.non_interactive: |
| 451 | y_or_n = input('Continue? (y/N): ') | 451 | y_or_n = input('Continue? (y/N): ') |
| 452 | if y_or_n != 'y': | 452 | if y_or_n != 'y': |
| 453 | exit() | 453 | exit() |
| 454 | print() | 454 | print() |
| 455 | 455 | ||
| 456 | os.makedirs(builddir, exist_ok=True) | 456 | os.makedirs(setupdir, exist_ok=True) |
| 457 | 457 | ||
| 458 | confdir = os.path.join(builddir, "config") | 458 | confdir = os.path.join(setupdir, "config") |
| 459 | layerdir = os.path.join(builddir, "layers") | 459 | layerdir = os.path.join(setupdir, "layers") |
| 460 | 460 | ||
| 461 | os.makedirs(confdir) | 461 | os.makedirs(confdir) |
| 462 | os.makedirs(layerdir) | 462 | os.makedirs(layerdir) |
| @@ -471,7 +471,7 @@ def init_config(top_dir, settings, args, d): | |||
| 471 | 471 | ||
| 472 | write_config(upstream_config, confdir) | 472 | write_config(upstream_config, confdir) |
| 473 | commit_config(confdir) | 473 | commit_config(confdir) |
| 474 | update_build(upstream_config, confdir, builddir, layerdir, d) | 474 | update_build(upstream_config, confdir, setupdir, layerdir, d) |
| 475 | 475 | ||
| 476 | bb.event.remove("bb.build.TaskProgress", None) | 476 | bb.event.remove("bb.build.TaskProgress", None) |
| 477 | 477 | ||
| @@ -513,10 +513,10 @@ def are_layers_changed(layers, layerdir, d): | |||
| 513 | return changed | 513 | return changed |
| 514 | 514 | ||
| 515 | def build_status(top_dir, settings, args, d, update=False): | 515 | def build_status(top_dir, settings, args, d, update=False): |
| 516 | builddir = args.build_dir | 516 | setupdir = args.setup_dir |
| 517 | 517 | ||
| 518 | confdir = os.path.join(builddir, "config") | 518 | confdir = os.path.join(setupdir, "config") |
| 519 | layerdir = os.path.join(builddir, "layers") | 519 | layerdir = os.path.join(setupdir, "layers") |
| 520 | 520 | ||
| 521 | current_upstream_config = json.load(open(os.path.join(confdir, "config-upstream.json"))) | 521 | current_upstream_config = json.load(open(os.path.join(confdir, "config-upstream.json"))) |
| 522 | 522 | ||
| @@ -530,20 +530,20 @@ def build_status(top_dir, settings, args, d, update=False): | |||
| 530 | config_diff = bb.process.run('git -C {} diff'.format(confdir))[0] | 530 | config_diff = bb.process.run('git -C {} diff'.format(confdir))[0] |
| 531 | 531 | ||
| 532 | if config_diff: | 532 | if config_diff: |
| 533 | print('\nConfiguration in {} has changed:\n{}'.format(builddir, config_diff)) | 533 | print('\nConfiguration in {} has changed:\n{}'.format(setupdir, config_diff)) |
| 534 | if update: | 534 | if update: |
| 535 | commit_config(confdir) | 535 | commit_config(confdir) |
| 536 | update_build(new_upstream_config, confdir, builddir, layerdir, d) | 536 | update_build(new_upstream_config, confdir, setupdir, layerdir, d) |
| 537 | else: | 537 | else: |
| 538 | bb.process.run('git -C {} restore config-upstream.json'.format(confdir)) | 538 | bb.process.run('git -C {} restore config-upstream.json'.format(confdir)) |
| 539 | return | 539 | return |
| 540 | 540 | ||
| 541 | if are_layers_changed(current_upstream_config["data"]["sources"], layerdir, d): | 541 | if are_layers_changed(current_upstream_config["data"]["sources"], layerdir, d): |
| 542 | if update: | 542 | if update: |
| 543 | update_build(current_upstream_config, confdir, builddir, layerdir, d) | 543 | update_build(current_upstream_config, confdir, setupdir, layerdir, d) |
| 544 | return | 544 | return |
| 545 | 545 | ||
| 546 | print("\nConfiguration in {} has not changed.".format(builddir)) | 546 | print("\nConfiguration in {} has not changed.".format(setupdir)) |
| 547 | 547 | ||
| 548 | def build_update(top_dir, settings, args, d): | 548 | def build_update(top_dir, settings, args, d): |
| 549 | build_status(top_dir, settings, args, d, update=True) | 549 | build_status(top_dir, settings, args, d, update=True) |
| @@ -616,7 +616,7 @@ def list_configs(top_dir, settings, args, d): | |||
| 616 | print("Available configurations written into {}".format(args.write_json)) | 616 | print("Available configurations written into {}".format(args.write_json)) |
| 617 | 617 | ||
| 618 | def install_buildtools(top_dir, settings, args, d): | 618 | def install_buildtools(top_dir, settings, args, d): |
| 619 | buildtools_install_dir = os.path.join(args.build_dir, 'buildtools') | 619 | buildtools_install_dir = os.path.join(args.setup_dir, 'buildtools') |
| 620 | if os.path.exists(buildtools_install_dir): | 620 | if os.path.exists(buildtools_install_dir): |
| 621 | if not args.force: | 621 | if not args.force: |
| 622 | print("Buildtools are already installed in {}.".format(buildtools_install_dir)) | 622 | print("Buildtools are already installed in {}.".format(buildtools_install_dir)) |
| @@ -629,8 +629,8 @@ def install_buildtools(top_dir, settings, args, d): | |||
| 629 | return | 629 | return |
| 630 | shutil.rmtree(buildtools_install_dir) | 630 | shutil.rmtree(buildtools_install_dir) |
| 631 | 631 | ||
| 632 | install_buildtools = os.path.join(args.build_dir, 'layers/oe-scripts/install-buildtools') | 632 | install_buildtools = os.path.join(args.setup_dir, 'layers/oe-scripts/install-buildtools') |
| 633 | buildtools_download_dir = os.path.join(args.build_dir, 'buildtools-downloads/{}'.format(time.strftime("%Y%m%d%H%M%S"))) | 633 | buildtools_download_dir = os.path.join(args.setup_dir, 'buildtools-downloads/{}'.format(time.strftime("%Y%m%d%H%M%S"))) |
| 634 | print("Buildtools archive is downloaded into {} and its content installed into {}".format(buildtools_download_dir, buildtools_install_dir)) | 634 | print("Buildtools archive is downloaded into {} and its content installed into {}".format(buildtools_download_dir, buildtools_install_dir)) |
| 635 | subprocess.check_call("{} -d {} --downloads-directory {}".format(install_buildtools, buildtools_install_dir, buildtools_download_dir), shell=True) | 635 | subprocess.check_call("{} -d {} --downloads-directory {}".format(install_buildtools, buildtools_install_dir, buildtools_download_dir), shell=True) |
| 636 | 636 | ||
| @@ -696,24 +696,24 @@ def settings_func(top_dir, all_settings, args): | |||
| 696 | elif args.subcommand == 'set' or args.subcommand == 'unset': | 696 | elif args.subcommand == 'set' or args.subcommand == 'unset': |
| 697 | change_setting(top_dir, args) | 697 | change_setting(top_dir, args) |
| 698 | 698 | ||
| 699 | def get_build_dir_via_bbpath(): | 699 | def get_setup_dir_via_bbpath(): |
| 700 | bbpath = os.environ.get('BBPATH') | 700 | bbpath = os.environ.get('BBPATH') |
| 701 | if bbpath: | 701 | if bbpath: |
| 702 | bitbake_dir = os.path.normpath(bbpath.split(':')[0]) | 702 | bitbake_dir = os.path.normpath(bbpath.split(':')[0]) |
| 703 | if os.path.exists(os.path.join(bitbake_dir,'init-build-env')): | 703 | if os.path.exists(os.path.join(bitbake_dir,'init-build-env')): |
| 704 | build_dir = os.path.dirname(bitbake_dir) | 704 | setup_dir = os.path.dirname(bitbake_dir) |
| 705 | return build_dir | 705 | return setup_dir |
| 706 | return None | 706 | return None |
| 707 | 707 | ||
| 708 | def get_top_dir(args, settings): | 708 | def get_top_dir(args, settings): |
| 709 | build_dir_via_bbpath = get_build_dir_via_bbpath() | 709 | setup_dir_via_bbpath = get_setup_dir_via_bbpath() |
| 710 | if build_dir_via_bbpath: | 710 | if setup_dir_via_bbpath: |
| 711 | top_dir = os.path.dirname(build_dir_via_bbpath) | 711 | top_dir = os.path.dirname(setup_dir_via_bbpath) |
| 712 | if os.path.exists(default_settings_path(top_dir)): | 712 | if os.path.exists(default_settings_path(top_dir)): |
| 713 | return top_dir | 713 | return top_dir |
| 714 | 714 | ||
| 715 | if hasattr(args, 'build_dir'): | 715 | if hasattr(args, 'setup_dir'): |
| 716 | top_dir = os.path.dirname(os.path.normpath(args.build_dir)) | 716 | top_dir = os.path.dirname(os.path.normpath(args.setup_dir)) |
| 717 | return top_dir | 717 | return top_dir |
| 718 | 718 | ||
| 719 | top_dir_prefix = settings['default']['top-dir-prefix'] | 719 | top_dir_prefix = settings['default']['top-dir-prefix'] |
| @@ -734,12 +734,12 @@ def merge_settings(builtin_settings, global_settings, local_settings, cmdline_se | |||
| 734 | return all_settings | 734 | return all_settings |
| 735 | 735 | ||
| 736 | def main(): | 736 | def main(): |
| 737 | def add_build_dir_arg(parser): | 737 | def add_setup_dir_arg(parser): |
| 738 | build_dir = get_build_dir_via_bbpath() | 738 | setup_dir = get_setup_dir_via_bbpath() |
| 739 | if build_dir: | 739 | if setup_dir: |
| 740 | parser.add_argument('--build-dir', default=build_dir, help="Path to the build, default is %(default)s via BBPATH") | 740 | parser.add_argument('--setup-dir', default=setup_dir, help="Path to the setup, default is %(default)s via BBPATH") |
| 741 | else: | 741 | else: |
| 742 | parser.add_argument('--build-dir', required=True, help="Path to the build") | 742 | parser.add_argument('--setup-dir', required=True, help="Path to the setup") |
| 743 | 743 | ||
| 744 | parser = argparse.ArgumentParser( | 744 | parser = argparse.ArgumentParser( |
| 745 | description="BitBake setup utility. Run with 'init' argument to get started.", | 745 | description="BitBake setup utility. Run with 'init' argument to get started.", |
| @@ -761,24 +761,24 @@ def main(): | |||
| 761 | parser_list.add_argument('--write-json', action='store', help='Write available configurations into a json file so they can be programmatically processed.') | 761 | parser_list.add_argument('--write-json', action='store', help='Write available configurations into a json file so they can be programmatically processed.') |
| 762 | parser_list.set_defaults(func=list_configs) | 762 | parser_list.set_defaults(func=list_configs) |
| 763 | 763 | ||
| 764 | parser_init = subparsers.add_parser('init', help='Select a configuration and initialize a build from it') | 764 | parser_init = subparsers.add_parser('init', help='Select a configuration and initialize a setup from it') |
| 765 | parser_init.add_argument('config', nargs='*', help="path/URL/id to a configuration file (use 'list' command to get available ids), followed by configuration options. Bitbake-setup will ask to choose from available choices if command line doesn't completely specify them.") | 765 | parser_init.add_argument('config', nargs='*', help="path/URL/id to a configuration file (use 'list' command to get available ids), followed by configuration options. Bitbake-setup will ask to choose from available choices if command line doesn't completely specify them.") |
| 766 | parser_init.add_argument('--non-interactive', action='store_true', help='Do not ask to interactively choose from available options; if bitbake-setup cannot make a decision it will stop with a failure.') | 766 | parser_init.add_argument('--non-interactive', action='store_true', help='Do not ask to interactively choose from available options; if bitbake-setup cannot make a decision it will stop with a failure.') |
| 767 | parser_init.add_argument('--source-overrides', action='store', help='Override sources information (repositories/revisions) with values from a local json file.') | 767 | parser_init.add_argument('--source-overrides', action='store', help='Override sources information (repositories/revisions) with values from a local json file.') |
| 768 | parser_init.add_argument('--build-dir-name', action='store', help='A custom build directory name under the top directory.') | 768 | parser_init.add_argument('--setup-dir-name', action='store', help='A custom setup directory name under the top directory.') |
| 769 | parser_init.add_argument('--skip-selection', action='append', help='Do not select and set an option/fragment from available choices; the resulting bitbake configuration may be incomplete.') | 769 | parser_init.add_argument('--skip-selection', action='append', help='Do not select and set an option/fragment from available choices; the resulting bitbake configuration may be incomplete.') |
| 770 | parser_init.set_defaults(func=init_config) | 770 | parser_init.set_defaults(func=init_config) |
| 771 | 771 | ||
| 772 | parser_status = subparsers.add_parser('status', help='Check if the build needs to be synchronized with configuration') | 772 | parser_status = subparsers.add_parser('status', help='Check if the setup needs to be synchronized with configuration') |
| 773 | add_build_dir_arg(parser_status) | 773 | add_setup_dir_arg(parser_status) |
| 774 | parser_status.set_defaults(func=build_status) | 774 | parser_status.set_defaults(func=build_status) |
| 775 | 775 | ||
| 776 | parser_update = subparsers.add_parser('update', help='Update a build to be in sync with configuration') | 776 | parser_update = subparsers.add_parser('update', help='Update a setup to be in sync with configuration') |
| 777 | add_build_dir_arg(parser_update) | 777 | add_setup_dir_arg(parser_update) |
| 778 | parser_update.set_defaults(func=build_update) | 778 | parser_update.set_defaults(func=build_update) |
| 779 | 779 | ||
| 780 | parser_install_buildtools = subparsers.add_parser('install-buildtools', help='Install buildtools which can help fulfil missing or incorrect dependencies on the host machine') | 780 | parser_install_buildtools = subparsers.add_parser('install-buildtools', help='Install buildtools which can help fulfil missing or incorrect dependencies on the host machine') |
| 781 | add_build_dir_arg(parser_install_buildtools) | 781 | add_setup_dir_arg(parser_install_buildtools) |
| 782 | parser_install_buildtools.add_argument('--force', action='store_true', help='Force a reinstall of buildtools over the previous installation.') | 782 | parser_install_buildtools.add_argument('--force', action='store_true', help='Force a reinstall of buildtools over the previous installation.') |
| 783 | parser_install_buildtools.set_defaults(func=install_buildtools) | 783 | parser_install_buildtools.set_defaults(func=install_buildtools) |
| 784 | 784 | ||
| @@ -786,7 +786,7 @@ def main(): | |||
| 786 | parser_settings_arg_global.add_argument('--global', action='store_true', help="Modify the setting in a global settings file, rather than one specific to a top directory") | 786 | parser_settings_arg_global.add_argument('--global', action='store_true', help="Modify the setting in a global settings file, rather than one specific to a top directory") |
| 787 | 787 | ||
| 788 | parser_settings = subparsers.add_parser('settings', | 788 | parser_settings = subparsers.add_parser('settings', |
| 789 | help='List current settings, or set or unset a setting in a settings file (e.g. the default prefix and name of the top directory, the location of build configuration registry, downloads directory and other settings specific to a top directory)') | 789 | help='List current settings, or set or unset a setting in a settings file (e.g. the default prefix and name of the top directory, the location of configuration registry, downloads directory and other settings specific to a top directory)') |
| 790 | parser_settings.set_defaults(func=settings_func) | 790 | parser_settings.set_defaults(func=settings_func) |
| 791 | 791 | ||
| 792 | subparser_settings = parser_settings.add_subparsers(dest="subcommand", required=True, help="The action to perform on the settings file") | 792 | subparser_settings = parser_settings.add_subparsers(dest="subcommand", required=True, help="The action to perform on the settings file") |
| @@ -820,9 +820,9 @@ def main(): | |||
| 820 | level=logger.getEffectiveLevel()) | 820 | level=logger.getEffectiveLevel()) |
| 821 | 821 | ||
| 822 | if 'func' in args: | 822 | if 'func' in args: |
| 823 | if hasattr(args, 'build_dir'): | 823 | if hasattr(args, 'setup_dir'): |
| 824 | if not os.path.exists(os.path.join(args.build_dir,'build', 'init-build-env')): | 824 | if not os.path.exists(os.path.join(args.setup_dir,'build', 'init-build-env')): |
| 825 | print("Not a valid build directory: build/init-build-env does not exist in {}".format(args.build_dir)) | 825 | print("Not a valid setup directory: build/init-build-env does not exist in {}".format(args.setup_dir)) |
| 826 | return | 826 | return |
| 827 | 827 | ||
| 828 | if not hasattr(args, 'non_interactive'): | 828 | if not hasattr(args, 'non_interactive'): |
