mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-01 18:50:34 +03:00
Refactor the esp_err_to_name() system to decouple esp_common from higher-level components. Instead of a monolithic generated table, each component registers its error codes into a dedicated linker section (.esp_err_msg_table) via idf_define_esp_err_codes() in its CMakeLists.txt. New files: - tools/err_codes_extract.py: extract ESP_ERR_* defines from headers to CSV - tools/err_codes_to_c.py: generate C source placing entries into linker section - tools/err_codes_to_rst.py: generate RST documentation from error codes - tools/cmake/err_codes.cmake: CMake module providing idf_define_esp_err_codes() - components/esp_common/include/esp_err_codes.h: esp_err_msg_t typedef - components/esp_common/src/esp_err_to_name_new.c: new lookup using link-time array - tools/test_apps/build_system/err_codes_check/: CI test app Changes: - Remove all optional component dependencies from esp_common/CMakeLists.txt - Add .esp_err_msg_table section to all 5 linker scripts - Register error codes in 18 components via idf_define_esp_err_codes() - Add new scripts to .gitlab/ci/rules.yml build_check patterns - use new scripts to generate doc and add CI validation - Update esp_err.rst to add description of composable code registration
33 lines
1.5 KiB
CMake
33 lines
1.5 KiB
CMake
idf_build_get_property(target IDF_TARGET)
|
|
|
|
if(${target} STREQUAL "linux")
|
|
set(ldfragments)
|
|
else()
|
|
set(ldfragments common.lf soc.lf linker.lf)
|
|
endif()
|
|
|
|
set(srcs "src/esp_err_to_name.c")
|
|
|
|
idf_component_register(SRCS "${srcs}"
|
|
INCLUDE_DIRS include
|
|
LDFRAGMENTS ${ldfragments})
|
|
|
|
# Note: LINK_INTERFACE_MULTIPLICITY is needed to break circular static-library
|
|
# dependencies in the component graph. The core cycle is:
|
|
# esp_system -> bootloader_support -> efuse -> esp_system
|
|
# (efuse registers an ESP_SYSTEM_INIT_FN and calls esp_restart(), both of which
|
|
# pull in esp_system). Several more cycles exist through esp_partition, esp_mm,
|
|
# and mbedtls. All cycle-causing deps are already PRIV_REQUIRES, so the
|
|
# multiplicity property on this universal dependency is the established fix.
|
|
set_property(TARGET ${COMPONENT_LIB} APPEND PROPERTY LINK_INTERFACE_MULTIPLICITY 4)
|
|
|
|
if(CONFIG_IDF_TARGET_LINUX AND NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
|
|
# On Linux, provide a linker script that collects specific sections entries (e.g., .esp_err_msg_tbl)
|
|
# and place them in the final binary, since the linker script used for Linux build doesn't have the usual
|
|
# memory layout and section placement as in embedded targets.
|
|
target_link_options(${COMPONENT_LIB} INTERFACE "-Wl,-T,${CMAKE_CURRENT_SOURCE_DIR}/linux/sections.ld")
|
|
endif()
|
|
|
|
# Register error codes defined in esp_common's own headers
|
|
idf_define_esp_err_codes(HEADERS include/esp_err.h)
|