Skip to content

Commit

Permalink
deployable build: install LLEXT modules into the tree
Browse files Browse the repository at this point in the history
Install loadable LLEXT modules into the deployment tree and
create symbolic links for them.

Signed-off-by: Guennadi Liakhovetski <[email protected]>
  • Loading branch information
lyakh committed Apr 9, 2024
1 parent 755a4a7 commit e654b60
Showing 1 changed file with 57 additions and 1 deletion.
58 changes: 57 additions & 1 deletion scripts/xtensa-build-zephyr.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@

sof_fw_version = None

signing_key = None

if py_platform.system() == "Windows":
xtensa_tools_version_postfix = "-win32"
elif py_platform.system() == "Linux":
Expand Down Expand Up @@ -671,12 +673,12 @@ def rimage_options(platform_dict):
example: [ (-f, 2.5.0), (-b, 1), (-k, key.pem),... ]
"""
global signing_key
opts = []

if args.verbose > 0:
opts.append(("-v",) * args.verbose)

signing_key = None
if args.key:
key_path = pathlib.Path(args.key)
assert key_path.exists(), f"{key_path} not found"
Expand Down Expand Up @@ -899,6 +901,58 @@ def build_platforms():
symlinks=True, ignore_dangling_symlinks=True, dirs_exist_ok=True)


def install_lib(platform, sof_output_dir, abs_build_dir):
global signing_key
with os.scandir(str(abs_build_dir)) as iter:
for entry in iter:
if (not entry.is_dir or
not entry.name.endswith('_llext')):
continue
uuids = pathlib.Path(entry.path) / 'llext.uuid'
if not os.path.exists(uuids):
continue

# replace '_llext' with '.llext', e.g.
# eq_iir_llext/eq_iir.llext
llext_base = entry.name[:-6]
llext_file = llext_base + '.llext'

sof_lib_dir = pathlib.Path(sof_output_dir / '..' / 'sof-ipc4-lib' / platform)
sof_lib_dir.mkdir(parents=True, exist_ok=True)
dst = sof_lib_dir / llext_file
rimage_executable = shutil.which("rimage", path=RIMAGE_BUILD_DIR)
rimage_cfg = pathlib.Path(entry.path) / 'rimage_config.toml'
llext_input = pathlib.Path(entry.path) / str(llext_base + '.so')
llext_output = pathlib.Path(entry.path) / llext_file

sign_cmd = [str(rimage_executable), "-o", str(llext_output),
"-e", "-c", str(rimage_cfg),
"-k", str(signing_key), "-l", "-r",
str(llext_input)]
execute_command(sign_cmd, cwd=west_top)

try:
fdst = open(str(dst), 'wb')
fllext = open(str(llext_output), 'rb')
fman = open(str(llext_output) + '.xman', 'rb')
except:
sys.exit("Failed to open files")

shutil.copyfileobj(fman, fdst)
shutil.copyfileobj(fllext, fdst)

fdst.close()
fman.close()
fllext.close()

with open(uuids, 'r') as f_llext:
lines = f_llext.readlines()
for line in lines:
symlink_or_copy(sof_lib_dir, llext_file,
sof_lib_dir, line.strip() + '.bin')
f_llext.close()


def install_platform(platform, sof_output_dir, platf_build_environ):

# Keep in sync with caller
Expand Down Expand Up @@ -1030,6 +1084,8 @@ class InstFile:
gzip_res.result() # throws exception if gzip unexpectedly failed
gzip_threads.shutdown()

if args.deployable_build and platform_configs[platform].ipc4:
install_lib(platform, sof_output_dir, abs_build_dir)

# Zephyr's CONFIG_KERNEL_BIN_NAME default value
BIN_NAME = 'zephyr'
Expand Down

0 comments on commit e654b60

Please sign in to comment.