# 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()