esp-idf/components/esp_rom/CMakeLists.txt
Song Ruo Jing d555ea2b00 fix(gpio): patched esp_rom_gpio_connect_out_signal for esp32 and esp32s2
The original ROM function enabled output for the pad first, and then connected the signal
This could result in an undesired level change at the pad

Closes https://github.com/espressif/esp-idf/issues/12826
2024-12-25 13:56:46 +08:00

336 lines
12 KiB
CMake

idf_build_get_property(target IDF_TARGET)
set(include_dirs "include" "include/${target}")
set(private_required_comp "")
set(sources "")
if(target STREQUAL "linux")
list(APPEND sources "${target}/esp_rom_sys.c"
"${target}/esp_rom_crc.c"
"${target}/esp_rom_md5.c"
"${target}/esp_rom_efuse.c")
list(APPEND include_dirs "${IDF_PATH}/tools/mocks/soc/include")
else()
list(APPEND include_dirs "${target}")
list(APPEND sources "patches/esp_rom_crc.c"
"patches/esp_rom_sys.c"
"patches/esp_rom_uart.c"
"patches/esp_rom_spiflash.c"
"patches/esp_rom_regi2c.c"
"patches/esp_rom_efuse.c"
"patches/esp_rom_gpio.c")
if(CONFIG_HEAP_TLSF_USE_ROM_IMPL AND (CONFIG_ESP_ROM_TLSF_CHECK_PATCH OR CONFIG_HEAP_TLSF_CHECK_PATCH))
# This file shall be included in the build if TLSF in ROM is activated
list(APPEND sources "patches/esp_rom_tlsf.c")
endif()
list(APPEND private_required_comp soc hal)
endif()
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
list(APPEND sources "patches/esp_rom_longjmp.S")
endif()
if(CONFIG_SOC_SYSTIMER_SUPPORTED)
list(APPEND sources "patches/esp_rom_systimer.c")
endif()
if(CONFIG_ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG OR CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG)
list(APPEND sources "patches/esp_rom_cache_esp32s2_esp32s3.c")
endif()
if(CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG)
list(APPEND sources "patches/esp_rom_cache_writeback_esp32s3.S")
endif()
if(CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE)
list(APPEND sources "patches/esp_rom_mmap.c")
endif()
idf_component_register(SRCS ${sources}
INCLUDE_DIRS ${include_dirs}
PRIV_REQUIRES ${private_required_comp}
LDFRAGMENTS linker.lf)
if(target STREQUAL "esp32h2")
if(CONFIG_IDF_TARGET_ESP32H2_BETA_VERSION_1)
set(ld_folder "ld/rev1")
elseif(CONFIG_IDF_TARGET_ESP32H2_BETA_VERSION_2)
set(ld_folder "ld/rev2")
endif()
else()
set(ld_folder "ld")
endif()
# Append a target linker script at the target-specific path,
# only the 'name' part is different for each script
function(rom_linker_script name)
target_linker_script(${COMPONENT_LIB} INTERFACE "${target}/${ld_folder}/${target}.rom.${name}.ld")
endfunction()
if(target STREQUAL "linux")
# We need to disable some warnings due to the ROM code's printf implementation
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND ${CMAKE_CXX_COMPILER_VERSION} GREATER "7.0.0")
target_compile_options(${COMPONENT_LIB} PRIVATE -Wimplicit-fallthrough=0 -Wno-shift-count-overflow)
endif()
if(CMAKE_C_COMPILER_ID MATCHES "Clang") # Clang or AppleClang
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-integer-overflow -Wno-shift-count-overflow)
endif()
else()
target_linker_script(${COMPONENT_LIB} INTERFACE "${target}/${ld_folder}/${target}.rom.ld")
rom_linker_script("api")
if(NOT CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
if(target STREQUAL "esp32s3" OR target STREQUAL "esp32c3")
rom_linker_script("bt_funcs")
endif()
endif()
if(CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB)
rom_linker_script("libgcc")
else()
rom_linker_script("rvfp")
endif()
endif()
idf_build_get_property(time_t_size TIME_T_SIZE)
if(BOOTLOADER_BUILD)
if(target STREQUAL "esp32")
rom_linker_script("newlib-funcs")
if(NOT CONFIG_SPI_FLASH_ROM_DRIVER_PATCH)
rom_linker_script("spiflash")
endif()
if(CONFIG_ESP32_REV_MIN_FULL GREATER_EQUAL 300)
rom_linker_script("eco3")
endif()
elseif(target STREQUAL "esp32s2")
rom_linker_script("newlib-funcs")
rom_linker_script("spiflash")
elseif(target STREQUAL "esp32s3")
rom_linker_script("newlib")
elseif(target STREQUAL "esp32c3")
rom_linker_script("newlib")
elseif(target STREQUAL "esp32h2")
rom_linker_script("newlib")
elseif(target STREQUAL "esp32c2")
rom_linker_script("newlib")
endif()
else() # Regular app build
if(target STREQUAL "esp32")
rom_linker_script("newlib-data")
rom_linker_script("syscalls")
if(NOT CONFIG_SPIRAM_CACHE_WORKAROUND)
# ESP32 only: these ROM functions may only be used if PSRAM cache workaround is disabled.
# Otherwise we need to link to a multilib version of libc compiled with PSRAM workaround.
rom_linker_script("newlib-funcs")
if(time_t_size EQUAL 4)
# The ROM functions listed in this linker script depend on sizeof(time_t).
# Since ROM for ESP32 was compiled for 32-bit time_t, only link these functions
# if the toolchain is also using 32-bit time_t.
rom_linker_script("newlib-time")
if(CONFIG_NEWLIB_NANO_FORMAT)
# nano formatting functions in ROM are also built for 32-bit time_t.
rom_linker_script("newlib-nano")
endif()
endif()
endif()
if(NOT CONFIG_SPI_FLASH_ROM_DRIVER_PATCH)
rom_linker_script("spiflash")
endif()
if(CONFIG_ESP32_REV_MIN_FULL GREATER_EQUAL 300)
rom_linker_script("eco3")
endif()
elseif(target STREQUAL "esp32s2")
rom_linker_script("newlib-funcs")
rom_linker_script("newlib-data")
rom_linker_script("spiflash")
if(time_t_size EQUAL 4)
# The ROM functions listed in this linker script depend on sizeof(time_t).
# Since ROM for ESP32-S2 was compiled for 32-bit time_t, only link these functions
# if the toolchain is also using 32-bit time_t.
rom_linker_script("newlib-time")
if(CONFIG_NEWLIB_NANO_FORMAT)
# nano formatting functions in ROM are also built for 32-bit time_t.
rom_linker_script("newlib-nano")
endif()
endif()
elseif(target STREQUAL "esp32s3")
rom_linker_script("newlib")
rom_linker_script("version")
if(CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
if(NOT CONFIG_BT_CTRL_BLE_MASTER)
rom_linker_script("ble_master")
endif()
if(NOT CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT AND NOT CONFIG_BT_BLE_50_FEATURES_SUPPORTED)
rom_linker_script("ble_50")
endif()
if(CONFIG_BT_BLE_CCA_MODE_NONE)
rom_linker_script("ble_cca")
endif()
if(NOT CONFIG_BT_NIMBLE_SECURITY_ENABLE AND NOT CONFIG_BT_BLE_SMP_ENABLE)
rom_linker_script("ble_smp")
endif()
if(NOT CONFIG_BT_CTRL_DTM_ENABLE)
rom_linker_script("ble_dtm")
endif()
if(NOT CONFIG_BT_CTRL_BLE_TEST)
rom_linker_script("ble_test")
endif()
if(NOT CONFIG_BT_CTRL_BLE_SCAN)
rom_linker_script("ble_scan")
endif()
endif()
if(time_t_size EQUAL 4)
# The ROM functions listed in this linker script depend on sizeof(time_t).
# Since ROM for ESP32-S3 was compiled for 32-bit time_t, only link these functions
# if the toolchain is also using 32-bit time_t.
rom_linker_script("newlib-time")
if(CONFIG_NEWLIB_NANO_FORMAT)
# nano formatting functions in ROM are also built for 32-bit time_t.
rom_linker_script("newlib-nano")
endif()
endif()
elseif(target STREQUAL "esp32c3")
rom_linker_script("newlib")
rom_linker_script("version")
if(CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
if(NOT CONFIG_BT_CTRL_BLE_MASTER)
rom_linker_script("ble_master")
endif()
if(NOT CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT AND NOT CONFIG_BT_BLE_50_FEATURES_SUPPORTED)
rom_linker_script("ble_50")
endif()
if(CONFIG_BT_BLE_CCA_MODE_NONE)
rom_linker_script("ble_cca")
endif()
if(NOT CONFIG_BT_NIMBLE_SECURITY_ENABLE AND NOT CONFIG_BT_BLE_SMP_ENABLE)
rom_linker_script("ble_smp")
endif()
if(NOT CONFIG_BT_CTRL_DTM_ENABLE)
rom_linker_script("ble_dtm")
endif()
if(NOT CONFIG_BT_CTRL_BLE_TEST)
rom_linker_script("ble_test")
endif()
if(NOT CONFIG_BT_CTRL_BLE_SCAN)
rom_linker_script("ble_scan")
endif()
endif()
if(time_t_size EQUAL 4)
# The ROM functions listed in this linker script depend on sizeof(time_t).
# Since ROM for ESP32-C3 was compiled for 32-bit time_t, only link these functions
# if the toolchain is also using 32-bit time_t.
rom_linker_script("newlib-time")
if(CONFIG_NEWLIB_NANO_FORMAT)
# nano formatting functions in ROM are also built for 32-bit time_t.
rom_linker_script("newlib-nano")
endif()
endif()
if(CONFIG_ESP32C3_REV_MIN_FULL GREATER_EQUAL 3)
rom_linker_script("eco3")
if(NOT CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
rom_linker_script("eco3_bt_funcs")
endif()
endif()
if(CONFIG_ESP32C3_REV_MIN_FULL GREATER_EQUAL 101)
rom_linker_script("eco7")
if(NOT CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
rom_linker_script("eco7_bt_funcs")
endif()
endif()
elseif(target STREQUAL "esp32h2")
rom_linker_script("newlib")
rom_linker_script("version")
if(CONFIG_NEWLIB_NANO_FORMAT AND time_t_size EQUAL 4)
# nano formatting functions in ROM are built for 32-bit time_t,
# only link them if the toolchain is also using 32-bit time_t and nano formatting was requested.
rom_linker_script("newlib-nano")
endif()
elseif(target STREQUAL "esp32c2")
rom_linker_script("newlib")
rom_linker_script("version")
if(CONFIG_ESP32C2_REV_MIN_FULL GREATER_EQUAL 200)
rom_linker_script("eco4")
endif()
if(CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL)
rom_linker_script("mbedtls")
# For ESP32C2(ECO4), mbedTLS in ROM has been updated to v3.6.0-LTS
if(CONFIG_ESP32C2_REV_MIN_FULL GREATER_EQUAL 200)
rom_linker_script("mbedtls.eco4")
endif()
endif()
if(NOT CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
if(CONFIG_ESP32C2_REV_MIN_FULL GREATER_EQUAL 200)
rom_linker_script("ble-eco4")
else()
rom_linker_script("ble")
endif()
endif()
if(time_t_size EQUAL 8)
# The ROM functions listed in this linker script depend on sizeof(time_t).
# Since ROM for ESP32-C2 was compiled for 64-bit time_t, only link these functions
# if the toolchain is also using 64-bit time_t.
rom_linker_script("newlib-time")
if(CONFIG_NEWLIB_NANO_FORMAT)
# nano formatting functions in ROM are also built for 64-bit time_t.
rom_linker_script("newlib-nano")
endif()
endif()
if(CONFIG_HEAP_TLSF_USE_ROM_IMPL)
# After registering the component, set the tlsf_set_rom_patches symbol as undefined
# to force the linker to integrate the whole `esp_rom_tlsf.c` object file inside the
# final binary. This is necessary because tlsf_set_rom_patches is a constructor, thus,
# there as no explicit reference/call to it in IDF.
if((CONFIG_ESP_ROM_TLSF_CHECK_PATCH OR CONFIG_HEAP_TLSF_CHECK_PATCH))
target_link_libraries(${COMPONENT_LIB} PRIVATE "-u tlsf_set_rom_patches")
endif()
rom_linker_script("heap")
endif()
endif()
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--wrap=longjmp")
endif()
endif()
if(target STREQUAL "esp32s2")
target_sources(${COMPONENT_LIB} PRIVATE "esp32s2/usb_patches.c")
endif()