1 Star 0 Fork 0

乐鑫开源/esp-serial-flasher

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
CMakeLists.txt 6.03 KB
一键复制 编辑 原始数据 按行查看 历史
cmake_minimum_required(VERSION 3.5)
set(srcs
src/md5_hash.c
src/esp_loader.c
)
set(defs)
# Regular CMake builds are expected to set OPTION_NAME, while ESP-IDF's Kconfig system sets
# CONFIG_OPTION_NAME.
# This macro handles these differences and also a default value if neither is set
macro(add_option option_name default_value)
if (DEFINED CONFIG_${option_name})
# Handle Kconfig booleans in a special manner
if (CONFIG_${option_name} STREQUAL "")
list(APPEND defs ${option_name}=false)
elseif(CONFIG_${option_name} STREQUAL "y")
list(APPEND defs ${option_name}=true)
else()
list(APPEND defs ${option_name}=${CONFIG_${option_name}})
endif()
elseif (DEFINED ${option_name})
list(APPEND defs ${option_name}=${${option_name}})
else()
list(APPEND defs ${option_name}=${default_value})
endif()
endmacro()
add_option(SERIAL_FLASHER_DEBUG_TRACE false)
add_option(SERIAL_FLASHER_RESET_HOLD_TIME_MS 100)
add_option(SERIAL_FLASHER_BOOT_HOLD_TIME_MS 50)
add_option(SERIAL_FLASHER_WRITE_BLOCK_RETRIES 3)
# Enforce default interface for non-ESP ports.
# This doesn't need to be done for the ESP port as the Kconfig system handles the default.
if (NOT DEFINED ESP_PLATFORM AND
NOT DEFINED SERIAL_FLASHER_INTERFACE_UART AND
NOT DEFINED SERIAL_FLASHER_INTERFACE_SPI AND
NOT DEFINED SERIAL_FLASHER_INTERFACE_USB AND
NOT DEFINED SERIAL_FLASHER_INTERFACE_SDIO)
set(SERIAL_FLASHER_INTERFACE_UART true)
endif()
if (DEFINED SERIAL_FLASHER_INTERFACE_UART OR CONFIG_SERIAL_FLASHER_INTERFACE_UART STREQUAL "y")
list(APPEND srcs
src/esp_targets.c
src/esp_stubs.c
src/protocol_serial.c
src/protocol_uart.c
src/slip.c
)
list(APPEND defs
SERIAL_FLASHER_INTERFACE_UART
)
if (DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED)
list(APPEND defs MD5_ENABLED=1)
endif()
add_option(SERIAL_FLASHER_RESET_INVERT false)
add_option(SERIAL_FLASHER_BOOT_INVERT false)
elseif(DEFINED SERIAL_FLASHER_INTERFACE_USB OR CONFIG_SERIAL_FLASHER_INTERFACE_USB STREQUAL "y")
list(APPEND srcs
src/esp_targets.c
src/esp_stubs.c
src/protocol_serial.c
src/protocol_uart.c
src/slip.c
)
list(APPEND defs
SERIAL_FLASHER_INTERFACE_USB
)
if (DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED)
list(APPEND defs MD5_ENABLED=1)
endif()
elseif(DEFINED SERIAL_FLASHER_INTERFACE_SPI OR CONFIG_SERIAL_FLASHER_INTERFACE_SPI STREQUAL "y")
list(APPEND srcs
src/esp_targets.c
src/protocol_serial.c
src/protocol_spi.c
)
list(APPEND defs
SERIAL_FLASHER_INTERFACE_SPI
)
elseif(DEFINED SERIAL_FLASHER_INTERFACE_SDIO OR CONFIG_SERIAL_FLASHER_INTERFACE_SDIO STREQUAL "y")
list(APPEND srcs
src/protocol_sdio.c
)
list(APPEND defs
SERIAL_FLASHER_INTERFACE_SDIO
)
endif()
if (DEFINED ESP_PLATFORM)
if (${CONFIG_SERIAL_FLASHER_INTERFACE_UART})
list(APPEND srcs
port/esp32_port.c
)
elseif (${CONFIG_SERIAL_FLASHER_INTERFACE_SPI})
list(APPEND srcs
port/esp32_spi_port.c
)
elseif (${CONFIG_SERIAL_FLASHER_INTERFACE_USB})
list(APPEND srcs
port/esp32_usb_cdc_acm_port.c
)
elseif (${CONFIG_SERIAL_FLASHER_INTERFACE_SDIO})
list(APPEND srcs
port/esp32_sdio_port.c
)
endif()
# Register component to esp-idf build system
idf_component_register(SRCS ${srcs}
INCLUDE_DIRS include port
PRIV_INCLUDE_DIRS private_include
PRIV_REQUIRES driver esp_timer sdmmc)
if (${CONFIG_SERIAL_FLASHER_INTERFACE_USB})
idf_component_set_property(${COMPONENT_NAME} PRIV_REQUIRES usb APPEND)
endif()
set(target ${COMPONENT_LIB})
component_compile_options(-Wstrict-prototypes)
else()
# Create traditional CMake target
add_library(flasher ${srcs})
target_include_directories(flasher PUBLIC include port PRIVATE private_include)
if (NOT DEFINED PORT)
message(WARNING "No port selected, default to user-defined")
set(PORT "USER_DEFINED")
elseif(PORT STREQUAL "USER_DEFINED")
# The user has to manually link their port with the flasher target
elseif(PORT STREQUAL "STM32")
stm32_get_chip_info(${STM32_CHIP} FAMILY DEVICE_FAMILY DEVICE DEVICE_CODE)
if(DEFINED CORE_USED)
string(APPEND DEVICE_FAMILY ::${CORE_USED})
string(APPEND DEVICE_CODE ::${CORE_USED})
endif()
target_link_libraries(flasher PRIVATE
HAL::STM32::${DEVICE_FAMILY}::GPIO
HAL::STM32::${DEVICE_FAMILY}::UART
CMSIS::STM32::${DEVICE_CODE}
)
target_sources(flasher PRIVATE port/stm32_port.c)
elseif(PORT STREQUAL "RASPBERRY_PI")
find_library(pigpio_LIB pigpio)
target_link_libraries(flasher PUBLIC ${pigpio_LIB})
target_sources(flasher PRIVATE port/raspberry_port.c)
elseif(PORT STREQUAL "PI_PICO")
target_link_libraries(flasher PUBLIC pico_stdlib)
target_sources(flasher PRIVATE port/pi_pico_port.c)
else()
message(FATAL_ERROR "Selected port is not supported")
endif()
set(target flasher)
endif()
target_compile_definitions(${target} PUBLIC ${defs})
# This segment pulls the flasher stubs at a specified version at wish, and generates the
# esp_stubs.c/h files, overwriting the library provided ones.
# It is also possible to override stub generation to use a custom url or a local folder.
# Please check if the license under which the custom stub sources are released fits your usecase.
if (DEFINED SERIAL_FLASHER_STUB_PULL_VERSION OR DEFINED SERIAL_FLASHER_STUB_PULL_OVERRIDE_PATH)
include(cmake/serial_flasher_pull_stubs.cmake)
serial_flasher_pull_stubs(
VERSION ${SERIAL_FLASHER_STUB_PULL_VERSION}
SOURCE ${SERIAL_FLASHER_STUB_PULL_SOURCE}
PATH_OVERRIDE ${SERIAL_FLASHER_STUB_PULL_OVERRIDE_PATH}
)
endif()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/EspressifSystems/esp-serial-flasher.git
[email protected]:EspressifSystems/esp-serial-flasher.git
EspressifSystems
esp-serial-flasher
esp-serial-flasher
master

搜索帮助