mirror of
https://github.com/alexandrebobkov/ESP-Nodes.git
synced 2025-08-09 22:21:15 +00:00
181 lines
6.0 KiB
CMake
181 lines
6.0 KiB
CMake
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()
|