From b8a561872b62945df49ca2d97df8102d1d6a52c8 Mon Sep 17 00:00:00 2001 From: kj16609 Date: Sun, 13 Jul 2025 21:20:35 -0400 Subject: [PATCH] Fixes cmake functions for handling UI files, Also adds GitInfo to the executable through defines --- modules/common.cmake | 1 + modules/git/commit.cmake | 87 ++++++++++++++++++++++++++++++++++++++++ modules/helpers.cmake | 11 ++++- 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 modules/git/commit.cmake diff --git a/modules/common.cmake b/modules/common.cmake index 4265778..5610261 100644 --- a/modules/common.cmake +++ b/modules/common.cmake @@ -1,6 +1,7 @@ include(helpers) +include(git/commit) if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") OR (${CMAKE_CXX_PLATFORM_ID} STREQUAL "MinGW")) include(compiler/gcc) diff --git a/modules/git/commit.cmake b/modules/git/commit.cmake new file mode 100644 index 0000000..9702b65 --- /dev/null +++ b/modules/git/commit.cmake @@ -0,0 +1,87 @@ +function(getCommitHash OUTPUT_VARIABLE) + find_package(Git QUIET) + if (GIT_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_HASH + ERROR_VARIABLE GIT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + if (NOT GIT_ERROR) + set(${OUTPUT_VARIABLE} ${GIT_HASH} PARENT_SCOPE) + else () + set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE) + endif () + else () + set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE) + endif () +endfunction() + +function(getBranchName OUTPUT_VARIABLE) + find_package(Git QUIET) + if (GIT_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_BRANCH + ERROR_VARIABLE GIT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + if (NOT GIT_ERROR) + set(${OUTPUT_VARIABLE} ${GIT_BRANCH} PARENT_SCOPE) + else () + set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE) + endif () + else () + set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE) + endif () +endfunction() + +function(addGitCommitDefine TARGET) + getCommitHash(GIT_HASH) + target_compile_definitions(${TARGET} PRIVATE FGL_GIT_COMMIT="${GIT_HASH}") +endfunction() + +function(addGitBranchDefine TARGET) + getBranchName(GIT_BRANCH) + target_compile_definitions(${TARGET} PRIVATE FGL_GIT_BRANCH="${GIT_BRANCH}") +endfunction() + +function(getIsDirty OUTPUT_VARIABLE) + find_package(Git QUIET) + if (GIT_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} status --porcelain + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_STATUS + ERROR_VARIABLE GIT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + if (NOT GIT_ERROR) + if (GIT_STATUS) + set(${OUTPUT_VARIABLE} "1" PARENT_SCOPE) + else () + set(${OUTPUT_VARIABLE} "0" PARENT_SCOPE) + endif () + else () + set(${OUTPUT_VARIABLE} "-1" PARENT_SCOPE) + endif () + else () + set(${OUTPUT_VARIABLE} "-1" PARENT_SCOPE) + endif () +endfunction() + +function(addGitDirtyDefine TARGET) + getIsDirty(GIT_DIRTY) + target_compile_definitions(${TARGET} PRIVATE FGL_GIT_DIRTY=${GIT_DIRTY}) +endfunction() + +function(AddGitInfo TARGET) + addGitCommitDefine(${TARGET}) + addGitBranchDefine(${TARGET}) + addGitDirtyDefine(${TARGET}) +endfunction() diff --git a/modules/helpers.cmake b/modules/helpers.cmake index 349c162..bd6b105 100644 --- a/modules/helpers.cmake +++ b/modules/helpers.cmake @@ -24,10 +24,13 @@ function(AddFGLExecutable NAME SRC_SOURCES_LOCATION) ${SRC_SOURCES_LOCATION}/**.hpp ) + file(GLOB_RECURSE UI_SOURCES CONFIGURE_DEPENDS + ${SRC_SOURCES_LOCATION}/**.ui) + message("Compiling ${NAME} WITH ${M_SOURCES} as modules") add_executable(${NAME}) - target_sources(${NAME} PUBLIC ${SOURCES}) + target_sources(${NAME} PUBLIC ${SOURCES} ${UI_SOURCES}) target_sources(${NAME} PUBLIC FILE_SET modules TYPE CXX_MODULES FILES ${M_SOURCES}) target_include_directories(${NAME} PRIVATE ${SRC_SOURCES_LOCATION}) @@ -35,6 +38,8 @@ function(AddFGLExecutable NAME SRC_SOURCES_LOCATION) set_target_properties(${NAME} PROPERTIES CXX_STANDARD 23) set_target_properties(${NAME} PROPERTIES CXX_STANDARD_REQUIRED ON) SetFGLFlags(${NAME}) + AddGitInfo(${NAME}) + target_compile_definitions(${NAME} PRIVATE FGL_BUILD_TYPE="${CMAKE_BUILD_TYPE}") endfunction() function(AddFGLLibrary NAME MODE SRC_SOURCES_LOCATION INCLUDE_SOURCES_LOCATION) @@ -48,6 +53,8 @@ function(AddFGLLibrary NAME MODE SRC_SOURCES_LOCATION INCLUDE_SOURCES_LOCATION) set_target_properties(${NAME} PROPERTIES CXX_STANDARD 23) set_target_properties(${NAME} PROPERTIES CXX_STANDARD_REQUIRED ON) SetFGLFlags(${NAME}) + AddGitInfo(${NAME}) + target_compile_definitions(${NAME} PRIVATE FGL_BUILD_TYPE="${CMAKE_BUILD_TYPE}") endfunction() function(AddFGLModule NAME SRC_SOURCES_LOCATION) @@ -56,6 +63,8 @@ function(AddFGLModule NAME SRC_SOURCES_LOCATION) add_library(${NAME} MODULE ${CPP_SOURCES} ${HPP_SOURCES}) target_include_directories(${NAME} PRIVATE ${SRC_SOURCES_LOCATION}) SetFGLFlags(${NAME}) + AddGitInfo(${NAME}) + target_compile_definitions(${NAME} PRIVATE FGL_BUILD_TYPE="${CMAKE_BUILD_TYPE}") endfunction() function(AddFGLChildLibrary NAME MODE SRC_SOURCES_LOCATION INCLUDE_SOURCES_LOCATION)