zephyr/kernel/CMakeLists.txt
Daniel Leung f12d49d7ef kernel: mm: separate demand paging headers into its own file
This separates demand paging related headers into its own file
instead of being stuffed inside the main kernel memory
management header file.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2023-11-20 09:19:14 +01:00

154 lines
3.7 KiB
CMake

# 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
zephyr_syscall_header(
${ZEPHYR_BASE}/include/zephyr/device.h
${ZEPHYR_BASE}/include/zephyr/kernel.h
${ZEPHYR_BASE}/include/zephyr/sys/kobject.h
${ZEPHYR_BASE}/include/zephyr/sys/time_units.h
)
if(NOT CONFIG_ERRNO_IN_TLS AND NOT CONFIG_LIBC_ERRNO)
zephyr_syscall_header(${ZEPHYR_BASE}/include/zephyr/sys/errno_private.h)
endif()
zephyr_syscall_header_ifdef(
CONFIG_ATOMIC_OPERATIONS_C
${ZEPHYR_BASE}/include/zephyr/sys/atomic_c.h
)
zephyr_syscall_header_ifdef(
CONFIG_MMU
${ZEPHYR_BASE}/include/zephyr/kernel/mm.h
${ZEPHYR_BASE}/include/zephyr/sys/mem_manage.h
)
zephyr_syscall_header_ifdef(
CONFIG_DEMAND_PAGING
${ZEPHYR_BASE}/include/zephyr/kernel/mm/demand_paging.h
)
# 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()
# FIXME: SHADOW_VARS: Remove this once we have enabled -Wshadow globally.
add_compile_options($<TARGET_PROPERTY:compiler,warning_shadow_variables>)
list(APPEND kernel_files
main_weak.c
banner.c
busy_wait.c
device.c
errno.c
fatal.c
init.c
kheap.c
mem_slab.c
thread.c
version.c
)
if(CONFIG_MULTITHREADING)
list(APPEND kernel_files
idle.c
mailbox.c
msg_q.c
mutex.c
queue.c
sem.c
stack.c
system_work_q.c
work.c
sched.c
condvar.c
)
if(CONFIG_SMP)
list(APPEND kernel_files
smp.c)
endif()
endif()
if(CONFIG_XIP)
list(APPEND kernel_files
xip.c)
endif()
if(CONFIG_DEMAND_PAGING_STATS)
list(APPEND kernel_files
paging/statistics.c)
endif()
add_library(kernel ${kernel_files})
# Kernel files has the macro __ZEPHYR_SUPERVISOR__ set so that it
# optimizes the code when userspace is enabled.
set_target_properties(
kernel
PROPERTIES
COMPILE_DEFINITIONS
__ZEPHYR_SUPERVISOR__
)
target_sources_ifdef(CONFIG_STACK_CANARIES kernel PRIVATE compiler_stack_protect.c)
target_sources_ifdef(CONFIG_SYS_CLOCK_EXISTS kernel PRIVATE timeout.c timer.c)
target_sources_ifdef(CONFIG_ATOMIC_OPERATIONS_C kernel PRIVATE atomic_c.c)
target_sources_ifdef(CONFIG_MMU kernel PRIVATE mmu.c)
target_sources_ifdef(CONFIG_POLL kernel PRIVATE poll.c)
target_sources_ifdef(CONFIG_EVENTS kernel PRIVATE events.c)
target_sources_ifdef(CONFIG_PIPES kernel PRIVATE pipes.c)
target_sources_ifdef(CONFIG_SCHED_THREAD_USAGE kernel PRIVATE usage.c)
target_sources_ifdef(CONFIG_OBJ_CORE kernel PRIVATE obj_core.c)
if(${CONFIG_KERNEL_MEM_POOL})
target_sources(kernel PRIVATE mempool.c)
endif()
# The last 2 files inside the target_sources_ifdef should be
# userspace_handler.c and userspace.c. If not the linker would complain.
# This order has to be maintained. Any new file should be placed
# above these 2 files.
target_sources_ifdef(
CONFIG_USERSPACE
kernel PRIVATE
futex.c
mem_domain.c
userspace_handler.c
userspace.c
)
if(${CONFIG_DYNAMIC_THREAD})
target_sources(kernel PRIVATE dynamic.c)
else()
target_sources(kernel PRIVATE dynamic_disabled.c)
endif()
target_include_directories(kernel PRIVATE
${ZEPHYR_BASE}/kernel/include
${ARCH_DIR}/${ARCH}/include
)
target_link_libraries(kernel zephyr_interface)
endif()
add_dependencies(kernel zephyr_generated_headers)
unset(libkernel)