From ad7346fb5e25f8fbe533fb6675917d1d068414b9 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Sun, 31 Jul 2022 09:41:45 -0400 Subject: [PATCH] Make CMake the source of truth for versioning --- cmake/HexConcat.cmake | 2 +- cmake/ProjectVersion.cmake | 10 +++------ src/CMakeLists.txt | 23 ++++++++++---------- src/application.cpp | 2 +- src/registers.cpp | 2 +- src/version.c | 18 ---------------- src/version.h | 44 -------------------------------------- src/version.hpp | 32 +++++++++++++++++++++++++++ version.cmake | 15 +++++++++++++ version.txt | 1 - 10 files changed, 65 insertions(+), 84 deletions(-) delete mode 100644 src/version.c delete mode 100644 src/version.h create mode 100644 src/version.hpp create mode 100644 version.cmake delete mode 100644 version.txt diff --git a/cmake/HexConcat.cmake b/cmake/HexConcat.cmake index 30270da..608f06f 100644 --- a/cmake/HexConcat.cmake +++ b/cmake/HexConcat.cmake @@ -3,4 +3,4 @@ set(HEX_PREFIX "\; device = mm-control\n\n") file(READ ${WORK_DIR}/firmware.hex HEX) file(WRITE ${WORK_DIR}/${HEX_NAME} ${HEX_PREFIX}) file(APPEND ${WORK_DIR}/${HEX_NAME} ${HEX}) -message(status "Successfully built ${HEX_NAME}!") +message(STATUS "Successfully built ${HEX_NAME}!") diff --git a/cmake/ProjectVersion.cmake b/cmake/ProjectVersion.cmake index 65c4fb5..c96c96a 100644 --- a/cmake/ProjectVersion.cmake +++ b/cmake/ProjectVersion.cmake @@ -13,13 +13,9 @@ # # ~~~ -# PROJECT_VERSION -file(READ "${CMAKE_SOURCE_DIR}/version.txt" content) -string(REGEX MATCH "([0-9]+)\.([0-9]+)\.([0-9]+)" result "${content}") -if(NOT result) - message(FATAL_ERROR "Failed to read version info from ${version_file}") -endif() -set(PROJECT_VERSION ${CMAKE_MATCH_0}) +include(${CMAKE_SOURCE_DIR}/version.cmake) + +set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}") function(resolve_version_variables) # BUILD_NUMBER diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 932e07e..2449f2b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,18 +1,19 @@ -target_sources(firmware PRIVATE application.cpp debug.cpp main.cpp registers.cpp version.c) +target_sources(firmware PRIVATE application.cpp debug.cpp main.cpp registers.cpp version.hpp) target_link_libraries(firmware LUFA) -set_property( - SOURCE src/version.c - APPEND - PROPERTY COMPILE_DEFINITIONS - FW_BUILD_NUMBER=${BUILD_NUMBER} - FW_VERSION_FULL=${PROJECT_VERSION_FULL} - FW_VERSION=${PROJECT_VERSION} - FW_VERSION_SUFFIX=${PROJECT_VERSION_SUFFIX} - FW_VERSION_SUFFIX_SHORT=${PROJECT_VERSION_SUFFIX_SHORT} +target_compile_definitions( + firmware + PRIVATE + PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} + PROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} + PROJECT_VERSION_REV=${PROJECT_VERSION_REV} + PROJECT_BUILD_NUMBER=${BUILD_NUMBER} + FW_VERSION_FULL_STR="${PROJECT_VERSION_FULL}" + FW_VERSION_STR="${PROJECT_VERSION}" + FW_VERSION_SUFFIX_STR="${PROJECT_VERSION_SUFFIX}" + FW_VERSION_SUFFIX_SHORT_STR="${PROJECT_VERSION_SUFFIX_SHORT}" ) - add_subdirectory(hal) add_subdirectory(logic) add_subdirectory(modules) diff --git a/src/application.cpp b/src/application.cpp index b93a1fe..f85a022 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -20,7 +20,7 @@ #include "logic/tool_change.h" #include "logic/unload_filament.h" -#include "version.h" +#include "version.hpp" #include "panic.h" diff --git a/src/registers.cpp b/src/registers.cpp index 22fff3e..b5395e6 100644 --- a/src/registers.cpp +++ b/src/registers.cpp @@ -6,7 +6,7 @@ #include "registers.h" #include "application.h" -#include "version.h" +#include "version.hpp" #include "modules/finda.h" #include "modules/fsensor.h" diff --git a/src/version.c b/src/version.c deleted file mode 100644 index d73f7ce..0000000 --- a/src/version.c +++ /dev/null @@ -1,18 +0,0 @@ -/// @file version.c -#include "version.h" - -#define _STR(x) #x -#define STR(x) _STR(x) - -const char project_version[] = STR(FW_VERSION); - -const char project_version_full[] = STR(FW_VERSION_FULL); - -const char project_version_suffix[] = STR(FW_VERSION_SUFFIX); - -const char project_version_suffix_short[] = STR(FW_VERSION_SUFFIX_SHORT); - -const uint8_t project_major = project_version_major; -const uint8_t project_minor = project_version_minor; -const uint16_t project_revision = project_version_revision; -const uint16_t project_build_number = project_version_build; diff --git a/src/version.h b/src/version.h deleted file mode 100644 index 513e85d..0000000 --- a/src/version.h +++ /dev/null @@ -1,44 +0,0 @@ -/// @file version.h -#pragma once -#include - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -#define project_version_major 2 -#define project_version_minor 1 -#define project_version_revision 1 -#define project_version_build 634 -#define FW_BUILD_NUMBER 0 - -/// Project's version (2.0.0) -extern const char project_version[]; - -/// Full project's version (2.0.0-BETA+1035.PR111.B4) -extern const char project_version_full[]; - -/// Project's version suffix (-BETA+1035.PR111.B4) -extern const char project_version_suffix[]; - -/// Project's short version suffix (+1035) -extern const char project_version_suffix_short[]; - -/// Project's major version -extern const uint8_t project_major; - -/// Project's minor version -extern const uint8_t project_minor; - -/// Project's revision number -extern const uint16_t project_revision; - -/// Project's build number (number of commits in a branch) -extern const uint16_t project_build_number; - -/// Firmware name -extern const char project_firmware_name[]; - -#ifdef __cplusplus -} -#endif //__cplusplus diff --git a/src/version.hpp b/src/version.hpp new file mode 100644 index 0000000..83af403 --- /dev/null +++ b/src/version.hpp @@ -0,0 +1,32 @@ +/// @file version.h +#pragma once +#include + +/// Project's version (2.0.0) +static constexpr char project_version[] = FW_VERSION_STR; + +/// Full project's version (2.0.0-BETA+1035.PR111.B4) +static constexpr char project_version_full[] = FW_VERSION_FULL_STR; + +/// Project's version suffix (-BETA+1035.PR111.B4) +static constexpr char project_version_suffix[] = FW_VERSION_SUFFIX_STR; + +/// Project's short version suffix (+1035) +static constexpr char project_version_suffix_short[] = FW_VERSION_SUFFIX_SHORT_STR; + +/// Project's major version +static constexpr uint8_t project_major = PROJECT_VERSION_MAJOR; + +/// Project's minor version +static constexpr uint8_t project_minor = PROJECT_VERSION_MINOR; + +/// Project's revision number +static constexpr uint16_t project_revision = PROJECT_VERSION_REV; + +/// Project's build number (number of commits in a branch) +static constexpr uint16_t project_build_number = PROJECT_BUILD_NUMBER; + +static_assert(PROJECT_VERSION_MAJOR <= UINT8_MAX); +static_assert(PROJECT_VERSION_MINOR <= UINT8_MAX); +static_assert(PROJECT_VERSION_REV <= UINT8_MAX); +static_assert(PROJECT_BUILD_NUMBER <= UINT16_MAX); diff --git a/version.cmake b/version.cmake new file mode 100644 index 0000000..9ecbd78 --- /dev/null +++ b/version.cmake @@ -0,0 +1,15 @@ +# The project's version definition/source of truth. It could have been just pasted at the top of +# ProjectVersion.cmake but that makes it a bit harder to locate... + +set(PROJECT_VERSION_MAJOR + 2 + CACHE STRING "Project major version" FORCE + ) +set(PROJECT_VERSION_MINOR + 1 + CACHE STRING "Project minor version" FORCE + ) +set(PROJECT_VERSION_REV + 1 + CACHE STRING "Project revision" FORCE + ) diff --git a/version.txt b/version.txt deleted file mode 100644 index ed2af5c..0000000 --- a/version.txt +++ /dev/null @@ -1 +0,0 @@ -2.0.19