Files
arcs/arcs-sdk/cmake/version.cmake
2026-08-13 16:50:52 +08:00

74 lines
3.0 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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()