Skip to content

Commit

Permalink
tests: llext-edk: get the Zephyr SDK path from build_info.yml
Browse files Browse the repository at this point in the history
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 <l.burelli@arduino.cc>
  • Loading branch information
pillo79 authored and kartben committed Jan 10, 2025
1 parent 2e43656 commit ddd795a
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions tests/misc/llext-edk/pytest/test_edk.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit ddd795a

Please sign in to comment.