diff options
author | dundargoc <gocdundar@gmail.com> | 2023-12-14 17:52:00 +0100 |
---|---|---|
committer | dundargoc <33953936+dundargoc@users.noreply.github.com> | 2023-12-15 00:19:38 +0100 |
commit | f31f260f0c6449dba4c84071be6bfe91d3cb4993 (patch) | |
tree | c2317b79ff1c922529ae877be3a4c698154f613c | |
parent | 165e5ececc25ce2d705efdd8ee6c8406884bf898 (diff) | |
download | rneovim-f31f260f0c6449dba4c84071be6bfe91d3cb4993.tar.gz rneovim-f31f260f0c6449dba4c84071be6bfe91d3cb4993.tar.bz2 rneovim-f31f260f0c6449dba4c84071be6bfe91d3cb4993.zip |
build: rework --version generation
Having a dynamically generated string is more maintainable than having
multiple files.
Also add linker flags and any potential LTO flags to the --version
output.
-rw-r--r-- | cmake.config/CMakeLists.txt | 46 | ||||
-rw-r--r-- | cmake.config/versiondef.h.in | 2 | ||||
-rw-r--r-- | cmake.config/versiondef_old.h.in | 21 |
3 files changed, 37 insertions, 32 deletions
diff --git a/cmake.config/CMakeLists.txt b/cmake.config/CMakeLists.txt index ed405c602e..70979dd208 100644 --- a/cmake.config/CMakeLists.txt +++ b/cmake.config/CMakeLists.txt @@ -139,17 +139,43 @@ configure_file ( "${PROJECT_BINARY_DIR}/cmake.config/auto/config.h" ) -# Prevent double space in --version output if CMAKE_C_FLAGS is empty -set(C_FLAGS_VERSION_OUTPUT ${CMAKE_C_FLAGS}) -if(C_FLAGS_VERSION_OUTPUT) - string(PREPEND C_FLAGS_VERSION_OUTPUT " ") -endif() +set(VERSION_STRING "${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS} ") -if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15) - configure_file(versiondef.h.in auto/versiondef.h.gen) -else() - configure_file(versiondef_old.h.in auto/versiondef.h.gen) -endif() +foreach(BUILD_TYPE Debug Release RelWithDebInfo MinSizeRel) + string(TOUPPER ${BUILD_TYPE} BUILD_TYPE_UPPER) + set(GEN_CONFIG "$<CONFIG:${BUILD_TYPE}>") + + set(GEN_RHS "${CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}} ") + string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>") + + set(GEN_RHS "$<$<BOOL:$<TARGET_PROPERTY:nvim,INTERPROCEDURAL_OPTIMIZATION_${BUILD_TYPE_UPPER}>>:${CMAKE_C_COMPILE_OPTIONS_IPO}>") + string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>") +endforeach() + +string(APPEND VERSION_STRING " ") + +function(append_target_expression) + cmake_parse_arguments(ARG + "" + "PREFIX;PROPERTY" + "" + ${ARGN}) + + set(TARGET_EXPRESSION "$<TARGET_PROPERTY:nvim,${ARG_PROPERTY}>") + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15) + set(TARGET_EXPRESSION "$<REMOVE_DUPLICATES:${TARGET_EXPRESSION}>") + endif() + set(TARGET_EXPRESSION "${ARG_PREFIX}$<JOIN:${TARGET_EXPRESSION}, ${ARG_PREFIX}>") + + set(VERSION_STRING "${VERSION_STRING} ${TARGET_EXPRESSION} " PARENT_SCOPE) +endfunction() +append_target_expression(PROPERTY COMPILE_OPTIONS) +append_target_expression(PROPERTY LINK_FLAGS) # TODO(dundargoc): Replace/complement with LINK_OPTIONS when minimum version is 3.13+ +append_target_expression(PREFIX "-D" PROPERTY COMPILE_DEFINITIONS) +append_target_expression(PREFIX "-I" PROPERTY INCLUDE_DIRECTORIES) +string(REPLACE " " " " VERSION_STRING "${VERSION_STRING}") # Remove duplicate whitespace + +configure_file(versiondef.h.in auto/versiondef.h.gen) file(GENERATE OUTPUT "${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef-$<CONFIG>.h" diff --git a/cmake.config/versiondef.h.in b/cmake.config/versiondef.h.in index bda21b27ec..d03e56130c 100644 --- a/cmake.config/versiondef.h.in +++ b/cmake.config/versiondef.h.in @@ -15,7 +15,7 @@ #define NVIM_API_LEVEL_COMPAT @NVIM_API_LEVEL_COMPAT@ #define NVIM_API_PRERELEASE @NVIM_API_PRERELEASE@ -#define NVIM_VERSION_CFLAGS "${CMAKE_C_COMPILER}${C_FLAGS_VERSION_OUTPUT} $<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL}> $<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_OPTIONS>, > -D$<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_DEFINITIONS>, -D> -I$<JOIN:$<REMOVE_DUPLICATES:$<TARGET_PROPERTY:nvim,INCLUDE_DIRECTORIES>>, -I>" +#define NVIM_VERSION_CFLAGS "${VERSION_STRING}" #define NVIM_VERSION_BUILD_TYPE "$<CONFIG>" #endif // AUTO_VERSIONDEF_H diff --git a/cmake.config/versiondef_old.h.in b/cmake.config/versiondef_old.h.in deleted file mode 100644 index 4e21e0c7be..0000000000 --- a/cmake.config/versiondef_old.h.in +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef AUTO_VERSIONDEF_H -#define AUTO_VERSIONDEF_H - -#define NVIM_VERSION_MAJOR @NVIM_VERSION_MAJOR@ -#define NVIM_VERSION_MINOR @NVIM_VERSION_MINOR@ -#define NVIM_VERSION_PATCH @NVIM_VERSION_PATCH@ -#define NVIM_VERSION_PRERELEASE "@NVIM_VERSION_PRERELEASE@" - -#cmakedefine NVIM_VERSION_MEDIUM "@NVIM_VERSION_MEDIUM@" -#ifndef NVIM_VERSION_MEDIUM -# include "auto/versiondef_git.h" -#endif - -#define NVIM_API_LEVEL @NVIM_API_LEVEL@ -#define NVIM_API_LEVEL_COMPAT @NVIM_API_LEVEL_COMPAT@ -#define NVIM_API_PRERELEASE @NVIM_API_PRERELEASE@ - -#define NVIM_VERSION_CFLAGS "${CMAKE_C_COMPILER}${C_FLAGS_VERSION_OUTPUT} $<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL}> $<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_OPTIONS>, > -D$<JOIN:$<TARGET_PROPERTY:nvim,COMPILE_DEFINITIONS>, -D> -I$<JOIN:$<TARGET_PROPERTY:nvim,INCLUDE_DIRECTORIES>, -I>" -#define NVIM_VERSION_BUILD_TYPE "$<CONFIG>" - -#endif // AUTO_VERSIONDEF_H |