summaryrefslogtreecommitdiffstats
path: root/bitbake/bin/bitbake-setup
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/bin/bitbake-setup')
-rwxr-xr-xbitbake/bin/bitbake-setup94
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
117def setup_bitbake_build(bitbake_config, layerdir, builddir, thisdir): 117def 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
270def update_build(config, confdir, builddir, layerdir, d): 270def 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
281def int_input(allowed_values): 281def 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
515def build_status(top_dir, settings, args, d, update=False): 515def 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
548def build_update(top_dir, settings, args, d): 548def 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
618def install_buildtools(top_dir, settings, args, d): 618def 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
699def get_build_dir_via_bbpath(): 699def 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
708def get_top_dir(args, settings): 708def 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
736def main(): 736def 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'):