diff --git a/sysbuild.cmake b/sysbuild.cmake index c30b9a0..2e588ce 100644 --- a/sysbuild.cmake +++ b/sysbuild.cmake @@ -42,8 +42,9 @@ if(SB_CONFIG_BOOTLOADER_MCUBOOT) ) endif() -# DFU ZIP 파일명에 MCUboot 서명 버전을 붙인 복사본 생성 +# DFU ZIP 파일명에 공식 FW 버전과 MCUboot 이미지 버전을 함께 붙인 복사본 생성 set(APP_PRJ_CONF "${APP_DIR}/prj.conf") +set(APP_MAIN_H "${APP_DIR}/src/main.h") if(EXISTS "${APP_PRJ_CONF}") file(READ "${APP_PRJ_CONF}" APP_PRJ_CONF_TEXT) @@ -51,9 +52,12 @@ if(EXISTS "${APP_PRJ_CONF}") set(DFU_ZIP_VERSION "${CMAKE_MATCH_1}") set(DFU_ZIP_SUFFIX "${DFU_ZIP_VERSION}") - # 0.0.1+3 형식은 사용자가 구분하기 쉽도록 1+3만 사용 - if(DFU_ZIP_VERSION MATCHES "^0\\.0\\.([0-9]+\\+[^+]+)$") - set(DFU_ZIP_SUFFIX "${CMAKE_MATCH_1}") + if(EXISTS "${APP_MAIN_H}") + file(READ "${APP_MAIN_H}" APP_MAIN_H_TEXT_FOR_DFU) + if(APP_MAIN_H_TEXT_FOR_DFU MATCHES "#define[ \t]+FIRMWARE_VERSION[ \t]+\"([^\"]+)\"") + set(DFU_FW_VERSION "${CMAKE_MATCH_1}") + set(DFU_ZIP_SUFFIX "${DFU_FW_VERSION}_${DFU_ZIP_VERSION}") + endif() endif() # 파일명에 쓰기 어려운 문자는 밑줄로 치환 @@ -86,11 +90,15 @@ if(EXISTS "${APP_MAIN_H}") if(APP_MAIN_H_TEXT MATCHES "#define[ \t]+FIRMWARE_VERSION[ \t]+\"([^\"]+)\"") set(FW_HEX_VERSION "${CMAKE_MATCH_1}") - string(REGEX REPLACE "[^A-Za-z0-9_.+-]" "_" FW_HEX_VERSION "${FW_HEX_VERSION}") + set(FW_HEX_SUFFIX "${FW_HEX_VERSION}") + if(DEFINED DFU_ZIP_VERSION) + set(FW_HEX_SUFFIX "${FW_HEX_VERSION}_${DFU_ZIP_VERSION}") + endif() + string(REGEX REPLACE "[^A-Za-z0-9_.+-]" "_" FW_HEX_SUFFIX "${FW_HEX_SUFFIX}") set(FW_HEX_SOURCE "${CMAKE_BINARY_DIR}/merged.hex") set(FW_HEX_RELEASE_DIR "${APP_DIR}/release") - set(FW_HEX_VERSIONED "${FW_HEX_RELEASE_DIR}/VesiScan-Basic_${FW_HEX_VERSION}.hex") + set(FW_HEX_VERSIONED "${FW_HEX_RELEASE_DIR}/VesiScan-Basic_${FW_HEX_SUFFIX}.hex") add_custom_command( OUTPUT "${FW_HEX_VERSIONED}"