Files
espressif--esp-idf/components/esp_system/CMakeLists.txt
T
2026-07-13 13:04:25 +08:00

209 lines
8.1 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
idf_build_get_property(target IDF_TARGET)
idf_build_get_property(esp_tee_build ESP_TEE_BUILD)
# On Linux, we only support a few features, hence this simple component registration
if(${target} STREQUAL "linux")
idf_component_register(SRCS "esp_system.c"
"esp_err.c"
"esp_sys_event.c"
"port/soc/linux/reset_reason.c"
"port/soc/linux/system_internal.c"
"port/esp_system_linux.c"
"freertos_hooks.c"
"startup.c"
INCLUDE_DIRS "include"
PRIV_REQUIRES spi_flash)
# Add custom ld file (used to place system init functions).
# Mach-O (Apple) does not support linker scripts; section bounds are resolved
# at runtime via getsectiondata() so no -T flag is needed there.
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_link_options(${COMPONENT_TARGET} INTERFACE "-Wl,-T,${CMAKE_CURRENT_SOURCE_DIR}/ld/linux/sections.ld")
endif()
return()
endif()
set(srcs "esp_err.c")
if(CONFIG_IDF_ENV_FPGA OR CONFIG_ESP_BRINGUP_BYPASS_CPU_CLK_SETTING)
list(APPEND srcs "fpga_overrides_clk.c")
endif()
if(CONFIG_IDF_ENV_FPGA OR CONFIG_ESP_BRINGUP_BYPASS_RANDOM_SETTING)
list(APPEND srcs "fpga_overrides_rng.c")
endif()
if(BOOTLOADER_BUILD OR esp_tee_build)
set(include_dirs "include")
if(esp_tee_build)
list(APPEND include_dirs "port/include/private")
endif()
# "_esp_error_check_failed()" requires spi_flash module
# Bootloader relies on some Kconfig options defined in esp_system.
idf_component_register(SRCS "${srcs}" INCLUDE_DIRS "${include_dirs}"
REQUIRES spi_flash)
else()
list(APPEND srcs "crosscore_int.c"
"esp_ipc.c"
"esp_err.c"
"esp_sys_event.c"
"freertos_hooks.c"
"panic.c"
"esp_system.c"
"startup.c"
"startup_funcs.c"
"system_time.c"
"stack_check.c"
"ubsan.c")
if(CONFIG_COMPILER_KASAN)
list(APPEND srcs "kasan.c")
endif()
if(CONFIG_SOC_WDT_SUPPORTED)
list(APPEND srcs "int_wdt.c")
if(CONFIG_SOC_PAU_SUPPORTED)
list(APPEND srcs "port/soc/${target}/mwdt_retention.c")
endif()
endif()
if(CONFIG_SOC_XT_WDT_SUPPORTED)
list(APPEND srcs "xt_wdt.c")
endif()
if(CONFIG_ESP_TASK_WDT_EN)
list(APPEND srcs "task_wdt/task_wdt.c")
if(CONFIG_ESP_TASK_WDT_USE_ESP_TIMER)
list(APPEND srcs "task_wdt/task_wdt_impl_esp_timer.c")
else()
list(APPEND srcs "task_wdt/task_wdt_impl_timergroup.c")
endif()
endif()
if(CONFIG_ESP_SYSTEM_USE_EH_FRAME)
list(APPEND srcs "eh_frame_parser.c")
endif()
if(CONFIG_ESP_SYSTEM_USE_FRAME_POINTER)
list(APPEND srcs "fp_unwind.c")
endif()
if(CONFIG_SOC_SYSTIMER_SUPPORT_ETM)
list(APPEND srcs "systick_etm.c")
endif()
if(CONFIG_ESP_SYSTEM_HW_STACK_GUARD OR CONFIG_ESP_SYSTEM_HW_PC_RECORD OR CONFIG_SOC_CPU_LOCKUP_DEBUG_SUPPORTED)
list(APPEND srcs "debug_assist.c")
endif()
idf_component_register(SRCS "${srcs}"
INCLUDE_DIRS include
PRIV_REQUIRES spi_flash esp_timer esp_mm
esp_hal_mspi esp_hal_wdt esp_hal_uart esp_hal_clock esp_hal_dma
# [refactor-todo] requirements due to init code,
# should be removable once using component init functions
# link-time registration is used.
bootloader_support esp_pm esp_usb_cdc_rom_console
LDFRAGMENTS "linker.lf" "app.lf")
add_subdirectory(port)
# After system initialization, `start_app` (and its other cores variant) is called.
# This is provided by the user or from another component. Since we can't establish
# dependency on what we don't know, force linker to not drop the symbol regardless
# of link line order.
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u start_app")
if(NOT CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE)
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u start_app_other_cores")
endif()
if(CONFIG_COMPILER_KASAN)
# Files involved in stack-protector initialisation: disable stack protector.
# Also exclude from KASAN: cpu_start.c runs before kasan_init_shadow() and
# panic.c / startup.c must not recurse into KASAN during crash handling.
set_source_files_properties(
"startup.c" "stack_check.c" "port/cpu_start.c"
PROPERTIES COMPILE_FLAGS
"-fno-stack-protector -fno-sanitize=kernel-address")
# kasan.c and ubsan.c implement sanitizer runtime stubs must never be
# instrumented themselves (infinite recursion).
# panic.c / port/panic_handler.c must not be instrumented to avoid
# recursion in the error path.
set_source_files_properties(
"kasan.c" "ubsan.c" "panic.c" "port/panic_handler.c"
PROPERTIES COMPILE_FLAGS
"-fno-sanitize=kernel-address")
else()
# Disable stack protection in files which are involved in initialization of that feature
set_source_files_properties(
"startup.c" "stack_check.c" "port/cpu_start.c"
PROPERTIES COMPILE_FLAGS
-fno-stack-protector)
endif()
target_linker_script(${COMPONENT_LIB} INTERFACE "ld/${target}/memory.ld.in")
# Generate sections.ld.in and pass it through linker script generator
target_linker_script(${COMPONENT_LIB} INTERFACE "ld/${target}/sections.ld.in"
PROCESS "${CMAKE_CURRENT_BINARY_DIR}/ld/sections.ld")
endif()
if(CONFIG_IDF_ENV_FPGA OR CONFIG_ESP_BRINGUP_BYPASS_CPU_CLK_SETTING)
# Forces the linker to include fpga stubs from this component
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_common_include_fpga_overrides_clk")
endif()
if(CONFIG_IDF_ENV_FPGA OR CONFIG_ESP_BRINGUP_BYPASS_RANDOM_SETTING)
# Forces the linker to include fpga stubs from this component
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_common_include_fpga_overrides_rng")
endif()
# Force linking UBSAN hooks. If UBSAN is not enabled, the hooks will ultimately be removed
# due to -ffunction-sections -Wl,--gc-sections options.
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __ubsan_include")
# Force-link the __asan_*_noabort stubs: GCC-instrumented code calls them but
# the linker cannot see the call sites at GC time, so without explicit -u flags
# they would be silently dropped (and any -u flag against the file is enough
# to pull kasan.c in as well).
if(CONFIG_COMPILER_KASAN)
foreach(__kasan_stub
__asan_load1_noabort __asan_load2_noabort
__asan_load4_noabort __asan_load8_noabort
__asan_load16_noabort __asan_loadN_noabort
__asan_store1_noabort __asan_store2_noabort
__asan_store4_noabort __asan_store8_noabort
__asan_store16_noabort __asan_storeN_noabort
__asan_handle_no_return)
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u ${__kasan_stub}")
endforeach()
endif()
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_system_include_startup_funcs")
# [refactor-todo] requirements due to init code, should be removable
# once link-time registration of component init functions is used.
if(NOT CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT)
idf_component_optional_requires(PRIVATE esp_app_format)
endif()
if(CONFIG_PM_ENABLE)
idf_component_optional_requires(PRIVATE pm)
endif()
if(NOT BOOTLOADER_BUILD)
if(CONFIG_SPIRAM)
idf_component_optional_requires(PRIVATE esp_psram)
endif()
endif()
# For P4, since P4 REV2, the SRAM is contiguous
if(CONFIG_ESP32P4_SELECTS_REV_LESS_V3)
target_link_options(${COMPONENT_LIB} INTERFACE "-Wl,--enable-non-contiguous-regions")
endif()
if(CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS)
add_subdirectory(openocd_stub_bins)
endif()