Change to git tag-based version
parent
57bc5a802b
commit
4f253b1bfc
|
|
@ -0,0 +1,3 @@
|
|||
[submodule "3rdparty/gitversion"]
|
||||
path = 3rdparty/gitversion
|
||||
url = https://github.com/vintagepc/gitversion.git
|
||||
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 5d7a224de4ac7f35f5761c296df70fddd067745f
|
||||
|
|
@ -1,12 +1,14 @@
|
|||
cmake_minimum_required(VERSION 3.15)
|
||||
include(cmake/Utilities.cmake)
|
||||
include(cmake/GetGitRevisionDescription.cmake)
|
||||
include(cmake/ProjectVersion.cmake)
|
||||
|
||||
INCLUDE(3rdparty/gitversion/cmake.cmake)
|
||||
|
||||
GET_GIT_SEMVER(PROJECT_GIT_VER)
|
||||
#message(STATUS "Semver is: ${PROJECT_GIT_VER}")
|
||||
project(
|
||||
MMU
|
||||
LANGUAGES C CXX ASM
|
||||
VERSION ${PROJECT_VERSION}
|
||||
VERSION "${PROJECT_GIT_VER}"
|
||||
)
|
||||
|
||||
if(NOT CMAKE_CROSSCOMPILING)
|
||||
|
|
@ -32,22 +34,6 @@ set(PRINTER
|
|||
STRING
|
||||
"Select the MMU unit for which you want to compile the project (valid values are ${PRINTER_VALID_OPTS})."
|
||||
)
|
||||
set(PROJECT_VERSION_SUFFIX
|
||||
"<auto>"
|
||||
CACHE
|
||||
STRING
|
||||
"Full version suffix to be shown on the info screen in settings (e.g. full_version=4.0.3-BETA+1035.PR111.B4, suffix=-BETA+1035.PR111.B4). Defaults to '+<commit sha>.<dirty?>.<debug?>' if set to '<auto>'."
|
||||
)
|
||||
set(PROJECT_VERSION_SUFFIX_SHORT
|
||||
"<auto>"
|
||||
CACHE
|
||||
STRING
|
||||
"Short version suffix to be shown on splash screen. Defaults to '+<BUILD_NUMBER>' if set to '<auto>'."
|
||||
)
|
||||
set(BUILD_NUMBER
|
||||
""
|
||||
CACHE STRING "Build number of the firmware. Resolved automatically if not specified."
|
||||
)
|
||||
set(CUSTOM_COMPILE_OPTIONS
|
||||
""
|
||||
CACHE STRING "Allows adding custom C/C++ flags"
|
||||
|
|
@ -60,8 +46,6 @@ foreach(OPTION "PRINTER")
|
|||
endif()
|
||||
endforeach()
|
||||
|
||||
# Resolve BUILD_NUMBER and PROJECT_VERSION_* variables
|
||||
resolve_version_variables()
|
||||
|
||||
# Check GCC Version
|
||||
get_recommended_gcc_version(RECOMMENDED_TOOLCHAIN_VERSION)
|
||||
|
|
@ -81,10 +65,6 @@ endif()
|
|||
|
||||
# Inform user about the resolved settings
|
||||
message(STATUS "Project version: ${PROJECT_VERSION}")
|
||||
message(STATUS "Project version with full suffix: ${PROJECT_VERSION_FULL}")
|
||||
message(
|
||||
STATUS "Project version with short suffix: ${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX_SHORT}"
|
||||
)
|
||||
message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.")
|
||||
message(STATUS "Printer: ${PRINTER}")
|
||||
|
||||
|
|
@ -163,6 +143,8 @@ endif()
|
|||
|
||||
add_executable(firmware)
|
||||
|
||||
TARGET_GIT_VERSION_INIT(firmware)
|
||||
|
||||
set_target_properties(firmware PROPERTIES CXX_STANDARD 14)
|
||||
|
||||
# generate firmware.bin file
|
||||
|
|
@ -184,17 +166,6 @@ target_compile_options(firmware PRIVATE -Wdouble-promotion)
|
|||
|
||||
target_sources(firmware PRIVATE src/main.cpp)
|
||||
|
||||
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}
|
||||
)
|
||||
|
||||
if(NOT CMAKE_CROSSCOMPILING)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
|
|
|
|||
|
|
@ -1,232 +0,0 @@
|
|||
# * Returns a version string from Git
|
||||
#
|
||||
# These functions force a re-configure on each git commit so that you can trust the values of the
|
||||
# variables in your build system.
|
||||
#
|
||||
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
|
||||
#
|
||||
# Returns the refspec and sha hash of the current head revision
|
||||
#
|
||||
# git_describe(<var> [<additional arguments to git describe> ...])
|
||||
#
|
||||
# Returns the results of git describe on the source tree, and adjusting the output so that it tests
|
||||
# false if an error occurs.
|
||||
#
|
||||
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
|
||||
#
|
||||
# Returns the results of git describe --exact-match on the source tree, and adjusting the output so
|
||||
# that it tests false if there was no exact matching tag.
|
||||
#
|
||||
# git_local_changes(<var>)
|
||||
#
|
||||
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes. Uses the return code of
|
||||
# "git diff-index --quiet HEAD --". Does not regard untracked files.
|
||||
#
|
||||
# git_count_parent_commits(<var>)
|
||||
#
|
||||
# Returns number of commits preceeding current commit -1 if git rev-list --count HEAD failed or
|
||||
# "GIT-NOTFOUND" if git executable was not found or "HEAD-HASH-NOTFOUND" if head hash was not found.
|
||||
# I don't know if get_git_head_revision() must be called internally or not, as reason of calling it
|
||||
# is not clear for me also in git_local_changes().
|
||||
#
|
||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||
#
|
||||
# Original Author: 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||
# http://academic.cleardefinition.com Iowa State University HCI Graduate Program/VRAC
|
||||
#
|
||||
# Copyright Iowa State University 2009-2010. Distributed under the Boost Software License, Version
|
||||
# 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
if(__get_git_revision_description)
|
||||
return()
|
||||
endif()
|
||||
set(__get_git_revision_description YES)
|
||||
|
||||
# We must run the following at "include" time, not at function call time, to find the path to this
|
||||
# module rather than the path to a calling list file
|
||||
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
|
||||
|
||||
function(get_git_head_revision _refspecvar _hashvar)
|
||||
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
|
||||
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
|
||||
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
|
||||
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
|
||||
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
|
||||
# We have reached the root directory, we are not in git
|
||||
set(${_refspecvar}
|
||||
"GITDIR-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
set(${_hashvar}
|
||||
"GITDIR-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
|
||||
endwhile()
|
||||
# check if this is a submodule
|
||||
if(NOT IS_DIRECTORY ${GIT_DIR})
|
||||
file(READ ${GIT_DIR} submodule)
|
||||
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
|
||||
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
||||
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
|
||||
endif()
|
||||
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
|
||||
if(NOT EXISTS "${GIT_DATA}")
|
||||
file(MAKE_DIRECTORY "${GIT_DATA}")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${GIT_DIR}/HEAD")
|
||||
return()
|
||||
endif()
|
||||
set(HEAD_FILE "${GIT_DATA}/HEAD")
|
||||
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
|
||||
|
||||
configure_file(
|
||||
"${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" "${GIT_DATA}/grabRef.cmake" @ONLY
|
||||
)
|
||||
include("${GIT_DATA}/grabRef.cmake")
|
||||
|
||||
set(${_refspecvar}
|
||||
"${HEAD_REF}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
set(${_hashvar}
|
||||
"${HEAD_HASH}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(git_describe _var)
|
||||
if(NOT GIT_FOUND)
|
||||
find_package(Git QUIET)
|
||||
endif()
|
||||
get_git_head_revision(refspec hash)
|
||||
if(NOT GIT_FOUND)
|
||||
set(${_var}
|
||||
"GIT-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
if(NOT hash)
|
||||
set(${_var}
|
||||
"HEAD-HASH-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# TODO sanitize if((${ARGN}" MATCHES "&&") OR (ARGN MATCHES "||") OR (ARGN MATCHES "\\;"))
|
||||
# message("Please report the following error to the project!") message(FATAL_ERROR "Looks like
|
||||
# someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") endif()
|
||||
|
||||
# message(STATUS "Arguments to execute_process: ${ARGN}")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" describe ${hash} ${ARGN}
|
||||
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()
|
||||
|
||||
function(git_get_exact_tag _var)
|
||||
git_describe(out --exact-match ${ARGN})
|
||||
set(${_var}
|
||||
"${out}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(git_local_changes _var)
|
||||
if(NOT GIT_FOUND)
|
||||
find_package(Git QUIET)
|
||||
endif()
|
||||
get_git_head_revision(refspec hash)
|
||||
if(NOT GIT_FOUND)
|
||||
set(${_var}
|
||||
"GIT-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
if(NOT hash)
|
||||
set(${_var}
|
||||
"HEAD-HASH-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE res
|
||||
OUTPUT_VARIABLE out
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(res EQUAL 0)
|
||||
set(${_var}
|
||||
"CLEAN"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
else()
|
||||
set(${_var}
|
||||
"DIRTY"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(git_count_parent_commits _var)
|
||||
if(NOT GIT_FOUND)
|
||||
find_package(Git QUIET)
|
||||
endif()
|
||||
get_git_head_revision(refspec hash)
|
||||
if(NOT GIT_FOUND)
|
||||
set(${_var}
|
||||
"GIT-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
if(NOT hash)
|
||||
set(${_var}
|
||||
"HEAD-HASH-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(res EQUAL 0)
|
||||
set(${_var}
|
||||
"${out}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
else()
|
||||
set(${_var}
|
||||
"-1"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
#
|
||||
# Internal file for GetGitRevisionDescription.cmake
|
||||
#
|
||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||
#
|
||||
# Original Author: 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||
# http://academic.cleardefinition.com Iowa State University HCI Graduate Program/VRAC
|
||||
#
|
||||
# Copyright Iowa State University 2009-2010. Distributed under the Boost Software License, Version
|
||||
# 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
set(HEAD_HASH)
|
||||
|
||||
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
|
||||
|
||||
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
|
||||
if(HEAD_CONTENTS MATCHES "ref")
|
||||
# named branch
|
||||
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
||||
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
||||
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
||||
else()
|
||||
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
|
||||
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
|
||||
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
|
||||
set(HEAD_HASH "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
# detached HEAD
|
||||
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
||||
endif()
|
||||
|
||||
if(NOT HEAD_HASH)
|
||||
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
||||
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
||||
endif()
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
#
|
||||
# This file is responsible for setting the following variables:
|
||||
#
|
||||
# ~~~
|
||||
# BUILD_NUMBER (1035)
|
||||
# PROJECT_VERSION (4.0.3)
|
||||
# PROJECT_VERSION_FULL (4.0.3-BETA+1035.PR111.B4)
|
||||
# PROJECT_VERSION_SUFFIX (-BETA+1035.PR111.B4)
|
||||
# PROJECT_VERSION_SUFFIX_SHORT (+1035)
|
||||
#
|
||||
# The `PROJECT_VERSION` variable is set as soon as the file is included.
|
||||
# To set the rest, the function `resolve_version_variables` has to be called.
|
||||
#
|
||||
# ~~~
|
||||
|
||||
# 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})
|
||||
|
||||
function(resolve_version_variables)
|
||||
# BUILD_NUMBER
|
||||
if(NOT BUILD_NUMBER)
|
||||
git_count_parent_commits(BUILD_NUMBER)
|
||||
set(ERRORS "GIT-NOTFOUND" "HEAD-HASH-NOTFOUND")
|
||||
if(BUILD_NUMBER IN_LIST ERRORS)
|
||||
message(WARNING "Failed to resolve build number: ${BUILD_NUMBER}. Setting to zero.")
|
||||
set(BUILD_NUMBER "0")
|
||||
endif()
|
||||
set(BUILD_NUMBER
|
||||
${BUILD_NUMBER}
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
# PROJECT_VERSION_SUFFIX
|
||||
if(PROJECT_VERSION_SUFFIX STREQUAL "<auto>")
|
||||
# TODO: set to +<sha>.dirty?.debug?
|
||||
set(PROJECT_VERSION_SUFFIX "+${BUILD_NUMBER}.LOCAL")
|
||||
set(PROJECT_VERSION_SUFFIX
|
||||
"+${BUILD_NUMBER}.LOCAL"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
# PROJECT_VERSION_SUFFIX_SHORT
|
||||
if(PROJECT_VERSION_SUFFIX_SHORT STREQUAL "<auto>")
|
||||
set(PROJECT_VERSION_SUFFIX_SHORT
|
||||
"+${BUILD_NUMBER}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
# PROJECT_VERSION_FULL
|
||||
set(PROJECT_VERSION_FULL
|
||||
"${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#include "version.h"
|
||||
#include "config.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 int project_build_number = FW_BUILD_NUMBER;
|
||||
|
||||
#if (PRINTER_TYPE == PRINTER_PRUSA_MINI)
|
||||
const char project_firmware_name[] = "Buddy_MINI";
|
||||
#else
|
||||
#error "unknown printer type"
|
||||
#endif
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif //__cplusplus
|
||||
|
||||
/// Project's version (4.0.2)
|
||||
extern const char project_version[];
|
||||
|
||||
/// Full project's version (4.0.3-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 build number (number of commits in a branch)
|
||||
extern const int project_build_number;
|
||||
|
||||
/// Firmware name
|
||||
extern const char project_firmware_name[];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif //__cplusplus
|
||||
|
|
@ -1 +0,0 @@
|
|||
2.0.0
|
||||
Loading…
Reference in New Issue