zephyr/arch/xtensa/core/CMakeLists.txt
Yong Cong Sin bbe5e1e6eb build: namespace the generated headers with zephyr/
Namespaced the generated headers with `zephyr` to prevent
potential conflict with other headers.

Introduce a temporary Kconfig `LEGACY_GENERATED_INCLUDE_PATH`
that is enabled by default. This allows the developers to
continue the use of the old include paths for the time being
until it is deprecated and eventually removed. The Kconfig will
generate a build-time warning message, similar to the
`CONFIG_TIMER_RANDOM_GENERATOR`.

Updated the includes path of in-tree sources accordingly.

Most of the changes here are scripted, check the PR for more
info.

Signed-off-by: Yong Cong Sin <ycsin@meta.com>
2024-05-28 22:03:55 +02:00

114 lines
4.5 KiB
CMake

# SPDX-License-Identifier: Apache-2.0
zephyr_cc_option(-mlongcalls)
zephyr_library()
zephyr_library_sources(
cpu_idle.c
fatal.c
window_vectors.S
xtensa_asm2_util.S
irq_manage.c
thread.c
vector_handlers.c
)
zephyr_library_sources_ifdef(CONFIG_XTENSA_USE_CORE_CRT1 crt1.S)
zephyr_library_sources_ifdef(CONFIG_IRQ_OFFLOAD irq_offload.c)
zephyr_library_sources_ifdef(CONFIG_THREAD_LOCAL_STORAGE tls.c)
zephyr_library_sources_ifdef(CONFIG_XTENSA_ENABLE_BACKTRACE xtensa_backtrace.c)
zephyr_library_sources_ifdef(CONFIG_XTENSA_ENABLE_BACKTRACE debug_helpers_asm.S)
zephyr_library_sources_ifdef(CONFIG_DEBUG_COREDUMP coredump.c)
zephyr_library_sources_ifdef(CONFIG_TIMING_FUNCTIONS timing.c)
zephyr_library_sources_ifdef(CONFIG_GDBSTUB gdbstub.c)
zephyr_library_sources_ifdef(CONFIG_XTENSA_MMU ptables.c mmu.c)
zephyr_library_sources_ifdef(CONFIG_XTENSA_MPU mpu.c)
zephyr_library_sources_ifdef(CONFIG_USERSPACE userspace.S syscall_helper.c)
zephyr_library_sources_ifdef(CONFIG_LLEXT elf.c)
zephyr_library_sources_ifdef(CONFIG_SMP smp.c)
zephyr_library_sources_ifdef(CONFIG_XTENSA_HIFI_SHARING xtensa_hifi.S)
zephyr_library_sources_ifdef(
CONFIG_KERNEL_VM_USE_CUSTOM_MEM_RANGE_CHECK
mem_manage.c
)
if("${ZEPHYR_TOOLCHAIN_VARIANT}" STREQUAL "xcc")
zephyr_library_sources(xcc_stubs.c)
endif()
add_subdirectory(startup)
# This produces a preprocessed and regenerated (in the sense of gcc
# -dM, supported by all Xtensa toolchains) core-isa.h file available
# as "core-isa-dM.h". This can be easily parsed by non-C tooling.
#
# Note that this adds the SOC/HAL include directory explicitly, they
# are the official places where we find core-isa.h. (Also that we
# undefine __XCC_ because that compiler actually trips an error trying
# to build this file to protect against mismatched versions.)
set(CORE_ISA_DM ${CMAKE_BINARY_DIR}/zephyr/include/generated/zephyr/core-isa-dM.h)
set(CORE_ISA_IN ${CMAKE_BINARY_DIR}/zephyr/include/generated/core-isa-dM.c)
file(WRITE ${CORE_ISA_IN} "#include <xtensa/config/core-isa.h>\n")
add_custom_command(OUTPUT ${CORE_ISA_DM}
COMMAND ${CMAKE_C_COMPILER} -E -dM -U__XCC__
-I${ZEPHYR_XTENSA_MODULE_DIR}/zephyr/soc/${CONFIG_SOC}
-I${SOC_FULL_DIR}
${CORE_ISA_IN} -o ${CORE_ISA_DM})
if(CONFIG_USERSPACE AND NOT CONFIG_THREAD_LOCAL_STORAGE)
# It is possible that the SoC does not have THREADPTR.
# This means that we cannot use THREADPTR as a shortcut to
# in arch_is_user_context(). However, whether a SoC has
# THREADPTR is in core-isa.h which can be parsed in gen_zsr.py.
# There, if there is no THREADPTR, we need a scratch register
# so we can do arch_is_user_context() via syscall.
set(MAY_NEED_SYSCALL_SCRATCH_REG true)
else()
# With thread local storage, the variable is_user_mode is
# stored in the thread's TLS area. There is no need for
# scratch register.
set(MAY_NEED_SYSCALL_SCRATCH_REG false)
endif()
# Generates a list of device-specific scratch register choices
set(ZSR_H ${CMAKE_BINARY_DIR}/zephyr/include/generated/zephyr/zsr.h)
add_custom_command(OUTPUT ${ZSR_H} DEPENDS ${CORE_ISA_DM}
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/gen_zsr.py
$<$<BOOL:${CONFIG_XTENSA_MMU}>:--mmu>
$<$<BOOL:${MAY_NEED_SYSCALL_SCRATCH_REG}>:--syscall-scratch>
$<$<BOOL:${CONFIG_KERNEL_COHERENCE}>:--coherence>
${CORE_ISA_DM} ${ZSR_H})
add_custom_target(zsr_h DEPENDS ${ZSR_H})
add_dependencies(zephyr_interface zsr_h)
unset(MAY_NEED_SYSCALL_SCRATCH_REG)
# Similar: auto-generate interrupt handlers
set(HANDLERS ${CMAKE_BINARY_DIR}/zephyr/include/generated/xtensa_handlers)
add_custom_command(
OUTPUT ${HANDLERS}_tmp.c
COMMAND ${CMAKE_C_COMPILER} -E -U__XCC__
-I${ZEPHYR_XTENSA_MODULE_DIR}/zephyr/soc/${CONFIG_SOC}
-o ${HANDLERS}_tmp.c
- < ${CMAKE_CURRENT_SOURCE_DIR}/xtensa_intgen.tmpl)
add_custom_command(
OUTPUT ${HANDLERS}.h
DEPENDS ${HANDLERS}_tmp.c
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/xtensa_intgen.py
${HANDLERS}_tmp.c > ${HANDLERS}.h)
add_custom_target(xtensa_handlers_h DEPENDS ${HANDLERS}.h)
add_dependencies(zephyr_interface xtensa_handlers_h)
# Auto-generate interrupt vector entry
set(VECS_LD ${CMAKE_BINARY_DIR}/zephyr/include/generated/xtensa_vectors.ld)
add_custom_command(OUTPUT ${VECS_LD} DEPENDS ${CORE_ISA_DM}
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/gen_vectors.py
${CORE_ISA_DM} > ${VECS_LD})
add_custom_target(xtensa_vectors_ld DEPENDS ${VECS_LD})
add_dependencies(zephyr_interface xtensa_vectors_ld)