chore(cmake): replace dfu-util with rs-dfu for STM32 flash targets (#7789)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
4aa9a258ee
commit
850ae73cdd
@@ -0,0 +1,72 @@
|
||||
# Resolves RDFU_EXECUTABLE, the CLI tool used by the flash/flash-bl/flash-uf2
|
||||
# targets (separate from FetchRsDfuLib.cmake, Companion's rs_dfu C++ library).
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
find_program(RDFU_EXECUTABLE NAMES rdfu)
|
||||
|
||||
if(NOT RDFU_EXECUTABLE)
|
||||
# Host, not target: must run on the machine invoking `make flash`.
|
||||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(RDFU_OS "Linux")
|
||||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
|
||||
set(RDFU_OS "macOS")
|
||||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||
set(RDFU_OS "Windows")
|
||||
else()
|
||||
message(FATAL_ERROR "rdfu: unsupported host platform '${CMAKE_HOST_SYSTEM_NAME}'")
|
||||
endif()
|
||||
|
||||
if(RDFU_OS STREQUAL "macOS")
|
||||
set(RDFU_ARCH "universal")
|
||||
else()
|
||||
# CMAKE_HOST_SYSTEM_PROCESSOR is empty in `cmake -P` script mode.
|
||||
cmake_host_system_information(RESULT RDFU_HOST_ARCH QUERY OS_PLATFORM)
|
||||
if(RDFU_HOST_ARCH MATCHES "x86_64|amd64|AMD64")
|
||||
set(RDFU_ARCH "x86_64")
|
||||
elseif(RDFU_HOST_ARCH MATCHES "aarch64|arm64|ARM64")
|
||||
set(RDFU_ARCH "arm64")
|
||||
else()
|
||||
message(FATAL_ERROR "rdfu: unsupported host architecture '${RDFU_HOST_ARCH}'")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(RDFU_EXT "")
|
||||
if(RDFU_OS STREQUAL "Windows")
|
||||
set(RDFU_EXT ".exe")
|
||||
endif()
|
||||
|
||||
set(RDFU_FILENAME "rdfu-${RDFU_OS}-${RDFU_ARCH}${RDFU_EXT}")
|
||||
set(RDFU_URL "https://github.com/EdgeTX/rs-dfu/releases/latest/download/${RDFU_FILENAME}")
|
||||
|
||||
# Manual cache (FetchContent needs a project/generator, unavailable in
|
||||
# -P mode), mirroring FetchContent's _deps/<name>-src/ layout.
|
||||
set(RDFU_CACHE_DIR "_deps/rdfucli-src")
|
||||
set(RDFU_CACHED_PATH "${RDFU_CACHE_DIR}/${RDFU_FILENAME}")
|
||||
|
||||
if(NOT EXISTS "${RDFU_CACHED_PATH}")
|
||||
file(MAKE_DIRECTORY "${RDFU_CACHE_DIR}")
|
||||
message(STATUS "Fetching rdfu CLI tool from ${RDFU_URL}")
|
||||
file(DOWNLOAD "${RDFU_URL}" "${RDFU_CACHED_PATH}" STATUS RDFU_DOWNLOAD_STATUS)
|
||||
|
||||
list(GET RDFU_DOWNLOAD_STATUS 0 RDFU_DOWNLOAD_CODE)
|
||||
if(NOT RDFU_DOWNLOAD_CODE EQUAL 0)
|
||||
list(GET RDFU_DOWNLOAD_STATUS 1 RDFU_DOWNLOAD_MSG)
|
||||
file(REMOVE "${RDFU_CACHED_PATH}")
|
||||
message(FATAL_ERROR "Failed to download rdfu CLI tool from ${RDFU_URL}: ${RDFU_DOWNLOAD_MSG}")
|
||||
endif()
|
||||
|
||||
if(NOT RDFU_OS STREQUAL "Windows")
|
||||
file(CHMOD "${RDFU_CACHED_PATH}" PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
file(REAL_PATH "${RDFU_CACHED_PATH}" RDFU_EXECUTABLE)
|
||||
endif()
|
||||
|
||||
if(NOT RDFU_EXECUTABLE)
|
||||
message(FATAL_ERROR "Could not find or fetch the rdfu CLI tool (see https://github.com/EdgeTX/rs-dfu)")
|
||||
endif()
|
||||
@@ -1,4 +1,4 @@
|
||||
# Fetch rs_dfu
|
||||
# Fetch rs_dfu C++ library for Companion
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
include(FetchContent)
|
||||
@@ -20,7 +20,7 @@ if(Qt6Core_FOUND AND NOT DISABLE_COMPANION)
|
||||
|
||||
find_package(OpenSSL)
|
||||
|
||||
include(FetchRsDfu)
|
||||
include(FetchRsDfuLib)
|
||||
find_package(rs_dfu REQUIRED)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Runs rdfu for the flash/flash-bl/flash-uf2 targets in radio/src/CMakeLists.txt.
|
||||
# Invoked via `cmake -P` so resolving/fetching the binary happens at build
|
||||
# time, not on every configure.
|
||||
#
|
||||
# -D args: RDFU_SUBCOMMAND, RDFU_FILE, RDFU_VENDOR, RDFU_PRODUCT,
|
||||
# RDFU_START_ADDRESS (optional, omitted for UF2 writes)
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/FetchRdfuCli.cmake)
|
||||
|
||||
set(RDFU_ARGS ${RDFU_SUBCOMMAND} --vendor ${RDFU_VENDOR} --product ${RDFU_PRODUCT})
|
||||
if(DEFINED RDFU_START_ADDRESS AND NOT RDFU_START_ADDRESS STREQUAL "")
|
||||
list(APPEND RDFU_ARGS --start-address ${RDFU_START_ADDRESS})
|
||||
endif()
|
||||
list(APPEND RDFU_ARGS ${RDFU_FILE})
|
||||
|
||||
execute_process(
|
||||
COMMAND ${RDFU_EXECUTABLE} ${RDFU_ARGS}
|
||||
RESULT_VARIABLE RDFU_RESULT
|
||||
)
|
||||
|
||||
if(NOT RDFU_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "rdfu ${RDFU_SUBCOMMAND} failed (exit code ${RDFU_RESULT})")
|
||||
endif()
|
||||
@@ -820,18 +820,39 @@ else()
|
||||
endif()
|
||||
|
||||
if(CPU_FAMILY STREQUAL STM32)
|
||||
# FIRMWARE_QSPI boards can only be firmware-flashed via flash-uf2 below;
|
||||
# the bootloader doesn't expose external QSPI/XSPI flash as a DFU segment.
|
||||
if(NOT FIRMWARE_QSPI)
|
||||
add_custom_target(flash
|
||||
COMMAND dfu-util --alt 0 --dfuse-address 0x08000000:leave -d 0483:df11 -D firmware.bin
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DRDFU_SUBCOMMAND=write -DRDFU_VENDOR=0483 -DRDFU_PRODUCT=df11
|
||||
-DRDFU_START_ADDRESS=0x08000000 -DRDFU_FILE=firmware.bin
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/RunRdfuCli.cmake
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
add_custom_target(flash-bl
|
||||
COMMAND dfu-util --alt 0 --dfuse-address 0x08000000:leave -d 0483:df11 -D bootloader.bin
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DRDFU_SUBCOMMAND=write -DRDFU_VENDOR=0483 -DRDFU_PRODUCT=df11
|
||||
-DRDFU_START_ADDRESS=0x08000000 -DRDFU_FILE=bootloader.bin
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/RunRdfuCli.cmake
|
||||
DEPENDS bootloader
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
if(FIRMWARE_FORMAT_UF2)
|
||||
add_custom_target(flash-uf2
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DRDFU_SUBCOMMAND=write -DRDFU_VENDOR=0483 -DRDFU_PRODUCT=df11
|
||||
-DRDFU_FILE=firmware.uf2
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/RunRdfuCli.cmake
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
add_custom_target(flash-jtag
|
||||
COMMAND st-flash --reset write firmware.bin 0x8000000
|
||||
DEPENDS firmware
|
||||
|
||||
@@ -84,7 +84,6 @@ sudo apt-get -y install --no-install-recommends \
|
||||
clang \
|
||||
libclang-dev \
|
||||
python-is-python3 \
|
||||
dfu-util \
|
||||
nodejs \
|
||||
locales \
|
||||
stlink-tools \
|
||||
|
||||
@@ -80,7 +80,6 @@ sudo apt-get -y install --no-install-recommends \
|
||||
clang \
|
||||
libclang-dev \
|
||||
python-is-python3 \
|
||||
dfu-util \
|
||||
nodejs \
|
||||
locales \
|
||||
stlink-tools \
|
||||
|
||||
Reference in New Issue
Block a user