Добавлен автоматический скрипт версии

This commit is contained in:
cfif 2026-09-30 09:39:50 +03:00
parent 28d9fb8a36
commit ea9fca24eb
3 changed files with 134 additions and 14 deletions

View File

@ -31,13 +31,13 @@ SET(INTERNAL_HW_REV 1)
SET(INTERNAL_SW_YEAR 26)
SET(INTERNAL_SW_MONTH 9)
SET(INTERNAL_SW_DAY 1)
SET(INTERNAL_SW_REV 1)
SET(INTERNAL_SW_DAY 30)
SET(INTERNAL_SW_REV 14)
SET(INTERNAL_MDB_YEAR 26)
SET(INTERNAL_MDB_MONTH 9)
SET(INTERNAL_MDB_DAY 1)
SET(INTERNAL_MDB_REV 1)
SET(INTERNAL_MDB_DAY 30)
SET(INTERNAL_MDB_REV 14)
SET(FINGER_MODULE 0x01)
SET(FINGER_YEAR 0x26)
@ -59,15 +59,15 @@ ADD_DEFINITIONS(-DINTERNAL_HW_MONTH=${INTERNAL_HW_MONTH})
ADD_DEFINITIONS(-DINTERNAL_HW_DAY=${INTERNAL_HW_DAY})
ADD_DEFINITIONS(-DINTERNAL_HW_REV=${INTERNAL_HW_REV})
ADD_DEFINITIONS(-DINTERNAL_SW_YEAR=${INTERNAL_SW_YEAR})
ADD_DEFINITIONS(-DINTERNAL_SW_MONTH=${INTERNAL_SW_MONTH})
ADD_DEFINITIONS(-DINTERNAL_SW_DAY=${INTERNAL_SW_DAY})
ADD_DEFINITIONS(-DINTERNAL_SW_REV=${INTERNAL_SW_REV})
#ADD_DEFINITIONS(-DINTERNAL_SW_YEAR=${INTERNAL_SW_YEAR})
#ADD_DEFINITIONS(-DINTERNAL_SW_MONTH=${INTERNAL_SW_MONTH})
#ADD_DEFINITIONS(-DINTERNAL_SW_DAY=${INTERNAL_SW_DAY})
#ADD_DEFINITIONS(-DINTERNAL_SW_REV=${INTERNAL_SW_REV})
ADD_DEFINITIONS(-DINTERNAL_MDB_YEAR=${INTERNAL_MDB_YEAR})
ADD_DEFINITIONS(-DINTERNAL_MDB_MONTH=${INTERNAL_MDB_MONTH})
ADD_DEFINITIONS(-DINTERNAL_MDB_DAY=${INTERNAL_MDB_DAY})
ADD_DEFINITIONS(-DINTERNAL_MDB_REV=${INTERNAL_MDB_REV})
#ADD_DEFINITIONS(-DINTERNAL_MDB_YEAR=${INTERNAL_MDB_YEAR})
#ADD_DEFINITIONS(-DINTERNAL_MDB_MONTH=${INTERNAL_MDB_MONTH})
#ADD_DEFINITIONS(-DINTERNAL_MDB_DAY=${INTERNAL_MDB_DAY})
#ADD_DEFINITIONS(-DINTERNAL_MDB_REV=${INTERNAL_MDB_REV})
ADD_DEFINITIONS(-DFINGER_MODULE=${FINGER_MODULE})
ADD_DEFINITIONS(-DFINGER_YEAR=${FINGER_YEAR})
@ -132,18 +132,66 @@ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T ${LDSCRIPT} -Wl,-Map=${
#-- Random BuildId Generation ------------------------------------------------------------
SET(RANDOM_BUILD_ID_GEN_FILE ${CMAKE_SOURCE_DIR}/MODULES/CmakeConfig_RandomBuildIdGenerator/version.cmake)
SET(RANDOM_BUILD_ID_GEN_VERSION ${CMAKE_SOURCE_DIR}/MODULES/CmakeConfig_RandomBuildIdGenerator/generate_version.cmake)
add_custom_target(GEN_RANDOM_BUILD_ID)
ADD_CUSTOM_COMMAND(TARGET GEN_RANDOM_BUILD_ID POST_BUILD
COMMAND ${CMAKE_COMMAND} -P ${RANDOM_BUILD_ID_GEN_FILE})
set(SCRIPT_DIR ${CMAKE_SOURCE_DIR}/MODULES/CmakeConfig_RandomBuildIdGenerator)
set(VERSION_H ${SCRIPT_DIR}/Version.h)
set(VERSION_FILE ${SCRIPT_DIR}/.version)
add_custom_target(GEN_RANDOM_BUILD_ID_VERSION)
ADD_CUSTOM_COMMAND(TARGET GEN_RANDOM_BUILD_ID_VERSION POST_BUILD
COMMAND ${CMAKE_COMMAND}
"-DOUT=${VERSION_H}"
"-DVERSION_FILE=${VERSION_FILE}"
-P ${RANDOM_BUILD_ID_GEN_VERSION}
BYPRODUCTS ${VERSION_H}
COMMENT "Generating VersionRandID.h before compilation"
VERBATIM)
#-- Project linking ------------------------------------------------------------
ADD_EXECUTABLE(${PROJECT_NAME}.elf ${SOURCES})
TARGET_LINK_LIBRARIES(${PROJECT_NAME}.elf m)
add_dependencies(${PROJECT_NAME}.elf GEN_RANDOM_BUILD_ID)
add_dependencies(${PROJECT_NAME}.elf GEN_RANDOM_BUILD_ID_VERSION)
#-- Custom commands ------------------------------------------------------------
#ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME}.elf PRE_LINK
# COMMAND ${CMAKE_SOURCE_DIR}/generate_version.sh)
# Файл, который сгенерирует скрипт
SET(VERSION_HEADER ${CMAKE_BINARY_DIR}/generated/version.h)
# Цель, которая гарантированно обновит version.h до компиляции
ADD_CUSTOM_TARGET(GenerateVersion
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/generated
COMMAND ${CMAKE_SOURCE_DIR}/generate_version.sh ${VERSION_HEADER}
BYPRODUCTS ${VERSION_HEADER}
COMMENT "Generating version.h before compilation"
VERBATIM)
# Подключаем сгенерированную папку
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}.elf PRIVATE ${CMAKE_BINARY_DIR}/generated)
# Каждый .obj в таргете ждёт GenerateVersion
ADD_DEPENDENCIES(${PROJECT_NAME}.elf GenerateVersion)
ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME}.elf POST_BUILD
# COMMAND ${CMAKE_SOURCE_DIR}/generate_version.sh
COMMAND ${CMAKE_OBJCOPY} "-Oihex" ${PROJECT_NAME}.elf ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.hex
COMMAND ${CMAKE_OBJCOPY} "-Obinary" ${PROJECT_NAME}.elf ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bin
# COMMAND ${CMAKE_OBJDUMP} "-DS" ${PROJECT_NAME}.elf > ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dasm
COMMAND ${CMAKE_SIZE} ${PROJECT_NAME}.elf)
COMMAND ${CMAKE_SIZE} ${PROJECT_NAME}.elf)

View File

@ -0,0 +1,71 @@
# generate_version.cmake
# Запуск: cmake -DOUT=<path/Version.h>
# -DVERSION_FILE=<path/.version>
# -P generate_version.cmake
if(NOT DEFINED OUT)
message(FATAL_ERROR "OUT is not defined")
endif()
if(NOT DEFINED VERSION_FILE)
message(FATAL_ERROR "VERSION_FILE is not defined")
endif()
# --- Дата без ведущих нулей (26, 9, 29) ---
string(TIMESTAMP CURRENT_YEAR "%y") # 26
string(TIMESTAMP CURRENT_MONTH "%m") # 09
string(TIMESTAMP CURRENT_DAY "%d") # 29
string(REGEX REPLACE "^0" "" CURRENT_MONTH "${CURRENT_MONTH}") # 9
string(REGEX REPLACE "^0" "" CURRENT_DAY "${CURRENT_DAY}") # 29
# --- Ключ дня для .version (с ведущими нулями — совместимость) ---
string(TIMESTAMP DATE_KEY "%y%m%d")
# --- Читаем .version ---
set(saved_key "")
set(saved_rev 0)
if(EXISTS "${VERSION_FILE}")
file(READ "${VERSION_FILE}" content)
string(REGEX MATCH "DATE_KEY=([0-9]+)" _ "${content}")
if(CMAKE_MATCH_1)
set(saved_key "${CMAKE_MATCH_1}")
endif()
string(REGEX MATCH "REV=([0-9]+)" _ "${content}")
if(CMAKE_MATCH_1)
set(saved_rev "${CMAKE_MATCH_1}")
endif()
endif()
# --- Считаем ревизию ---
if("${saved_key}" STREQUAL "${DATE_KEY}")
math(EXPR new_rev "${saved_rev} + 1")
else()
set(new_rev 1)
endif()
file(WRITE "${VERSION_FILE}" "DATE_KEY=${DATE_KEY}\nREV=${new_rev}\n")
# --- Пишем заголовок ---
file(WRITE "${OUT}"
"#pragma once
#define INTERNAL_SW_YEAR ${CURRENT_YEAR}
#define INTERNAL_SW_MONTH ${CURRENT_MONTH}
#define INTERNAL_SW_DAY ${CURRENT_DAY}
#define INTERNAL_SW_REV ${new_rev}
#define INTERNAL_MDB_YEAR ${CURRENT_YEAR}
#define INTERNAL_MDB_MONTH ${CURRENT_MONTH}
#define INTERNAL_MDB_DAY ${CURRENT_DAY}
#define INTERNAL_MDB_REV ${new_rev}
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define INTERNAL_SW_VERSION_STR \\
STR(INTERNAL_SW_YEAR) \".\" STR(INTERNAL_SW_MONTH) \".\" \\
STR(INTERNAL_SW_DAY) \"-\" STR(INTERNAL_SW_REV)
")
message(STATUS "Version: ${CURRENT_YEAR}.${CURRENT_MONTH}.${CURRENT_DAY}-${new_rev}")

View File

@ -5,6 +5,7 @@
#include "FirmwareMetadataSection.h"
#include "VersionRandID.h"
#include "Version.h"
#define DEF_INTERNAL_HW_YEAR INTERNAL_HW_YEAR
#define DEF_INTERNAL_HW_MONTH INTERNAL_HW_MONTH