this compiles

This commit is contained in:
Robin Müller 2022-05-10 16:43:16 +02:00
parent aa4e2d7209
commit f57bd290d9
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
8 changed files with 105 additions and 38 deletions

View File

@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.13)
set(MSG_PREFIX "fsfw |") set(MSG_PREFIX "fsfw |")
# Add the cmake folder so the FindSphinx module is found # Add the cmake folder so the FindSphinx module is found
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-modules/bilke") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-modules/bilke")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-modules/rpavlik") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-modules/rpavlik")
@ -16,37 +16,42 @@ set(FSFW_SUBVERSION_IF_GIT_FAILS 0)
set(FSFW_REVISION_IF_GIT_FAILS 0) set(FSFW_REVISION_IF_GIT_FAILS 0)
set(FSFW_GIT_VER_HANDLING_OK FALSE) set(FSFW_GIT_VER_HANDLING_OK FALSE)
# Version handling # Check whether we got any revision (which isn't
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) # always the case, e.g. when someone downloaded a zip
message(STATUS "${MSG_PREFIX} Determining version information with git") # file from Github instead of a checkout)
include(FsfwHelpers) message(STATUS "${MSG_PREFIX} Determining version information with git")
determine_version_with_git("--exclude" "docker_*") include(FsfwHelpers)
if(GIT_INFO) determine_version_with_git("--exclude" "docker_*")
set(FSFW_GIT_INFO ${GIT_INFO} CACHE STRING "Version information retrieved with git describe" FORCE) if(GIT_INFO)
list(GET FSFW_GIT_INFO 1 FSFW_VERSION) set(FSFW_GIT_INFO ${GIT_INFO} CACHE STRING "Version information retrieved with git describe" FORCE)
list(GET FSFW_GIT_INFO 2 FSFW_SUBVERSION) list(GET FSFW_GIT_INFO 1 FSFW_VERSION_MAJOR)
list(GET FSFW_GIT_INFO 3 FSFW_REVISION) list(GET FSFW_GIT_INFO 2 FSFW_VERSION_MINOR)
list(GET FSFW_GIT_INFO 4 FSFW_VCS_INFO) list(GET FSFW_GIT_INFO 3 FSFW_VERSION_REVISION)
if(NOT FSFW_VERSION) list(GET FSFW_GIT_INFO 4 FSFW_VERSION_VCS_INFO)
set(FSFW_VERSION ${FSFW_VERSION_IF_GIT_FAILS}) if(NOT FSFW_VERSION)
endif() set(FSFW_VERSION ${FSFW_VERSION_IF_GIT_FAILS})
if(NOT FSFW_SUBVERSION) endif()
set(FSFW_SUBVERSION ${FSFW_SUBVERSION_IF_GIT_FAILS}) if(NOT FSFW_SUBVERSION)
endif() set(FSFW_SUBVERSION ${FSFW_SUBVERSION_IF_GIT_FAILS})
if(NOT FSFW_REVISION) endif()
set(FSFW_REVISION ${FSFW_REVISION_IF_GIT_FAILS}) if(NOT FSFW_REVISION)
endif() set(FSFW_REVISION ${FSFW_REVISION_IF_GIT_FAILS})
set(FSFW_GIT_VER_HANDLING_OK TRUE) endif()
else() set(FSFW_GIT_VER_HANDLING_OK TRUE)
set(FSFW_GIT_VER_HANDLING_OK FALSE) else()
endif() set(FSFW_GIT_VER_HANDLING_OK FALSE)
endif() endif()
if(NOT FSFW_GIT_VER_HANDLING_OK) if(NOT FSFW_GIT_VER_HANDLING_OK)
set(FSFW_VERSION ${FSFW_VERSION_IF_GIT_FAILS}) set(FSFW_VERSION ${FSFW_VERSION_IF_GIT_FAILS})
set(FSFW_SUBVERSION ${FSFW_SUBVERSION_IF_GIT_FAILS}) set(FSFW_SUBVERSION ${FSFW_SUBVERSION_IF_GIT_FAILS})
set(FSFW_REVISION ${FSFW_REVISION_IF_GIT_FAILS}) set(FSFW_REVISION ${FSFW_REVISION_IF_GIT_FAILS})
set(GIT_REV "N/A")
set(GIT_DIFF "")
set(GIT_BRANCH "N/A")
endif() endif()
set(LIB_FSFW_NAME fsfw) set(LIB_FSFW_NAME fsfw)
project(${LIB_FSFW_NAME} VERSION ${FSFW_VERSION}.${FSFW_SUBVERSION}.${FSFW_REVISION}) project(${LIB_FSFW_NAME} VERSION ${FSFW_VERSION}.${FSFW_SUBVERSION}.${FSFW_REVISION})
@ -245,7 +250,7 @@ else()
endif() endif()
configure_file(src/fsfw/FSFW.h.in fsfw/FSFW.h) configure_file(src/fsfw/FSFW.h.in fsfw/FSFW.h)
configure_file(src/fsfw/FSFWVersion.h.in fsfw/FSFWVersion.h) # configure_file(src/fsfw/FSFWVersion.h.in fsfw/FSFWVersion.h)
message(STATUS "${MSG_PREFIX} Compiling FSFW for the ${FSFW_OS_NAME} operating system") message(STATUS "${MSG_PREFIX} Compiling FSFW for the ${FSFW_OS_NAME} operating system")
@ -455,3 +460,18 @@ add_custom_command(
POST_BUILD POST_BUILD
COMMENT ${POST_BUILD_COMMENT} COMMENT ${POST_BUILD_COMMENT}
) )
# Add a custom command that produces version.cpp, plus
# a dummy output that's not actually produced, in order
# to force version.cmake to always be re-run before the build
add_custom_command(
TARGET ${LIB_FSFW_NAME}
COMMAND ${CMAKE_COMMAND} -DVERSION_DIR=${FSFW_SOURCES_DIR}
-DVERSION_MAJOR=${FSFW_VERSION_MAJOR}
-DVERSION_MINOR=${FSFW_VERSION_MINOR}
-DVERSION_REVISION=${FSFW_VERSION_REVISION}
-DVERSION_VCS_INFO=${FSFW_VERSION_VCS_INFO}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.cmake
BYPRODUCTS ${FSFW_SOURCES_DIR}/versionAutogen.cpp
COMMENT ""
)

View File

View File

@ -8,6 +8,7 @@
function(determine_version_with_git) function(determine_version_with_git)
include(GetGitRevisionDescription) include(GetGitRevisionDescription)
git_describe(VERSION ${ARGN}) git_describe(VERSION ${ARGN})
get_git_head_revision(GIT_BRANCH HASH_VAR)
string(FIND ${VERSION} "." VALID_VERSION) string(FIND ${VERSION} "." VALID_VERSION)
if(VALID_VERSION EQUAL -1) if(VALID_VERSION EQUAL -1)
message(WARNING "Version string ${VERSION} retrieved with git describe is invalid") message(WARNING "Version string ${VERSION} retrieved with git describe is invalid")
@ -18,11 +19,14 @@ function(determine_version_with_git)
string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" _VERSION_MINOR "${VERSION}") string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" _VERSION_MINOR "${VERSION}")
string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" _VERSION_PATCH "${VERSION}") string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" _VERSION_PATCH "${VERSION}")
string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-(.*)" "\\1" VERSION_SHA1 "${VERSION}") string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-(.*)" "\\1" VERSION_SHA1 "${VERSION}")
string(STRIP "${GIT_BRANCH}" GIT_BRANCH)
set(GIT_INFO ${VERSION}) set(GIT_INFO ${VERSION})
list(APPEND GIT_INFO ${_VERSION_MAJOR}) list(APPEND GIT_INFO ${_VERSION_MAJOR})
list(APPEND GIT_INFO ${_VERSION_MINOR}) list(APPEND GIT_INFO ${_VERSION_MINOR})
list(APPEND GIT_INFO ${_VERSION_PATCH}) list(APPEND GIT_INFO ${_VERSION_PATCH})
list(APPEND GIT_INFO ${VERSION_SHA1}) list(APPEND GIT_INFO ${VERSION_SHA1})
set(GIT_INFO ${GIT_INFO} PARENT_SCOPE) set(GIT_INFO ${GIT_INFO} PARENT_SCOPE)
set(GIT_BRANCH ${GIT_BRANCH} PARENT_SCOPE)
message(STATUS "${MSG_PREFIX} git branch ${GIT_BRANCH}")
message(STATUS "${MSG_PREFIX} Set git version info into GIT_INFO from the git tag ${VERSION}") message(STATUS "${MSG_PREFIX} Set git version info into GIT_INFO from the git tag ${VERSION}")
endfunction() endfunction()

38
cmake/version.cmake Normal file
View File

@ -0,0 +1,38 @@
if(NOT DEFINED VERSION_MAJOR)
message(WARNING "version.cmake | No VERSION_MAJOR variable passed. Setting to 0")
set(VERSION_MAJOR 0)
endif()
if(NOT DEFINED VERSION_MINOR)
message(WARNING "version.cmake | No VERSION_MINOR variable passed. Setting to 0")
set(VERSION_MINOR 0)
endif()
if(NOT DEFINED VERSION_REVISION)
message(WARNING "version.cmake | No VERSION_REVISION variable passed. Setting to 0")
set(VERSION_REVISION 0)
endif()
if(NOT DEFINED VERSION_VCS_INFO)
set(VERSION_VCS_INFO "")
endif()
set(VERSION_TO_SET "#include \"version.h\"
namespace fsfw {
const int FSFW_VERSION_MAJOR = ${VERSION_MAJOR};
const int FSFW_VERSION_MINOR = ${VERSION_MINOR};
const int FSFW_VERSION_REVISION = ${VERSION_MINOR};
const char FSFW_VCS_INFO[] = \"${VERSION_VCS_INFO}\";
};
")
if(EXISTS ${VERSION_DIR}/versionAutogen.cpp)
file(READ ${VERSION_DIR}/versionAutogen.cpp OLD_VERSION)
else()
set(OLD_VERSION "")
endif()
if (NOT "${VERSION_TO_SET}" STREQUAL "${OLD_VERSION}")
message(STATUS "Updating versionAutogen.cpp file")
file(WRITE ${VERSION_DIR}/versionAutogen.cpp "${VERSION_TO_SET}")
endif()

View File

@ -1,5 +1,6 @@
target_sources(${LIB_FSFW_NAME} PRIVATE target_sources(${LIB_FSFW_NAME} PRIVATE
version.cpp version.cpp
versionAutogen.cpp
) )
# Core # Core

View File

@ -1,11 +0,0 @@
#ifndef FSFW_VERSION_H_
#define FSFW_VERSION_H_
// Versioning is managed in project CMakeLists.txt file
static constexpr int FSFW_VERSION_MAJOR = @FSFW_VERSION@;
static constexpr int FSFW_VERSION_MINOR = @FSFW_SUBVERSION@;
static constexpr int FSFW_VERSION_REVISION = @FSFW_REVISION@;
// Also contains CST (Commits since tag) information
static const char FSFW_VCS_INFO[] = "@FSFW_VCS_INFO@";
#endif /* FSFW_VERSION_H_ */

View File

@ -57,7 +57,12 @@ class Version {
void getVersion(char* str, size_t maxLen) const; void getVersion(char* str, size_t maxLen) const;
}; };
extern const Version FSFW_VERSION; extern const int FSFW_VERSION_MAJOR;
extern const int FSFW_VERSION_MINOR;
extern const int FSFW_VERSION_REVISION;
extern const char FSFW_VCS_INFO[];
extern const fsfw::Version FSFW_VERSION;
} // namespace fsfw } // namespace fsfw

View File

@ -0,0 +1,10 @@
#include "version.h"
namespace fsfw {
const int FSFW_VERSION_MAJOR = 4;
const int FSFW_VERSION_MINOR = 0;
const int FSFW_VERSION_REVISION = 0;
const char FSFW_VCS_INFO[] = "285-gaa4e2d72";
};