Linux Audio

Check our new training course

Loading...
# Copyright (c) 2023 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig LLEXT
	bool "Linkable loadable extensions"
	select CACHE_MANAGEMENT if DCACHE
	select KERNEL_WHOLE_ARCHIVE
	help
	  Enable the linkable loadable extension subsystem

if LLEXT

choice LLEXT_BINARY_TYPE
	prompt "Binary object type for llext"
	default LLEXT_TYPE_ELF_OBJECT if ARM
	default LLEXT_TYPE_ELF_SHAREDLIB if XTENSA
	help
	  Object type for llext

config LLEXT_TYPE_ELF_OBJECT
	bool "Single object ELF file"
	help
	  Build and expect object files as binary object type for the
	  llext subsystem. A single compiler invocation is used to
	  generate the object file.

config LLEXT_TYPE_ELF_RELOCATABLE
	bool "Relocatable ELF file"
	help
	  Build and expect relocatable (partially linked) files as the
	  binary object type for the llext subsystem. These object files
	  are generated by the linker by combining multiple object files
	  into a single one.

config LLEXT_TYPE_ELF_SHAREDLIB
	bool "Shared library ELF file"
	help
	  Build and expect shared libraries as binary object type for
	  the llext subsystem. The usual linking process is used to
	  generate the shared library from multiple object files.

endchoice

config LLEXT_HEAP_SIZE
	int "llext heap memory size in kilobytes"
	default 8
	help
	  Heap size in kilobytes available to llext for dynamic allocation

config LLEXT_SHELL
	bool "llext shell commands"
	depends on SHELL
	help
	  Manage llext with shell commands for loading, unloading, and introspection

config LLEXT_SHELL_MAX_SIZE
	int "Maximum size of llext in bytes"
	depends on LLEXT_SHELL
	default 8192
	help
	  When loading llext with shell it is stored in a temporary buffer of this size

config LLEXT_STORAGE_WRITABLE
	bool "llext storage is writable"
	default y if XTENSA
	help
	  Select if LLEXT storage is writable, i.e. if extensions are stored in
	  RAM and can be modified in place

config LLEXT_EXPORT_BUILTINS_BY_SLID
	bool "Export built-in symbols to llexts via SLIDs"
	help
	  When enabled, symbols exported from the Zephyr kernel
	  or application (via EXPORT_SYMBOL) are linked to LLEXTs
	  via Symbol Link Identifiers (SLIDs) instead of name.

	  Enabling this option provides a huge size reduction,
	  makes the linking process faster and provides more
	  confidentiality, as exported symbol names are dropped
	  from the binary. However, it can make LLEXT debugging
	  harder and prevents usage of 'llext_find_sym' to look
	  up symbols from the built-in table by name. It also
	  requires the LLEXTs to be post-processed after build.

module = LLEXT
module-str = llext
source "subsys/logging/Kconfig.template.log_config"

endif

menu "Linkable loadable Extension Development Kit (EDK)"

config LLEXT_EDK_NAME
	string "Name for llext EDK (Extension Development Kit)"
	default "llext-edk"
	help
	  Name will be used when generating the EDK file, as <name>.tar.xz.
	  It will also be used, normalized, as the prefix for the variable
	  stating EDK location, used on generated Makefile.cflags. For
	  instance, the default name, "llext-edk", becomes LLEXT_EDK_INSTALL_DIR.

config LLEXT_EDK_USERSPACE_ONLY
	bool "Only generate the Userpace codepath on syscall stubs for the EDK"
	help
	  Syscall stubs can contain code that verifies if running code is at user
	  or kernel space and route the call accordingly. If the EDK is expected
	  to be used by userspace only extensions, this option will make EDK stubs
	  not contain the routing code, and only generate the userspace one.

endmenu