From 916d02824eaa723d369b92251fea8b76a19c95b9 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Thu, 7 Sep 2023 18:46:47 -0400 Subject: [PATCH 01/15] Initial round of changes to address some cmake features --- CMakeLists.txt | 31 ++++++++++++++++++++++----- Firmware/Configuration.h | 12 +++++++++-- Firmware/util.cpp | 5 ++++- Firmware/util.h | 3 +++ cmake/GetGitRevisionDescription.cmake | 2 +- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bf72ead3b9..d5a6f4c9c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,9 +36,27 @@ set(CUSTOM_COMPILE_OPTIONS set(FN_PREFIX "FW${PROJECT_VERSION}+${PROJECT_VERSION_SUFFIX}") # Inform user about the resolved settings -message(STATUS "Project version ...........: ${PROJECT_VERSION}") -message(STATUS "Project version suffix ....: ${PROJECT_VERSION_SUFFIX}") -message(STATUS "Project version description: ${PROJECT_VERSION_FULL}") +message(STATUS "Project version (Configuration.h): ${PROJECT_VERSION}") +message(STATUS "Project version suffix ..........: ${PROJECT_VERSION_SUFFIX}") +message(STATUS "Project version description......: ${PROJECT_VERSION_FULL}") +message(STATUS "PROJECT() VERSION argument.......: ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}") + + +string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") + +if(NOT ${CMAKE_MATCH_1} STREQUAL ${PROJECT_VERSION_MAJOR}) + message(FATAL_ERROR "Major version of current tag disagrees with Configuration.h ${CMAKE_MATCH_1}!=${PROJECT_VERSION_MAJOR}") +endif() + +if(NOT ${CMAKE_MATCH_2} STREQUAL ${PROJECT_VERSION_MINOR}) + message(FATAL_ERROR "Minor version of current tag disagrees with Configuration.h ${CMAKE_MATCH_2}!=${PROJECT_VERSION_MINOR}") +endif() + +if(NOT ${CMAKE_MATCH_3} STREQUAL ${PROJECT_VERSION_REV}) + message(FATAL_ERROR "Rev version of current tag disagrees with Configuration.h ${CMAKE_MATCH_3}!=${PROJECT_VERSION_REV}") +endif() + +MESSAGE(STATUS "Configuration.h and tag match: OK (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3})") # Language configuration set(MAIN_LANGUAGES @@ -58,7 +76,7 @@ set(COMMUNITY_LANGUAGES set(SELECTED_LANGUAGES ${MAIN_LANGUAGES} ${COMMUNITY_LANGUAGES}) get_dependency_directory(prusa3dboards PRUSA_BOARDS_DIR) -project(Prusa-Firmware) +project(Prusa-Firmware VERSION ${PROJECT_VERSION}) add_subdirectory(lib) # Get LANG_MAX_SIZE from sources @@ -314,6 +332,9 @@ function(add_base_binary variant_name) ${variant_name} PRIVATE CMAKE_CONTROL FW_REPOSITORY="${PROJECT_REPOSITORY}" FW_VERSION_FULL="${PROJECT_VERSION_FULL}" FW_COMMIT_HASH=0x${FW_COMMIT_HASH} + FW_MAJOR=${PROJECT_VERSION_MAJOR} + FW_MINOR=${PROJECT_VERSION_MINOR} + FW_REVISION=${PROJECT_VERSION_REV} ) endfunction() @@ -500,7 +521,7 @@ if(CMAKE_CROSSCOMPILING) set(DIR_NAME ${THIS_VAR}) file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME}) file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME}/CMakeLists.txt - "project(${DIR_NAME})\nfw_add_variant(${THIS_VAR})" + "project(${DIR_NAME} VERSION ${PROJECT_VERSION})\nfw_add_variant(${THIS_VAR})" ) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME}) endforeach(THIS_VAR IN LISTS FW_VARIANTS) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index d6973dc480..6a44e9fc82 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -12,12 +12,20 @@ extern const char _sPrinterName[] PROGMEM; extern const uint16_t _nPrinterMmuType; extern const char _sPrinterMmuName[] PROGMEM; -// Firmware version +// Firmware version. +// NOTE: These are ONLY used if you are not building via cmake and/or not in a git repository. +// Otherwise the repository information takes precedence. +#ifndef CMAKE_CONTROL #define FW_MAJOR 3 #define FW_MINOR 13 -#define FW_REVISION 1 +#define FW_REVISION 0 +#warning "** Not sure why I had to touch this, but it seems like v3.13.1 is not in the linear history of this branch yet?" +#endif + #define FW_FLAVOR RC //uncomment if DEBUG, DEVEL, ALPHA, BETA or RC #define FW_FLAVERSION 1 //uncomment if FW_FLAVOR is defined and versioning is needed. Limited to max 8. +#warning "^^^These are temporary and need to be provided by cmake" + #ifndef FW_FLAVOR #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) #else diff --git a/Firmware/util.cpp b/Firmware/util.cpp index ea24bac899..63cf340758 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -15,8 +15,11 @@ const uint16_t FW_VERSION_NR[4] PROGMEM = { FW_MINOR, FW_REVISION, (uint16_t)(FW_COMMIT_HASH) // explicitly truncate the hash to fit +#warning "^^^ this is wrong and needs fixing. Should it be build nr or the flavour?" }; +const uint32_t FW_VERSION_HASH PROGMEM = FW_COMMIT_HASH; + const char* FW_VERSION_STR_P() { return FW_VERSION_STR; @@ -147,7 +150,7 @@ inline bool strncmp_PP(const char *p1, const char *p2, uint8_t n) return -1; if (pgm_read_byte(p1) > pgm_read_byte(p2)) return 1; - } + } } return 0; } diff --git a/Firmware/util.h b/Firmware/util.h index 0fcf768242..ee57485789 100644 --- a/Firmware/util.h +++ b/Firmware/util.h @@ -4,6 +4,9 @@ extern const uint16_t FW_VERSION_NR[4]; extern const char* FW_VERSION_STR_P(); +extern const uint32_t FW_VERSION_HASH PROGMEM; +static inline uint32_t FW_VERSION_HASH_P() { return (uint32_t)pgm_read_dword(&FW_VERSION_HASH); } + // Definition of a firmware flavor numerical values. // To keep it short as possible // DEVs/ALPHAs/BETAs limited to max 8 flavor versions diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index f9db917e8e..aa0755de1f 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -189,7 +189,7 @@ function(git_describe _var) endif() if(NOT hash) set(${_var} - "HEAD-HASH-NOTFOUND" + "0" # This is an integer in the code... PARENT_SCOPE) return() endif() From ab299e36d18d04c3d88a38b762004f154d4390a3 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Thu, 7 Sep 2023 19:38:07 -0400 Subject: [PATCH 02/15] Use commit number as version tweak value --- CMakeLists.txt | 17 ++++++++++++-- Firmware/Configuration.h | 3 ++- Firmware/util.cpp | 3 +-- cmake/GetGitRevisionDescription.cmake | 32 ++++++++++++++++++++++++--- cmake/ProjectVersion.cmake | 6 ++++- 5 files changed, 52 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5a6f4c9c2..8d29d8064a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,10 +39,10 @@ set(FN_PREFIX "FW${PROJECT_VERSION}+${PROJECT_VERSION_SUFFIX}") message(STATUS "Project version (Configuration.h): ${PROJECT_VERSION}") message(STATUS "Project version suffix ..........: ${PROJECT_VERSION_SUFFIX}") message(STATUS "Project version description......: ${PROJECT_VERSION_FULL}") -message(STATUS "PROJECT() VERSION argument.......: ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}") -string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") +if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN") # No commit hash is known... likely no git. +string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)-.+-([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") if(NOT ${CMAKE_MATCH_1} STREQUAL ${PROJECT_VERSION_MAJOR}) message(FATAL_ERROR "Major version of current tag disagrees with Configuration.h ${CMAKE_MATCH_1}!=${PROJECT_VERSION_MAJOR}") @@ -56,7 +56,19 @@ if(NOT ${CMAKE_MATCH_3} STREQUAL ${PROJECT_VERSION_REV}) message(FATAL_ERROR "Rev version of current tag disagrees with Configuration.h ${CMAKE_MATCH_3}!=${PROJECT_VERSION_REV}") endif() +# Note - we don't check the commit counter, that'd be too much of a headache. Maybe it +# should be an error only on a tagged build? + MESSAGE(STATUS "Configuration.h and tag match: OK (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3})") +MESSAGE(STATUS "Commit nr: Configuration.h: ${PROJECT_VERSION_TWEAK} Tag: ${CMAKE_MATCH_4}") +MESSAGE(STATUS "These tag values will override Configuration.h") +SET(PROJECT_VERSION ${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${CMAKE_MATCH_4}) +else(GIT_FOUND) + +MESSAGE(STATUS "Git was not found. Falling back to Configuration.h values (${PROJECT_VERSION}).") +set(FW_COMMIT_HASH "0") # Clear it, the code expects a binary... + +endif() # Language configuration set(MAIN_LANGUAGES @@ -335,6 +347,7 @@ function(add_base_binary variant_name) FW_MAJOR=${PROJECT_VERSION_MAJOR} FW_MINOR=${PROJECT_VERSION_MINOR} FW_REVISION=${PROJECT_VERSION_REV} + FW_COMMITNR=${PROJECT_VERSION_TWEAK} ) endfunction() diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 6a44e9fc82..a2c607d5f4 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -19,12 +19,13 @@ extern const char _sPrinterMmuName[] PROGMEM; #define FW_MAJOR 3 #define FW_MINOR 13 #define FW_REVISION 0 +#define FW_COMMITNR 6853 #warning "** Not sure why I had to touch this, but it seems like v3.13.1 is not in the linear history of this branch yet?" #endif #define FW_FLAVOR RC //uncomment if DEBUG, DEVEL, ALPHA, BETA or RC #define FW_FLAVERSION 1 //uncomment if FW_FLAVOR is defined and versioning is needed. Limited to max 8. -#warning "^^^These are temporary and need to be provided by cmake" +#warning "^^^These are temporary and still need to be provided by cmake" #ifndef FW_FLAVOR #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) diff --git a/Firmware/util.cpp b/Firmware/util.cpp index 63cf340758..626feaae08 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -14,8 +14,7 @@ const uint16_t FW_VERSION_NR[4] PROGMEM = { FW_MAJOR, FW_MINOR, FW_REVISION, -(uint16_t)(FW_COMMIT_HASH) // explicitly truncate the hash to fit -#warning "^^^ this is wrong and needs fixing. Should it be build nr or the flavour?" + FW_COMMITNR }; const uint32_t FW_VERSION_HASH PROGMEM = FW_COMMIT_HASH; diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index aa0755de1f..29fa5c4134 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -189,7 +189,7 @@ function(git_describe _var) endif() if(NOT hash) set(${_var} - "0" # This is an integer in the code... + "HEAD-HASH-NOTFOUND" PARENT_SCOPE) return() endif() @@ -229,9 +229,9 @@ function(git_describe_working_tree _var) PARENT_SCOPE) return() endif() - + git_head_commit_number(COMMIT_COUNT) #Bake the commit count into the full DSC execute_process( - COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN} + COMMAND "${GIT_EXECUTABLE}" describe --abbrev=0 --dirty=-${COMMIT_COUNT}-D --broken=-B ${ARGN} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out @@ -358,3 +358,29 @@ function(git_head_commit_data _var _format) ${out} PARENT_SCOPE) endfunction() + +function(git_head_commit_number _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + if(NOT GIT_FOUND) + set(${_var} + "GIT-NOTFOUND" + PARENT_SCOPE) + return() + endif() + + execute_process( + COMMAND "${GIT_EXECUTABLE}" rev-list --count HEAD + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + RESULT_VARIABLE res + OUTPUT_VARIABLE out + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT res EQUAL 0) + set(out "${out}-${res}-NOTFOUND") + endif() + + set(${_var} + "${out}" + PARENT_SCOPE) +endfunction() diff --git a/cmake/ProjectVersion.cmake b/cmake/ProjectVersion.cmake index f7afa7a274..fd40b45481 100644 --- a/cmake/ProjectVersion.cmake +++ b/cmake/ProjectVersion.cmake @@ -21,6 +21,7 @@ file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/Configuration.h CFG_VER_DATA list(GET CFG_VER_DATA 0 PROJECT_VERSION_MAJOR) list(GET CFG_VER_DATA 1 PROJECT_VERSION_MINOR) list(GET CFG_VER_DATA 2 PROJECT_VERSION_REV) +list(GET CFG_VER_DATA 3 PROJECT_VERSION_TWEAK) string(REGEX MATCH "FW_MAJOR ([0-9]+)" PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") set(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}") @@ -31,7 +32,10 @@ set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_1}) string(REGEX MATCH "FW_REVISION +([0-9]+)" PROJECT_VERSION_REV "${PROJECT_VERSION_REV}") set(PROJECT_VERSION_REV ${CMAKE_MATCH_1}) -set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}") +string(REGEX MATCH "FW_COMMITNR +([0-9]+)" PROJECT_VERSION_TWEAK "${PROJECT_VERSION_TWEAK}") +set(PROJECT_VERSION_TWEAK ${CMAKE_MATCH_1}) + +set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}.${PROJECT_VERSION_TWEAK}") function(resolve_version_variables) if(FW_COMMIT_DSC) From 2485c363911e920063927cc120e76875b3d3c5d7 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Sat, 9 Sep 2023 13:19:11 -0400 Subject: [PATCH 03/15] Add dev status handling --- CMakeLists.txt | 35 ++++++++++++++++++----- Firmware/Configuration.h | 11 +++++--- Firmware/util.cpp | 2 +- cmake/ProjectVersion.cmake | 58 +++++++++++++++++++++++++++++++++++--- 4 files changed, 90 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d29d8064a..0e9fca05e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,9 +40,11 @@ message(STATUS "Project version (Configuration.h): ${PROJECT_VERSION}") message(STATUS "Project version suffix ..........: ${PROJECT_VERSION_SUFFIX}") message(STATUS "Project version description......: ${PROJECT_VERSION_FULL}") +# testing +# SET(FW_COMMIT_DSC "v3.13.0-1234") -if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN") # No commit hash is known... likely no git. -string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)-.+-([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") +if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN") # else -> no commit hash is known... likely no git. +string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)-?(${DEV_TAG_REGEX})?([0-9]+)?-([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") if(NOT ${CMAKE_MATCH_1} STREQUAL ${PROJECT_VERSION_MAJOR}) message(FATAL_ERROR "Major version of current tag disagrees with Configuration.h ${CMAKE_MATCH_1}!=${PROJECT_VERSION_MAJOR}") @@ -56,13 +58,24 @@ if(NOT ${CMAKE_MATCH_3} STREQUAL ${PROJECT_VERSION_REV}) message(FATAL_ERROR "Rev version of current tag disagrees with Configuration.h ${CMAKE_MATCH_3}!=${PROJECT_VERSION_REV}") endif() +if (CMAKE_MATCH_4) # Do we have a build type? + decode_flavor_code(PROJECT_VER_TAG_FLV "${CMAKE_MATCH_4}" "${CMAKE_MATCH_5}") +else() + # No dev status found, it must be a final tag. + decode_flavor_code(PROJECT_VER_TAG_FLV "RELEASED" "0") +endif() + +if(NOT ${PROJECT_VER_TAG_FLV} STREQUAL ${PROJECT_VERSION_TWEAK}) + message(FATAL_ERROR "Dev status of current tag disagrees with Configuration.h ${PROJECT_VER_TAG_FLV}!=${PROJECT_VERSION_TWEAK}") +endif() # Note - we don't check the commit counter, that'd be too much of a headache. Maybe it # should be an error only on a tagged build? -MESSAGE(STATUS "Configuration.h and tag match: OK (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3})") -MESSAGE(STATUS "Commit nr: Configuration.h: ${PROJECT_VERSION_TWEAK} Tag: ${CMAKE_MATCH_4}") + +MESSAGE(STATUS "Configuration.h and tag match: OK (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV})") +MESSAGE(STATUS "Commit Nr: Configuration.h: ${PROJECT_VERSION_COMMIT} Tag: ${CMAKE_MATCH_6}") MESSAGE(STATUS "These tag values will override Configuration.h") -SET(PROJECT_VERSION ${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${CMAKE_MATCH_4}) +SET(PROJECT_VERSION ${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV}) else(GIT_FOUND) MESSAGE(STATUS "Git was not found. Falling back to Configuration.h values (${PROJECT_VERSION}).") @@ -339,7 +352,7 @@ function(add_base_binary variant_name) target_link_options( ${variant_name} PUBLIC -Wl,-Map=${CMAKE_CURRENT_BINARY_DIR}/${variant_name}.map ) - + decode_tweak_version(PROJECT_VERSION_FLV PROJECT_VERSION_FLV_VER) target_compile_definitions( ${variant_name} PRIVATE CMAKE_CONTROL FW_REPOSITORY="${PROJECT_REPOSITORY}" @@ -347,8 +360,16 @@ function(add_base_binary variant_name) FW_MAJOR=${PROJECT_VERSION_MAJOR} FW_MINOR=${PROJECT_VERSION_MINOR} FW_REVISION=${PROJECT_VERSION_REV} - FW_COMMITNR=${PROJECT_VERSION_TWEAK} + FW_COMMITNR=${PROJECT_VERSION_COMMIT} ) + if(NOT PROJECT_VERSION_FLV STREQUAL "RELEASED") + target_compile_definitions( + ${variant_name} + PRIVATE + FW_FLAVERSION=${PROJECT_VERSION_FLV_VER} + FW_FLAVOR=${PROJECT_VERSION_FLV} + ) + endif() endfunction() function(fw_add_variant variant_name) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index a2c607d5f4..dec35e9039 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -5,6 +5,8 @@ #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) +#define _CONCAT(x,y) x##y +#define CONCAT(x,y) _CONCAT(x,y) #include extern const uint16_t _nPrinterType; @@ -19,17 +21,18 @@ extern const char _sPrinterMmuName[] PROGMEM; #define FW_MAJOR 3 #define FW_MINOR 13 #define FW_REVISION 0 -#define FW_COMMITNR 6853 #warning "** Not sure why I had to touch this, but it seems like v3.13.1 is not in the linear history of this branch yet?" -#endif - +#define FW_COMMITNR 6853 #define FW_FLAVOR RC //uncomment if DEBUG, DEVEL, ALPHA, BETA or RC #define FW_FLAVERSION 1 //uncomment if FW_FLAVOR is defined and versioning is needed. Limited to max 8. -#warning "^^^These are temporary and still need to be provided by cmake" +#endif #ifndef FW_FLAVOR + #define FW_TWEAK (FIRMWARE_REVISION_RELEASED) #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) #else + // Construct the TWEAK value as it is expected from the enum. + #define FW_TWEAK (CONCAT(FIRMWARE_REVISION_,FW_FLAVOR) + FW_FLAVERSION) #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) "-" STR(FW_FLAVOR) "" STR(FW_FLAVERSION) #endif diff --git a/Firmware/util.cpp b/Firmware/util.cpp index 626feaae08..343cafbe06 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -14,7 +14,7 @@ const uint16_t FW_VERSION_NR[4] PROGMEM = { FW_MAJOR, FW_MINOR, FW_REVISION, - FW_COMMITNR + FW_TWEAK, }; const uint32_t FW_VERSION_HASH PROGMEM = FW_COMMIT_HASH; diff --git a/cmake/ProjectVersion.cmake b/cmake/ProjectVersion.cmake index fd40b45481..1310e2ee66 100644 --- a/cmake/ProjectVersion.cmake +++ b/cmake/ProjectVersion.cmake @@ -15,13 +15,50 @@ # ~~~ #]] +# NOTE: these are ordered according to the enum in Util.h. DO NOT ALTER! +# // Definition of a firmware flavor numerical values. +# // To keep it short as possible +# // DEVs/ALPHAs/BETAs limited to max 8 flavor versions +# // RCs limited to 32 flavor versions +# // Final Release always 64 as highest +# enum FirmwareRevisionFlavorType : uint16_t { +# FIRMWARE_REVISION_RELEASED = 0x0040, +# FIRMWARE_REVISION_DEV = 0x0000, +# FIRMWARE_REVISION_ALPHA = 0x008, +# FIRMWARE_REVISION_BETA = 0x0010, +# FIRMWARE_REVISION_RC = 0x0020 +# }; + +# Note - the Xes are padding because there is an extended allowance of RC numbers. +SET(DEV_TAGS "DEV" "ALPHA" "BETA" "RC" "X" "X" "X" "X" "RELEASED") +STRING(REPLACE ";" "\|" DEV_TAG_REGEX "${DEV_TAGS}") +function(decode_flavor_code _output _label _ver) + LIST(FIND DEV_TAGS "${_label}" _code_index) + MESSAGE(DEBUG "Tweak math: (8*0${_code_index})+${_ver}") + MATH(EXPR _decoded "(8*0${_code_index})+${_ver}") + set(${_output} + "${_decoded}" + PARENT_SCOPE) +endfunction() + +function(decode_tweak_version _str _ver) + MATH(EXPR _string_id "(${PROJECT_VERSION_TWEAK})/8") + MATH(EXPR _version "${PROJECT_VERSION_TWEAK}-(8*${_string_id})") + set(${_ver} "${_version}" PARENT_SCOPE) + LIST(GET DEV_TAGS ${_string_id} _string_val) + set(${_str} "${_string_val}" PARENT_SCOPE) +endfunction() + + file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/Configuration.h CFG_VER_DATA - REGEX "#define FW_[A-Z]+ ([0-9]+)" + REGEX "#define FW_[A-Z]+ (${DEV_TAG_REGEX}|[0-9]+)" ) list(GET CFG_VER_DATA 0 PROJECT_VERSION_MAJOR) list(GET CFG_VER_DATA 1 PROJECT_VERSION_MINOR) list(GET CFG_VER_DATA 2 PROJECT_VERSION_REV) -list(GET CFG_VER_DATA 3 PROJECT_VERSION_TWEAK) +list(GET CFG_VER_DATA 3 PROJECT_VERSION_COMMIT) +list(GET CFG_VER_DATA 4 PROJECT_VERSION_FLV) +list(GET CFG_VER_DATA 5 PROJECT_VERSION_FLV_VER) string(REGEX MATCH "FW_MAJOR ([0-9]+)" PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") set(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}") @@ -32,8 +69,21 @@ set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_1}) string(REGEX MATCH "FW_REVISION +([0-9]+)" PROJECT_VERSION_REV "${PROJECT_VERSION_REV}") set(PROJECT_VERSION_REV ${CMAKE_MATCH_1}) -string(REGEX MATCH "FW_COMMITNR +([0-9]+)" PROJECT_VERSION_TWEAK "${PROJECT_VERSION_TWEAK}") -set(PROJECT_VERSION_TWEAK ${CMAKE_MATCH_1}) +string(REGEX MATCH "FW_COMMITNR +([0-9]+)" PROJECT_VERSION_COMMIT "${PROJECT_VERSION_COMMIT}") +set(PROJECT_VERSION_COMMIT ${CMAKE_MATCH_1}) + +string(REGEX MATCH "^#define FW_FLAVOR +(${DEV_TAG_REGEX})" PROJECT_VERSION_FLV "${PROJECT_VERSION_FLV}") +IF(PROJECT_VERSION_FLV) + message(STATUS "Found a defined FW_FLAVOR") + set(PROJECT_VERSION_FLV ${CMAKE_MATCH_1}) + string(REGEX MATCH "FW_FLAVERSION +([0-9]+)" PROJECT_VERSION_FLV_VER "${PROJECT_VERSION_FLV_VER}") + set(PROJECT_VERSION_FLV_VER ${CMAKE_MATCH_1}) + + decode_flavor_code(PROJECT_VERSION_TWEAK "${PROJECT_VERSION_FLV}" "${PROJECT_VERSION_FLV_VER}") +ELSE() + decode_flavor_code(PROJECT_VERSION_TWEAK "RELEASED" "0") +ENDIF() + set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}.${PROJECT_VERSION_TWEAK}") From d8f764205897c9637bcf6260e537525dab8a9147 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Sat, 9 Sep 2023 13:25:00 -0400 Subject: [PATCH 04/15] Fix comment --- Firmware/Configuration.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index dec35e9039..4b52f2049b 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -23,7 +23,7 @@ extern const char _sPrinterMmuName[] PROGMEM; #define FW_REVISION 0 #warning "** Not sure why I had to touch this, but it seems like v3.13.1 is not in the linear history of this branch yet?" #define FW_COMMITNR 6853 -#define FW_FLAVOR RC //uncomment if DEBUG, DEVEL, ALPHA, BETA or RC +#define FW_FLAVOR RC //uncomment if DEV, ALPHA, BETA or RC #define FW_FLAVERSION 1 //uncomment if FW_FLAVOR is defined and versioning is needed. Limited to max 8. #endif From 251e4ff370cf456a3fd93fa45a112f1733d5f121 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Mon, 11 Sep 2023 18:07:00 -0400 Subject: [PATCH 05/15] Add default-off option to enforce config.h checks --- CMakeLists.txt | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e9fca05e8..225a5e545f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,8 @@ include(cmake/ReproducibleBuild.cmake) include(cmake/ProjectVersion.cmake) resolve_version_variables() +OPTION(ENFORCE_VERSION_MATCH "Enforce checking that configuration.h matches any parsed git tags" OFF) + set(PROJECT_VERSION_SUFFIX "" CACHE @@ -46,18 +48,6 @@ message(STATUS "Project version description......: ${PROJECT_VERSION_FULL}") if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN") # else -> no commit hash is known... likely no git. string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)-?(${DEV_TAG_REGEX})?([0-9]+)?-([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") -if(NOT ${CMAKE_MATCH_1} STREQUAL ${PROJECT_VERSION_MAJOR}) - message(FATAL_ERROR "Major version of current tag disagrees with Configuration.h ${CMAKE_MATCH_1}!=${PROJECT_VERSION_MAJOR}") -endif() - -if(NOT ${CMAKE_MATCH_2} STREQUAL ${PROJECT_VERSION_MINOR}) - message(FATAL_ERROR "Minor version of current tag disagrees with Configuration.h ${CMAKE_MATCH_2}!=${PROJECT_VERSION_MINOR}") -endif() - -if(NOT ${CMAKE_MATCH_3} STREQUAL ${PROJECT_VERSION_REV}) - message(FATAL_ERROR "Rev version of current tag disagrees with Configuration.h ${CMAKE_MATCH_3}!=${PROJECT_VERSION_REV}") -endif() - if (CMAKE_MATCH_4) # Do we have a build type? decode_flavor_code(PROJECT_VER_TAG_FLV "${CMAKE_MATCH_4}" "${CMAKE_MATCH_5}") else() @@ -65,17 +55,33 @@ else() decode_flavor_code(PROJECT_VER_TAG_FLV "RELEASED" "0") endif() -if(NOT ${PROJECT_VER_TAG_FLV} STREQUAL ${PROJECT_VERSION_TWEAK}) - message(FATAL_ERROR "Dev status of current tag disagrees with Configuration.h ${PROJECT_VER_TAG_FLV}!=${PROJECT_VERSION_TWEAK}") -endif() -# Note - we don't check the commit counter, that'd be too much of a headache. Maybe it -# should be an error only on a tagged build? +if(ENFORCE_VERSION_MATCH) + if(NOT ${CMAKE_MATCH_1} STREQUAL ${PROJECT_VERSION_MAJOR}) + message(FATAL_ERROR "Major version of current tag disagrees with Configuration.h ${CMAKE_MATCH_1}!=${PROJECT_VERSION_MAJOR}") + endif() + + if(NOT ${CMAKE_MATCH_2} STREQUAL ${PROJECT_VERSION_MINOR}) + message(FATAL_ERROR "Minor version of current tag disagrees with Configuration.h ${CMAKE_MATCH_2}!=${PROJECT_VERSION_MINOR}") + endif() + + if(NOT ${CMAKE_MATCH_3} STREQUAL ${PROJECT_VERSION_REV}) + message(FATAL_ERROR "Rev version of current tag disagrees with Configuration.h ${CMAKE_MATCH_3}!=${PROJECT_VERSION_REV}") + endif() + if(NOT ${PROJECT_VER_TAG_FLV} STREQUAL ${PROJECT_VERSION_TWEAK}) + message(FATAL_ERROR "Dev status of current tag disagrees with Configuration.h ${PROJECT_VER_TAG_FLV}!=${PROJECT_VERSION_TWEAK}") + endif() + # Note - we don't check the commit counter, that'd be too much of a headache. Maybe it + # should be an error only on a tagged build? + MESSAGE(STATUS "Configuration.h and tag match: OK (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV})") +else() + MESSAGE(STATUS "Configuration.h and tag (not enforced): (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV})") +endif() -MESSAGE(STATUS "Configuration.h and tag match: OK (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV})") MESSAGE(STATUS "Commit Nr: Configuration.h: ${PROJECT_VERSION_COMMIT} Tag: ${CMAKE_MATCH_6}") MESSAGE(STATUS "These tag values will override Configuration.h") SET(PROJECT_VERSION ${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV}) +SET(PROJECT_VERSION_COMMIT ${CMAKE_MATCH_6}) else(GIT_FOUND) MESSAGE(STATUS "Git was not found. Falling back to Configuration.h values (${PROJECT_VERSION}).") From f1ab89183d25084531dace2c5af8b94c8b6af86d Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Mon, 11 Sep 2023 18:24:52 -0400 Subject: [PATCH 06/15] improve handling of invalid COMMIT_DSC --- CMakeLists.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 225a5e545f..1c670a7576 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ include(cmake/ProjectVersion.cmake) resolve_version_variables() OPTION(ENFORCE_VERSION_MATCH "Enforce checking that configuration.h matches any parsed git tags" OFF) +OPTION(NO_TAG_IS_FATAL "If tag parsing fails, issue a fatal error" OFF) set(PROJECT_VERSION_SUFFIX "" @@ -45,7 +46,7 @@ message(STATUS "Project version description......: ${PROJECT_VERSION_FULL}") # testing # SET(FW_COMMIT_DSC "v3.13.0-1234") -if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN") # else -> no commit hash is known... likely no git. +if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN" AND NOT "${FW_COMMIT_DSC}" MATCHES ".+NOTFOUND\$") # else -> no commit hash is known... likely no git. string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)-?(${DEV_TAG_REGEX})?([0-9]+)?-([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") if (CMAKE_MATCH_4) # Do we have a build type? @@ -83,8 +84,11 @@ MESSAGE(STATUS "These tag values will override Configuration.h") SET(PROJECT_VERSION ${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV}) SET(PROJECT_VERSION_COMMIT ${CMAKE_MATCH_6}) else(GIT_FOUND) - -MESSAGE(STATUS "Git was not found. Falling back to Configuration.h values (${PROJECT_VERSION}).") +if (NO_TAG_IS_FATAL) + MESSAGE(FATAL_ERROR "Git was not found or an error occurred parsing the tag. This is a fatal error according to the settings.") +else() + MESSAGE(STATUS "Git was not found or an error occurred parsing the tag. Falling back to Configuration.h values (${PROJECT_VERSION}).") +endif() set(FW_COMMIT_HASH "0") # Clear it, the code expects a binary... endif() From 2b5e2dc9fed8c9d3167186ef63d2666c2f2ed8fc Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Mon, 11 Sep 2023 18:53:20 -0400 Subject: [PATCH 07/15] fix commit number handling --- CMakeLists.txt | 2 +- cmake/GetGitRevisionDescription.cmake | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c670a7576..2688a4de04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ message(STATUS "Project version description......: ${PROJECT_VERSION_FULL}") # testing # SET(FW_COMMIT_DSC "v3.13.0-1234") -if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN" AND NOT "${FW_COMMIT_DSC}" MATCHES ".+NOTFOUND\$") # else -> no commit hash is known... likely no git. +if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN" AND NOT "${FW_COMMIT_DSC}" MATCHES ".+NOTFOUND.+") # else -> no commit hash is known... likely no git. string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)-?(${DEV_TAG_REGEX})?([0-9]+)?-([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") if (CMAKE_MATCH_4) # Do we have a build type? diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index 29fa5c4134..c9e8611081 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -231,7 +231,7 @@ function(git_describe_working_tree _var) endif() git_head_commit_number(COMMIT_COUNT) #Bake the commit count into the full DSC execute_process( - COMMAND "${GIT_EXECUTABLE}" describe --abbrev=0 --dirty=-${COMMIT_COUNT}-D --broken=-B ${ARGN} + COMMAND "${GIT_EXECUTABLE}" describe --abbrev=0 --dirty=-D --broken=-B ${ARGN} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out @@ -239,7 +239,11 @@ function(git_describe_working_tree _var) if(NOT res EQUAL 0) set(out "${out}-${res}-NOTFOUND") endif() - + if( "${out}" MATCHES "-D\$") + STRING(REPLACE "-D" "-${COMMIT_COUNT}-D" out "${out}") + else() + set(out "${out}-${COMMIT_COUNT}") + endif() set(${_var} "${out}" PARENT_SCOPE) From a5aab6afd9b27e1d68c97b3ddd18d0004290c39a Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Fri, 22 Sep 2023 17:13:13 -0400 Subject: [PATCH 08/15] Fix PROJECT_VERSION_FULL if git is not available --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2688a4de04..8bc20f1e70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,7 +90,7 @@ else() MESSAGE(STATUS "Git was not found or an error occurred parsing the tag. Falling back to Configuration.h values (${PROJECT_VERSION}).") endif() set(FW_COMMIT_HASH "0") # Clear it, the code expects a binary... - +set(PROJECT_VERSION_FULL "v${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}-${PROJECT_VERSION_FLV}${PROJECT_VERSION_FLV_VER}-${PROJECT_VERSION_COMMIT}") endif() # Language configuration From a6d1985742cc87a7dfc40e82b8f8f18cdb509e58 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Fri, 22 Sep 2023 17:22:05 -0400 Subject: [PATCH 09/15] -Clear project timestamp if git was not used/found -Add git as a runner tool for versioning --- .github/workflows/build.yml | 2 +- CMakeLists.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f793558d2..5a1133b7c5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: # setup base required dependencies - name: Setup dependencies run: | - sudo apt-get install cmake ninja-build python3-pyelftools python3-regex python3-polib + sudo apt-get install cmake ninja-build python3-pyelftools python3-regex python3-polib git # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Checkout ${{ github.event.pull_request.head.ref }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bc20f1e70..35d9a3ba6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,6 +90,7 @@ else() MESSAGE(STATUS "Git was not found or an error occurred parsing the tag. Falling back to Configuration.h values (${PROJECT_VERSION}).") endif() set(FW_COMMIT_HASH "0") # Clear it, the code expects a binary... +set(PROJECT_VERSION_TIMESTAMP "0") set(PROJECT_VERSION_FULL "v${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}-${PROJECT_VERSION_FLV}${PROJECT_VERSION_FLV_VER}-${PROJECT_VERSION_COMMIT}") endif() From b81a440b7c3c265699d9d9439183cbba08ecfe9d Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Fri, 22 Sep 2023 17:31:33 -0400 Subject: [PATCH 10/15] Do full fetch for versioning information --- .github/workflows/build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5a1133b7c5..f5b19ff044 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: # setup base required dependencies - name: Setup dependencies run: | - sudo apt-get install cmake ninja-build python3-pyelftools python3-regex python3-polib git + sudo apt-get install cmake ninja-build python3-pyelftools python3-regex python3-polib # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Checkout ${{ github.event.pull_request.head.ref }} @@ -27,6 +27,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} submodules: true + fetch-depth: 0 - name: Checkout ${{ github.event.ref }} uses: actions/checkout@v3 @@ -34,6 +35,7 @@ jobs: with: ref: ${{ github.event.ref }} submodules: true + fetch-depth: 0 - name: Cache Dependencies uses: actions/cache@v3.0.11 From 20540cc61b81d3dd589e90124768c77cb556c4af Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Fri, 22 Sep 2023 17:57:41 -0400 Subject: [PATCH 11/15] Set repository, if possible. --- CMakeLists.txt | 1 + cmake/GetGitRevisionDescription.cmake | 31 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35d9a3ba6b..a34bfe7f11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,6 +83,7 @@ MESSAGE(STATUS "Commit Nr: Configuration.h: ${PROJECT_VERSION_COMMIT} Tag: ${CMA MESSAGE(STATUS "These tag values will override Configuration.h") SET(PROJECT_VERSION ${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${PROJECT_VER_TAG_FLV}) SET(PROJECT_VERSION_COMMIT ${CMAKE_MATCH_6}) +git_get_repository(PROJECT_REPOSITORY) else(GIT_FOUND) if (NO_TAG_IS_FATAL) MESSAGE(FATAL_ERROR "Git was not found or an error occurred parsing the tag. This is a fatal error according to the settings.") diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index c9e8611081..70314c536e 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -388,3 +388,34 @@ function(git_head_commit_number _var) "${out}" PARENT_SCOPE) endfunction() + +function(git_get_repository _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + if(NOT GIT_FOUND) + set(${_var} + "Unknown" + PARENT_SCOPE) + return() + endif() + execute_process( + COMMAND "${GIT_EXECUTABLE}" ls-remote --get-url + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + RESULT_VARIABLE res + OUTPUT_VARIABLE out + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX MATCH "([A-z0-9\-]+)/Prusa-Firmware.git" out "${out}") + if("${CMAKE_MATCH_COUNT}" EQUAL 1) + message("Found repository name ${CMAKE_MATCH_1}") + set(${_var} + "${CMAKE_MATCH_1}" + PARENT_SCOPE) + else() + message("Failed to get repository information") + set(${_var} + #"${out}" #outputs the github repo user name + "Unknown" #All other repos shown as unknown + PARENT_SCOPE) + endif() +endfunction() From f4ec19d3c712ba76bc8a25350a34920cc6b9a82d Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Fri, 22 Sep 2023 18:08:59 -0400 Subject: [PATCH 12/15] Add debugging --- cmake/GetGitRevisionDescription.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index 70314c536e..bea975d655 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -405,6 +405,7 @@ function(git_get_repository _var) RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + message("remote URL is ${out}") string(REGEX MATCH "([A-z0-9\-]+)/Prusa-Firmware.git" out "${out}") if("${CMAKE_MATCH_COUNT}" EQUAL 1) message("Found repository name ${CMAKE_MATCH_1}") From 98ae24caadc75d8feaaa7825eccb975ee79f0102 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Fri, 22 Sep 2023 18:18:13 -0400 Subject: [PATCH 13/15] Improve handling for http urls --- cmake/GetGitRevisionDescription.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index bea975d655..1bb2f945ec 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -406,7 +406,7 @@ function(git_get_repository _var) OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) message("remote URL is ${out}") - string(REGEX MATCH "([A-z0-9\-]+)/Prusa-Firmware.git" out "${out}") + string(REGEX MATCH "([A-z0-9-]+)/Prusa-Firmware.?g?i?t?" out "${out}") if("${CMAKE_MATCH_COUNT}" EQUAL 1) message("Found repository name ${CMAKE_MATCH_1}") set(${_var} From 4b66485f46f14a6b738de6867b6a2451dd75f0a2 Mon Sep 17 00:00:00 2001 From: vintagepc <53943260+vintagepc@users.noreply.github.com> Date: Fri, 22 Sep 2023 21:48:22 -0400 Subject: [PATCH 14/15] Fix leading v --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a34bfe7f11..499196a7f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,9 +92,11 @@ else() endif() set(FW_COMMIT_HASH "0") # Clear it, the code expects a binary... set(PROJECT_VERSION_TIMESTAMP "0") -set(PROJECT_VERSION_FULL "v${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}-${PROJECT_VERSION_FLV}${PROJECT_VERSION_FLV_VER}-${PROJECT_VERSION_COMMIT}") endif() +#Rewrite to remove leading v, or set it entirely if the data came from Configuration.h +set(PROJECT_VERSION_FULL "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}-${PROJECT_VERSION_FLV}${PROJECT_VERSION_FLV_VER}-${PROJECT_VERSION_COMMIT}") + # Language configuration set(MAIN_LANGUAGES cs de es fr it pl From 52de576e0aa0465ea8a5535d8d1635a87b14e411 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Sat, 23 Sep 2023 13:10:04 -0400 Subject: [PATCH 15/15] change where FW_VERSION_FULL is defined so it's less messy --- CMakeLists.txt | 5 +---- Firmware/Configuration.h | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 499196a7f8..eedc95c9a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,9 +94,6 @@ set(FW_COMMIT_HASH "0") # Clear it, the code expects a binary... set(PROJECT_VERSION_TIMESTAMP "0") endif() -#Rewrite to remove leading v, or set it entirely if the data came from Configuration.h -set(PROJECT_VERSION_FULL "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}-${PROJECT_VERSION_FLV}${PROJECT_VERSION_FLV_VER}-${PROJECT_VERSION_COMMIT}") - # Language configuration set(MAIN_LANGUAGES cs de es fr it pl @@ -370,7 +367,7 @@ function(add_base_binary variant_name) target_compile_definitions( ${variant_name} PRIVATE CMAKE_CONTROL FW_REPOSITORY="${PROJECT_REPOSITORY}" - FW_VERSION_FULL="${PROJECT_VERSION_FULL}" FW_COMMIT_HASH=0x${FW_COMMIT_HASH} + FW_COMMIT_HASH=0x${FW_COMMIT_HASH} FW_MAJOR=${PROJECT_VERSION_MAJOR} FW_MINOR=${PROJECT_VERSION_MINOR} FW_REVISION=${PROJECT_VERSION_REV} diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 4b52f2049b..1b4b04cfc2 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -30,10 +30,12 @@ extern const char _sPrinterMmuName[] PROGMEM; #ifndef FW_FLAVOR #define FW_TWEAK (FIRMWARE_REVISION_RELEASED) #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) + #define FW_VERSION_FULL STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) "-" STR(FW_COMMITNR) #else // Construct the TWEAK value as it is expected from the enum. #define FW_TWEAK (CONCAT(FIRMWARE_REVISION_,FW_FLAVOR) + FW_FLAVERSION) #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) "-" STR(FW_FLAVOR) "" STR(FW_FLAVERSION) + #define FW_VERSION_FULL STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) "-" STR(FW_FLAVOR) "" STR(FW_FLAVERSION) "-" STR(FW_COMMITNR) #endif // The full version string and repository source are set via cmake