74 lines
3.0 KiB
CMake
74 lines
3.0 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
||
# ARCS SDK 版本管理
|
||
# 参考: VERSION_SYSTEM_REFERENCE_CN.md
|
||
|
||
# 包含十六进制转换工具
|
||
include(${ARCS_SDK_BASE}/cmake/hex.cmake)
|
||
|
||
# 读取 VERSION 文件
|
||
file(READ ${ARCS_SDK_BASE}/VERSION ver)
|
||
|
||
# 使用正则表达式解析每个版本组件
|
||
string(REGEX MATCH "VERSION_MAJOR = ([0-9]*)" _ ${ver})
|
||
set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1})
|
||
|
||
string(REGEX MATCH "VERSION_MINOR = ([0-9]*)" _ ${ver})
|
||
set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_1})
|
||
|
||
string(REGEX MATCH "PATCHLEVEL = ([0-9]*)" _ ${ver})
|
||
set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_1})
|
||
|
||
string(REGEX MATCH "VERSION_TWEAK = ([0-9]*)" _ ${ver})
|
||
set(PROJECT_VERSION_TWEAK ${CMAKE_MATCH_1})
|
||
|
||
string(REGEX MATCH "EXTRAVERSION = ([a-z0-9]*)" _ ${ver})
|
||
set(PROJECT_VERSION_EXTRA ${CMAKE_MATCH_1})
|
||
|
||
# 设置导出变量(用于 C 头文件)
|
||
set(SDK_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||
set(SDK_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||
set(SDK_PATCHLEVEL ${PROJECT_VERSION_PATCH})
|
||
|
||
# 构建版本字符串(不包含 TWEAK)
|
||
set(PROJECT_VERSION_WITHOUT_TWEAK ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
|
||
|
||
# 构建完整版本(TWEAK 非零时包含)
|
||
if(PROJECT_VERSION_TWEAK AND NOT PROJECT_VERSION_TWEAK EQUAL 0)
|
||
set(PROJECT_VERSION ${PROJECT_VERSION_WITHOUT_TWEAK}.${PROJECT_VERSION_TWEAK})
|
||
else()
|
||
set(PROJECT_VERSION ${PROJECT_VERSION_WITHOUT_TWEAK})
|
||
endif()
|
||
|
||
# 构建版本字符串(用于显示)
|
||
# 规则:优先显示 EXTRA,其次显示 TWEAK,最后显示基础版本
|
||
if(PROJECT_VERSION_EXTRA AND NOT PROJECT_VERSION_EXTRA STREQUAL "0")
|
||
# 有 EXTRA 后缀:显示 MAJOR.MINOR.PATCH-EXTRA(不显示 TWEAK)
|
||
set(PROJECT_VERSION_STR "${PROJECT_VERSION_WITHOUT_TWEAK}-${PROJECT_VERSION_EXTRA}")
|
||
set(SDK_VERSION_STRING "\"${PROJECT_VERSION_WITHOUT_TWEAK}-${PROJECT_VERSION_EXTRA}\"")
|
||
elseif(PROJECT_VERSION_TWEAK AND NOT PROJECT_VERSION_TWEAK EQUAL 0)
|
||
# 有 TWEAK:显示 MAJOR.MINOR.PATCH.TWEAK
|
||
set(PROJECT_VERSION_STR "${PROJECT_VERSION}")
|
||
set(SDK_VERSION_STRING "\"${PROJECT_VERSION}\"")
|
||
else()
|
||
# 正式版本:显示 MAJOR.MINOR.PATCH
|
||
set(PROJECT_VERSION_STR "${PROJECT_VERSION_WITHOUT_TWEAK}")
|
||
set(SDK_VERSION_STRING "\"${PROJECT_VERSION_WITHOUT_TWEAK}\"")
|
||
endif()
|
||
|
||
# 计算数值版本(用于版本比较)
|
||
# SDK_VERSION_NUMBER: 24位编码 0xMMNNPP (MAJOR.MINOR.PATCH)
|
||
math(EXPR SDK_VERSION_NUMBER_INT "(${PROJECT_VERSION_MAJOR} << 16) + (${PROJECT_VERSION_MINOR} << 8) + (${PROJECT_VERSION_PATCH})")
|
||
to_hex(${SDK_VERSION_NUMBER_INT} SDK_VERSION_NUMBER)
|
||
|
||
# SDKVERSION: 32位编码 0xMMNNPPTT (MAJOR.MINOR.PATCH.TWEAK)
|
||
math(EXPR SDKVERSION_INT "(${PROJECT_VERSION_MAJOR} << 24) + (${PROJECT_VERSION_MINOR} << 16) + (${PROJECT_VERSION_PATCH} << 8) + (${PROJECT_VERSION_TWEAK})")
|
||
to_hex(${SDKVERSION_INT} SDKVERSION)
|
||
|
||
# SDK_VERSION_CODE: 与 SDK_VERSION_NUMBER_INT 相同(用于兼容)
|
||
set(SDK_VERSION_CODE ${SDK_VERSION_NUMBER_INT})
|
||
|
||
# 打印版本信息(可以通过 NO_PRINT_VERSION 禁用)
|
||
if(NOT NO_PRINT_VERSION)
|
||
message(STATUS "arcs_sdk: ${PROJECT_VERSION_STR} (${ARCS_SDK_BASE})")
|
||
endif()
|