From ddd795a028b1a4f9e9fa672e7791b1750f34d690 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Tue, 7 Jan 2025 18:05:00 +0100 Subject: [PATCH] tests: llext-edk: get the Zephyr SDK path from build_info.yml The LLEXT EDK test works by packaging an EDK and then testing its functionality to build the extension in an external CMake build step. That CMakelists.txt file currently references the required tools using the ZEPHYR_SDK_INSTALL_DIR environment variable, which must be manually set by the user. This change modifies the test to read the newly added 'build_info.yml' file, generated by Zephyr during the first build step. This allows to set the ZEPHYR_SDK_INSTALL_DIR environment variable automatically based on the (possibly auto-discovered) SDK path. A few minor compliance cleanups are also included. Signed-off-by: Luca Burelli --- tests/misc/llext-edk/pytest/test_edk.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/misc/llext-edk/pytest/test_edk.py b/tests/misc/llext-edk/pytest/test_edk.py index 860c4aefd59e3d..9c5159373f3072 100644 --- a/tests/misc/llext-edk/pytest/test_edk.py +++ b/tests/misc/llext-edk/pytest/test_edk.py @@ -10,16 +10,22 @@ from subprocess import check_output import pytest +import yaml from twister_harness import DeviceAdapter logger = logging.getLogger(__name__) + def test_edk(unlaunched_dut: DeviceAdapter): - # Need to have the ZEPHYR_SDK_INSTALL_DIR environment variable set, - # otherwise can't actually build the edk - if os.environ.get("ZEPHYR_SDK_INSTALL_DIR") is None: - logger.warning("ZEPHYR_SDK_INSTALL_DIR is not set, skipping test") - pytest.skip("ZEPHYR_SDK_INSTALL_DIR is not set") + # Get the SDK path from build_info.yml + build_dir = str(unlaunched_dut.device_config.build_dir) + with open(Path(build_dir) / "build_info.yml") as f: + build_info = yaml.safe_load(f) + if build_info["cmake"]["toolchain"]["name"] != "zephyr": + logger.warning("This test requires the Zephyr SDK to be used, skipping") + pytest.skip("The Zephyr SDK must be used") + + sdk_dir = build_info["cmake"]["toolchain"]["path"] # Can we build the edk? command = [ @@ -64,6 +70,7 @@ def test_edk(unlaunched_dut: DeviceAdapter): # knows where the EDK is installed edk_dir = Path(tempdir) / "llext-edk" env = os.environ.copy() + env.update({"ZEPHYR_SDK_INSTALL_DIR": sdk_dir}) env.update({"LLEXT_EDK_INSTALL_DIR": edk_dir}) # Build the extension using the edk @@ -92,7 +99,7 @@ def test_edk(unlaunched_dut: DeviceAdapter): "--build-dir", unlaunched_dut.device_config.build_dir, "--", - f"-DEXTENSION_DIR={tempdir_extension}/build/" + f"-DEXTENSION_DIR={tempdir_extension}/build/", ] logger.debug(f"west command: {command}") output = check_output(command, text=True)