diff --git a/sysbuild.cmake b/sysbuild.cmake index 884f2b3..bbde447 100644 --- a/sysbuild.cmake +++ b/sysbuild.cmake @@ -75,3 +75,32 @@ if(EXISTS "${APP_PRJ_CONF}") ) endif() endif() + +# Production HEX file name based on src/main.h FIRMWARE_VERSION. +set(APP_MAIN_H "${APP_DIR}/src/main.h") +if(EXISTS "${APP_MAIN_H}") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${APP_MAIN_H}") + file(READ "${APP_MAIN_H}" APP_MAIN_H_TEXT) + + 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_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") + + add_custom_command( + OUTPUT "${FW_HEX_VERSIONED}" + COMMAND ${CMAKE_COMMAND} -E make_directory "${FW_HEX_RELEASE_DIR}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FW_HEX_SOURCE}" "${FW_HEX_VERSIONED}" + DEPENDS "${FW_HEX_SOURCE}" + COMMENT "Generating firmware-versioned HEX ${FW_HEX_VERSIONED}" + VERBATIM + ) + + add_custom_target(firmware_versioned_hex ALL + DEPENDS "${FW_HEX_VERSIONED}" + ) + endif() +endif()