macro(HEXCHAR2DEC VAR VAL) if(${VAL} MATCHES "[0-9]") set(${VAR} ${VAL}) elseif(${VAL} MATCHES "[aA]") set(${VAR} 10) elseif(${VAL} MATCHES "[bB]") set(${VAR} 11) elseif(${VAL} MATCHES "[cC]") set(${VAR} 12) elseif(${VAL} MATCHES "[dD]") set(${VAR} 13) elseif(${VAL} MATCHES "[eE]") set(${VAR} 14) elseif(${VAL} MATCHES "[fF]") set(${VAR} 15) else() message(FATAL_ERROR "Invalid format for hexidecimal character") endif() endmacro() macro(HEX2DEC VAR VAL) set(CURINDEX 0) string(LENGTH "${VAL}" CURLENGTH) set(${VAR} 0) while(CURINDEX LESS CURLENGTH) string(SUBSTRING "${VAL}" ${CURINDEX} 1 CHAR) HEXCHAR2DEC(CHAR ${CHAR}) math(EXPR POWAH "(1 << ((${CURLENGTH} - ${CURINDEX} - 1) * 4))") math(EXPR CHAR "(${CHAR} * ${POWAH})") math(EXPR ${VAR} "${${VAR}} + ${CHAR}") math(EXPR CURINDEX "${CURINDEX} + 1") endwhile() endmacro() macro(SET_VERSION MAJOR MINOR FILE) set(ROLLBACK 4) file(READ ${FILE} ver) string(REGEX MATCHALL "0x([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])" _ ${ver}) string(CONCAT ver_major ${CMAKE_MATCH_1}${CMAKE_MATCH_2}) string(CONCAT ver_minor ${CMAKE_MATCH_3}${CMAKE_MATCH_4}) HEX2DEC(ver_major ${ver_major}) HEX2DEC(ver_minor ${ver_minor}) message(STATUS "Found version:\t\t ${ver_major}.${ver_minor}") if(PICO_PLATFORM) if(PICO_RP2350 AND SECURE_BOOT_PKEY) message(STATUS "Setting rollback version:\t ${ROLLBACK}") pico_set_binary_version( ${CMAKE_PROJECT_NAME} MAJOR ${ver_major} MINOR ${ver_minor} ROLLBACK ${ROLLBACK} ) else() pico_set_binary_version( ${CMAKE_PROJECT_NAME} MAJOR ${ver_major} MINOR ${ver_minor} ) endif() endif() set(${MAJOR} ${ver_major}) set(${MINOR} ${ver_minor}) endmacro()