Loadable modules are linked, using a linked script, built by a cmake
script. That linker script includes multiple existing linker script
fragments. Each of those fragments defines 1 or more sections and
respective PHDRs. However, some of those scripts, e.g.
common_rodata_linker_script.txt and data_linker_script.txt add
sections to the same rodata_phdr PHDR. This makes the linker
allocate sections in that PHDR twice in the resulting output file:
one copy is real and the other one is filled with zeros. Removing
one of the PHDR definitions solves the problem and removes about
60KiB of empty space from the output file.
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
CMakeLists.txt file of common modules files use isZephyr macro which was
undefined on lmdk build scripts.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
Added building a static library containing common functions for modules
provided by sof. Native loadable modules are statically linked to it.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
At the beginning of the .text section there must be a structure containing
information about the version of the api used by the library. It's absence
will cause sof to interpret a random literal as a version and incorrectly
load a library.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
The .module section contains the module manifest read by rimage. It should
not be included in the final loadable module image. Flags of this section
are now modified using objcopy to ignore it by rimage.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
The .data and .rodata sections are placed by rimage into one segment of
a resulting firmware image. So aligning the .rodata section to the page
boundary is just a waste of memory.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
Changed linker options to enable linking with libgcc and libc. This change
is required to allow use compiler builtins functions (like __divdi3) and
dynamic memory allocation functions.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
This commit adds a necessary symbols in the linker script which allows use
a memory allocation functions from libc (malloc, calloc, etc.) in loadable
modules.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
As rimage was moved to sof repository it is necessary to update path to
rimage include directory in lmdk build system.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
Changed the compiler used to build loadable modules to clang. It has been
used for a long time to build sof. The latest xtensa toolchain no longer
has xcc compiler.
Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
Path to rimage and private key had been failing to be used while
provided in form of relative path using dots.
Changed how rimage is discovered in the scripts:
* rimage is searched for using find_program with paths and hints provided
* changed RIMAGE_COMMAND to RIMAGE_INSTALL_DIR so end-user may specify
directory where rimage executable is placed. It will be used by
find_program.
* If RIMAGE_INSTALL_DIR is not provided, find_program will try to
search for rimage in the directory where SOF project installs it
(west_dir/build-rimage).
* Updated README.md with instructions on how to build:
- simplified configure and build commands
- updated explanations on how to use RIMAGE_INSTALL_DIR
- added information on how to use toolchain file
* private key path was parsed incorrectly when provided windows path
style using backslashes. It was passed to rimage as is resulting in the
invalid path as the last slash was made by rimage as forward slash.
Added path normalization what fixed the problem.
Signed-off-by: Andrey Borisovich <andrey.borisovich@intel.com>
Initial commit with set of cmake and linker scripts to build loadable
modules binary.
Things yet TODO:
add all necessary Dev Kit header files to include dir,
replace dummy example with somewhat useful module example.
Signed-off-by: Serhiy Katsyuba <serhiy.katsyuba@intel.com>