- 实现了完整的GD32 SPI OTA中继机制,支持通过BLE触发GD32固件升级 - 添加了SHA-256校验机制确保固件传输完整性 - 重构了版本号管理系统,PATCH版本改为基于Git提交次数自动递增 - 修复了flash写入4字节对齐问题,提升OTA可靠性 - 优化了BLE OTA协议的消息格式和错误处理机制 BREAKING CHANGE: OTA协议消息格式发生变化,需要前端同步更新
72 lines
2.1 KiB
CMake
72 lines
2.1 KiB
CMake
# gen_version_script.cmake - 构建时执行的独立脚本
|
|
# 通过 add_custom_target 在每次 build 时调用,确保版本信息始终最新
|
|
#
|
|
# 需要传入的参数:
|
|
# SOURCE_DIR - 项目根目录 (ESP32_COMM)
|
|
# OUTPUT_FILE - 输出的 version.h 路径
|
|
|
|
# 主/次版本号(手动修改,大版本时改)
|
|
set(FW_VERSION_MAJOR 0)
|
|
set(FW_VERSION_MINOR 3)
|
|
|
|
# PATCH 自动递增:git 总提交次数,每次新提交 +1
|
|
find_package(Git QUIET)
|
|
if(GIT_FOUND)
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD
|
|
WORKING_DIRECTORY ${SOURCE_DIR}
|
|
OUTPUT_VARIABLE FW_VERSION_PATCH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_QUIET
|
|
)
|
|
else()
|
|
set(FW_VERSION_PATCH 0)
|
|
endif()
|
|
|
|
# 编译时间
|
|
string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M:%S")
|
|
|
|
# Git 短 hash
|
|
find_package(Git QUIET)
|
|
if(GIT_FOUND)
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
|
WORKING_DIRECTORY ${SOURCE_DIR}
|
|
OUTPUT_VARIABLE GIT_HASH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_QUIET
|
|
)
|
|
else()
|
|
set(GIT_HASH "unknown")
|
|
endif()
|
|
|
|
# 生成版本头文件
|
|
set(VERSION_HEADER_CONTENT
|
|
"// Auto-generated version info - DO NOT EDIT
|
|
#pragma once
|
|
|
|
// 固件版本
|
|
#define FW_VERSION_MAJOR ${FW_VERSION_MAJOR}
|
|
#define FW_VERSION_MINOR ${FW_VERSION_MINOR}
|
|
#define FW_VERSION_PATCH ${FW_VERSION_PATCH}
|
|
#define FW_VERSION_STRING \"${FW_VERSION_MAJOR}.${FW_VERSION_MINOR}.${FW_VERSION_PATCH}\"
|
|
|
|
// 编译时间
|
|
#define BUILD_TIME \"${BUILD_TIME}\"
|
|
|
|
// Git 信息
|
|
#define GIT_HASH \"${GIT_HASH}\"
|
|
")
|
|
|
|
# 仅在内容变化时写入,避免不必要的重编译
|
|
if(EXISTS ${OUTPUT_FILE})
|
|
file(READ ${OUTPUT_FILE} EXISTING_CONTENT)
|
|
if(NOT "${EXISTING_CONTENT}" STREQUAL "${VERSION_HEADER_CONTENT}")
|
|
file(WRITE ${OUTPUT_FILE} "${VERSION_HEADER_CONTENT}")
|
|
message(STATUS "Version header updated: v${FW_VERSION_MAJOR}.${FW_VERSION_MINOR}.${FW_VERSION_PATCH} (${GIT_HASH})")
|
|
endif()
|
|
else()
|
|
file(WRITE ${OUTPUT_FILE} "${VERSION_HEADER_CONTENT}")
|
|
message(STATUS "Version header generated: v${FW_VERSION_MAJOR}.${FW_VERSION_MINOR}.${FW_VERSION_PATCH} (${GIT_HASH})")
|
|
endif()
|