kernel: allow linking a prebuilt library instead of compiling
This adds a very primitive logic to allow linking a prebuilt static library of kernel code instead of building the kernel from source. Note that the library is built with a specific set of kconfigs, and they must match when building applications, or else there would be mysterious crashes. Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This commit is contained in:
parent
29a2dbe82a
commit
45f549dee9
1 changed files with 19 additions and 1 deletions
|
@ -3,6 +3,20 @@
|
||||||
# kernel is a normal CMake library and not a zephyr_library because it
|
# kernel is a normal CMake library and not a zephyr_library because it
|
||||||
# should not be --whole-archive'd
|
# should not be --whole-archive'd
|
||||||
|
|
||||||
|
# If a pre-built static library containing kernel code exists in
|
||||||
|
# this directory, libkernel.a, link it with the application code
|
||||||
|
# instead of building from source.
|
||||||
|
zephyr_library_get_current_dir_lib_name(${ZEPHYR_BASE} libkernel_stem)
|
||||||
|
set(libkernel ${CMAKE_CURRENT_SOURCE_DIR}/lib${libkernel_stem}${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||||
|
unset(libkernel_stem)
|
||||||
|
|
||||||
|
if(EXISTS ${libkernel})
|
||||||
|
|
||||||
|
add_library(kernel INTERFACE)
|
||||||
|
target_link_libraries(kernel INTERFACE ${libkernel})
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
list(APPEND kernel_files
|
list(APPEND kernel_files
|
||||||
banner.c
|
banner.c
|
||||||
device.c
|
device.c
|
||||||
|
@ -92,6 +106,10 @@ target_include_directories(kernel PRIVATE
|
||||||
${ARCH_DIR}/${ARCH}/include
|
${ARCH_DIR}/${ARCH}/include
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_link_libraries(kernel zephyr_interface)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
add_dependencies(kernel zephyr_generated_headers)
|
add_dependencies(kernel zephyr_generated_headers)
|
||||||
|
|
||||||
target_link_libraries(kernel zephyr_interface)
|
unset(libkernel)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue