@@ -2574,6 +2574,9 @@ class DevtoolIdeSdkTests(DevtoolBase):
def _sources_scripts_dir(self, src_dir):
return os.path.realpath(os.path.join(src_dir, 'oe-scripts'))
+ def _sources_workdir_dir(self, src_dir):
+ return os.path.realpath(os.path.join(src_dir, 'oe-workdir'))
+
def _workspace_gdbinit_dir(self, recipe_name):
return os.path.realpath(os.path.join(self.builddir, 'workspace', 'ide-sdk', recipe_name, 'scripts', 'gdbinit'))
@@ -2642,7 +2645,7 @@ class DevtoolIdeSdkTests(DevtoolBase):
self._workspace_scripts_dir(recipe_name), i_and_d_script)
self.assertExists(i_and_d_script_path)
- def _devtool_ide_sdk_qemu(self, tempdir, qemu, recipe_name, example_exe):
+ def _devtool_ide_sdk_qemu(self, tempdir, qemu, recipe_name, example_exe, compile_cmd):
"""Verify deployment and execution in Qemu system work for one recipe.
This function checks the entire SDK workflow: changing the code, recompiling
@@ -2687,6 +2690,7 @@ class DevtoolIdeSdkTests(DevtoolBase):
cpp_code = cpp_code.replace(DevtoolIdeSdkTests.MAGIC_STRING_ORIG, MAGIC_STRING_NEW)
with open(cpp_example_lib_hpp, 'w') as file:
file.write(cpp_code)
+ runCmd(compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
runCmd(install_deploy_cmd, cwd=tempdir, output_log=self._cmd_logger)
# Verify the modified example prints the modified magic string
@@ -2817,6 +2821,7 @@ class DevtoolIdeSdkTests(DevtoolBase):
self.assertEqual(len(config_presets), 1)
cmake_exe = config_presets[0]["cmakeExecutable"]
preset_name = config_presets[0]["name"]
+ compile_cmd = '%s --build --preset %s' % (cmake_exe, preset_name)
# Verify the wrapper for cmake native is available
self.assertExists(cmake_exe)
@@ -2826,28 +2831,59 @@ class DevtoolIdeSdkTests(DevtoolBase):
self.assertIn(preset_name, result.output)
# Verify cmake re-uses the o files compiled by bitbake
- result = runCmd('%s --build --preset %s' %
- (cmake_exe, preset_name), cwd=tempdir, output_log=self._cmd_logger)
+ result = runCmd(compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
self.assertIn("ninja: no work to do.", result.output)
# Verify the unit tests work (in Qemu user mode)
- result = runCmd('%s --build --preset %s --target test' %
- (cmake_exe, preset_name), cwd=tempdir, output_log=self._cmd_logger)
+ result = runCmd('%s --target test' % compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
self.assertIn("100% tests passed", result.output)
# Verify re-building and testing works again
- result = runCmd('%s --build --preset %s --target clean' %
- (cmake_exe, preset_name), cwd=tempdir, output_log=self._cmd_logger)
+ result = runCmd('%s --target clean' % compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
self.assertIn("Cleaning", result.output)
- result = runCmd('%s --build --preset %s' %
- (cmake_exe, preset_name), cwd=tempdir, output_log=self._cmd_logger)
+ result = runCmd(compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
self.assertIn("Building", result.output)
self.assertIn("Linking", result.output)
- result = runCmd('%s --build --preset %s --target test' %
- (cmake_exe, preset_name), cwd=tempdir, output_log=self._cmd_logger)
+ result = runCmd('%s --target test' % compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
self.assertIn("Running tests...", result.output)
self.assertIn("100% tests passed", result.output)
+ return compile_cmd
+
+ def _verify_meson_build(self, tempdir, recipe_name):
+ """Verify meson works as expected
+
+ Check if compiling works
+ Check if unit tests can be executed in qemu (not qemu-system)
+ """
+ meson_exe = os.path.join(self._workspace_scripts_dir(recipe_name), "meson")
+ self.assertExists(meson_exe)
+ build_dir = os.path.join(self._sources_workdir_dir(tempdir), recipe_name + "-1.0")
+ compile_cmd = '%s compile -C %s' % (meson_exe, build_dir)
+
+ # Verify meson re-uses the o files compiled by bitbake
+ result = runCmd(compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
+ self.assertIn("ninja: no work to do.", result.output)
+
+ # Verify the unit tests work (in Qemu user mode)
+ result = runCmd('%s test -C %s' % (meson_exe, build_dir),
+ cwd=tempdir, output_log=self._cmd_logger)
+ self.assertEqual(result.status, 0)
+ self.assertIn("Fail: 0", result.output)
+
+ # Verify re-building and testing works again
+ result = runCmd('%s compile -C %s --clean' % (meson_exe, build_dir),
+ cwd=tempdir, output_log=self._cmd_logger)
+ self.assertIn("Cleaning...", result.output)
+ result = runCmd(compile_cmd, cwd=tempdir, output_log=self._cmd_logger)
+ self.assertIn("Linking target", result.output)
+ result = runCmd('%s test -C %s' % (meson_exe, build_dir),
+ cwd=tempdir, output_log=self._cmd_logger)
+ self.assertEqual(result.status, 0)
+ self.assertIn("Fail: 0", result.output)
+
+ return compile_cmd
+
def _verify_service_running(self, qemu, service_name):
"""Helper to verify a service is running in Qemu"""
status, output = qemu.run("pgrep %s" % service_name)
@@ -2897,8 +2933,8 @@ class DevtoolIdeSdkTests(DevtoolBase):
runCmd(bitbake_sdk_cmd, output_log=self._cmd_logger)
self._gdb_cross()
- self._verify_cmake_preset(tempdir)
- self._devtool_ide_sdk_qemu(tempdir, qemu, recipe_name, example_exe)
+ compile_cmd = self._verify_cmake_preset(tempdir)
+ self._devtool_ide_sdk_qemu(tempdir, qemu, recipe_name, example_exe, compile_cmd)
# Verify the oe-scripts sym-link is valid
self.assertEqual(self._workspace_scripts_dir(
@@ -2929,7 +2965,8 @@ class DevtoolIdeSdkTests(DevtoolBase):
runCmd(bitbake_sdk_cmd, output_log=self._cmd_logger)
self._gdb_cross()
- self._devtool_ide_sdk_qemu(tempdir, qemu, recipe_name, example_exe)
+ compile_cmd = self._verify_meson_build(tempdir, recipe_name)
+ self._devtool_ide_sdk_qemu(tempdir, qemu, recipe_name, example_exe, compile_cmd)
# Verify the oe-scripts sym-link is valid
self.assertEqual(self._workspace_scripts_dir(