Добавлен автоматический скрипт версии
This commit is contained in:
parent
28d9fb8a36
commit
ea9fca24eb
|
|
@ -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,17 +132,65 @@ 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
|
||||
|
|
|
|||
|
|
@ -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}")
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue