diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c44e41c810..d8f2801d011 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -876,6 +876,13 @@ foreach(zephyr_lib ${ZEPHYR_LIBS_PROPERTY}) add_dependencies(${zephyr_lib} zephyr_generated_headers) endforeach() +if(CONFIG_LLEXT) + set(WHOLE_ARCHIVE_LIBS ${ZEPHYR_LIBS_PROPERTY} kernel) +else() + set(WHOLE_ARCHIVE_LIBS ${ZEPHYR_LIBS_PROPERTY}) + set(NO_WHOLE_ARCHIVE_LIBS kernel) +endif() + get_property(OUTPUT_FORMAT GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT) if (CONFIG_CODE_DATA_RELOCATION) diff --git a/cmake/linker/arcmwdt/target.cmake b/cmake/linker/arcmwdt/target.cmake index 067c2dc286e..f2247ba4540 100644 --- a/cmake/linker/arcmwdt/target.cmake +++ b/cmake/linker/arcmwdt/target.cmake @@ -97,9 +97,9 @@ function(toolchain_ld_link_elf) ${LINKERFLAGPREFIX}--entry=__start ${LINKERFLAGPREFIX}--Map=${TOOLCHAIN_LD_LINK_ELF_OUTPUT_MAP} ${LINKERFLAGPREFIX}--whole-archive - ${ZEPHYR_LIBS_PROPERTY} + ${WHOLE_ARCHIVE_LIBS} ${LINKERFLAGPREFIX}--no-whole-archive - kernel + ${NO_WHOLE_ARCHIVE_LIBS} $ ${LIB_INCLUDE_DIR} -L${PROJECT_BINARY_DIR} diff --git a/cmake/linker/ld/target.cmake b/cmake/linker/ld/target.cmake index b57f8902044..2d60e8ea63d 100644 --- a/cmake/linker/ld/target.cmake +++ b/cmake/linker/ld/target.cmake @@ -134,9 +134,9 @@ function(toolchain_ld_link_elf) ${LINKERFLAGPREFIX},-Map=${TOOLCHAIN_LD_LINK_ELF_OUTPUT_MAP} ${LINKERFLAGPREFIX},--whole-archive - ${ZEPHYR_LIBS_PROPERTY} + ${WHOLE_ARCHIVE_LIBS} ${LINKERFLAGPREFIX},--no-whole-archive - kernel + ${NO_WHOLE_ARCHIVE_LIBS} $ ${LIB_INCLUDE_DIR} -L${PROJECT_BINARY_DIR} diff --git a/cmake/linker/lld/target.cmake b/cmake/linker/lld/target.cmake index f71a217e5be..5deab047100 100644 --- a/cmake/linker/lld/target.cmake +++ b/cmake/linker/lld/target.cmake @@ -94,9 +94,9 @@ function(toolchain_ld_link_elf) ${LINKERFLAGPREFIX},-Map=${TOOLCHAIN_LD_LINK_ELF_OUTPUT_MAP} ${LINKERFLAGPREFIX},--whole-archive - ${ZEPHYR_LIBS_PROPERTY} + ${WHOLE_ARCHIVE_LIBS} ${LINKERFLAGPREFIX},--no-whole-archive - kernel + ${NO_WHOLE_ARCHIVE_LIBS} $ ${LIB_INCLUDE_DIR} -L${PROJECT_BINARY_DIR} diff --git a/cmake/linker/xt-ld/target.cmake b/cmake/linker/xt-ld/target.cmake index 426bced0a61..20209107ff7 100644 --- a/cmake/linker/xt-ld/target.cmake +++ b/cmake/linker/xt-ld/target.cmake @@ -126,9 +126,9 @@ function(toolchain_ld_link_elf) ${LINKERFLAGPREFIX},-Map=${TOOLCHAIN_LD_LINK_ELF_OUTPUT_MAP} ${LINKERFLAGPREFIX},--whole-archive - ${ZEPHYR_LIBS_PROPERTY} + ${WHOLE_ARCHIVE_LIBS} ${LINKERFLAGPREFIX},--no-whole-archive - kernel + ${NO_WHOLE_ARCHIVE_LIBS} $ ${LIB_INCLUDE_DIR} -L${PROJECT_BINARY_DIR} diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 6d40e13d09d..1883b45a138 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 # kernel is a normal CMake library and not a zephyr_library because it -# should not be --whole-archive'd +# should usually not be --whole-archive'd zephyr_syscall_header( ${ZEPHYR_BASE}/include/zephyr/device.h