e38fc6de8a
This enables -Wshadow to warn about shadow variables on in tree code under arch/, boards/, drivers/, kernel/, lib/, soc/, and subsys/. Note that this does not enable it globally because out-of-tree modules will probably take some time to fix (or not at all depending on the project), and it would be great to avoid introduction of any new shadow variables in the meantime. Also note that this tries to be done in a minimally invasive way so it is easy to revert when we enable -Wshadow globally. Source files under modules/, samples/ and tests/ are currently excluded because there does not seem to be a trivial way to add -Wshadow there without going through all CMakeLists.txt to add the option (as there are 1000+ files to change). Signed-off-by: Daniel Leung <daniel.leung@intel.com>
147 lines
3.4 KiB
CMake
147 lines
3.4 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/sys/mem_manage.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)
|
|
|
|
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)
|