diff mbox series

[1/1] bitbake-setup: Initialize build environment after setup/update

Message ID 20251224151248.3313463-2-adrian.freihofer@siemens.com
State New
Headers show
Series bitbake-setup: Initialize build environment after setup/update | expand

Commit Message

AdrianF Dec. 24, 2025, 3:12 p.m. UTC
From: Adrian Freihofer <adrian.freihofer@siemens.com>

Add verify_and_prepare_environment() function to source the init-build-env
script after configuration setup or updates. This ensures the build
environment is properly initialized and IDE configuration files (such as
.vscode/settings.json) are created before the user starts the IDE.

Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com>
---
 bin/bitbake-setup | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/bin/bitbake-setup b/bin/bitbake-setup
index 73f734e73..4c9a86b34 100755
--- a/bin/bitbake-setup
+++ b/bin/bitbake-setup
@@ -324,6 +324,8 @@  The bitbake configuration files (local.conf, bblayers.conf and more) can be foun
     logger.plain("{}\n".format(fragment_note))
     logger.plain("The bitbake configuration files (local.conf, bblayers.conf and more) can be found in\n    {}/conf\n".format(bitbake_builddir))
 
+    return init_script
+
 def get_registry_config(registry_path, id):
     for root, dirs, files in os.walk(registry_path):
         for f in files:
@@ -340,8 +342,9 @@  def update_build(config, confdir, setupdir, layerdir, d, update_bb_conf="prompt"
     sources_fixed_revisions = checkout_layers(layer_config, layerdir, d)
     bitbake_config = config["bitbake-config"]
     thisdir = os.path.dirname(config["path"]) if config["type"] == 'local' else None
-    setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir, update_bb_conf)
+    init_script = setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir, update_bb_conf)
     write_sources_fixed_revisions(confdir, sources_fixed_revisions)
+    return init_script
 
 def int_input(allowed_values, prompt=''):
     n = None
@@ -511,6 +514,14 @@  def obtain_overrides(args):
 
     return overrides
 
+def verify_and_prepare_environment(init_script):
+    """
+    Source the build environment init-build-env script.
+
+    This verifies the setup is working.
+    Additionally it may initialize the environment with e.g. a .vscode/settings.json if needed.
+    """
+    bb.process.run(['sh', '-c', '. {}'.format(init_script)])
 
 def init_config(top_dir, settings, args):
     create_siteconf(top_dir, args.non_interactive, settings)
@@ -580,9 +591,12 @@  def init_config(top_dir, settings, args):
     bb.event.register("bb.build.TaskProgress", handle_task_progress, data=d)
 
     write_upstream_config(confdir, upstream_config)
-    update_build(upstream_config, confdir, setupdir, layerdir, d, update_bb_conf="yes")
+    init_script = update_build(upstream_config, confdir, setupdir, layerdir, d, update_bb_conf="yes")
     commit_config(confdir)
 
+    # Source the build environment to verify setup and prepare for VSCode if needed
+    verify_and_prepare_environment(init_script)
+
     bb.event.remove("bb.build.TaskProgress", None)
 
 def get_diff(file1, file2):
@@ -649,16 +663,18 @@  def build_status(top_dir, settings, args, d, update=False):
         logger.plain('\nConfiguration in {} has changed:\n{}'.format(setupdir, config_diff))
         if update:
             commit_config(confdir)
-            update_build(new_upstream_config, confdir, setupdir, layerdir, d,
+            init_script = update_build(new_upstream_config, confdir, setupdir, layerdir, d,
                          update_bb_conf=args.update_bb_conf)
+            verify_and_prepare_environment(init_script)
         else:
             bb.process.run('git -C {} restore config-upstream.json'.format(confdir))
         return
 
     if are_layers_changed(current_upstream_config["data"]["sources"], layerdir, d):
         if update:
-            update_build(current_upstream_config, confdir, setupdir, layerdir,
+            init_script = update_build(current_upstream_config, confdir, setupdir, layerdir,
                          d, update_bb_conf=args.update_bb_conf)
+            verify_and_prepare_environment(init_script)
         return
 
     logger.plain("\nConfiguration in {} has not changed.".format(setupdir))