|
|
@@ -23,6 +23,137 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
# Include dependencies
|
|
|
include(FindDependencies)
|
|
|
|
|
|
+# Version detection from git
|
|
|
+find_package(Git QUIET)
|
|
|
+if(GIT_FOUND)
|
|
|
+ # Get current git commit hash (short)
|
|
|
+ execute_process(
|
|
|
+ COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD
|
|
|
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
+ OUTPUT_VARIABLE GIT_COMMIT_HASH
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_QUIET
|
|
|
+ )
|
|
|
+
|
|
|
+ # Get full git commit hash
|
|
|
+ execute_process(
|
|
|
+ COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
|
|
|
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
+ OUTPUT_VARIABLE GIT_COMMIT_HASH_FULL
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_QUIET
|
|
|
+ )
|
|
|
+
|
|
|
+ # Get current git tag (prefer annotated tags)
|
|
|
+ execute_process(
|
|
|
+ COMMAND ${GIT_EXECUTABLE} describe --tags --exact-match --abbrev=0
|
|
|
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
+ OUTPUT_VARIABLE GIT_TAG
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_QUIET
|
|
|
+ )
|
|
|
+
|
|
|
+ # Get git describe for fallback (e.g., v1.0.0-5-g12345678)
|
|
|
+ execute_process(
|
|
|
+ COMMAND ${GIT_EXECUTABLE} describe --tags --always --abbrev=8
|
|
|
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
+ OUTPUT_VARIABLE GIT_DESCRIBE
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_QUIET
|
|
|
+ )
|
|
|
+
|
|
|
+ # Get git branch
|
|
|
+ execute_process(
|
|
|
+ COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
|
|
|
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
+ OUTPUT_VARIABLE GIT_BRANCH
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_QUIET
|
|
|
+ )
|
|
|
+
|
|
|
+ # Check if working directory is clean
|
|
|
+ execute_process(
|
|
|
+ COMMAND ${GIT_EXECUTABLE} status --porcelain
|
|
|
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
+ OUTPUT_VARIABLE GIT_STATUS
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_QUIET
|
|
|
+ )
|
|
|
+
|
|
|
+ if(NOT GIT_COMMIT_HASH)
|
|
|
+ set(GIT_COMMIT_HASH "unknown")
|
|
|
+ endif()
|
|
|
+ if(NOT GIT_COMMIT_HASH_FULL)
|
|
|
+ set(GIT_COMMIT_HASH_FULL "unknown")
|
|
|
+ endif()
|
|
|
+ if(NOT GIT_DESCRIBE)
|
|
|
+ set(GIT_DESCRIBE "unknown")
|
|
|
+ endif()
|
|
|
+ if(NOT GIT_BRANCH)
|
|
|
+ set(GIT_BRANCH "unknown")
|
|
|
+ endif()
|
|
|
+
|
|
|
+ # Determine if working directory is clean
|
|
|
+ if(GIT_STATUS STREQUAL "")
|
|
|
+ set(GIT_CLEAN "true")
|
|
|
+ else()
|
|
|
+ set(GIT_CLEAN "false")
|
|
|
+ endif()
|
|
|
+else()
|
|
|
+ set(GIT_COMMIT_HASH "unknown")
|
|
|
+ set(GIT_COMMIT_HASH_FULL "unknown")
|
|
|
+ set(GIT_TAG "")
|
|
|
+ set(GIT_DESCRIBE "unknown")
|
|
|
+ set(GIT_BRANCH "unknown")
|
|
|
+ set(GIT_CLEAN "false")
|
|
|
+endif()
|
|
|
+
|
|
|
+# Determine version string
|
|
|
+if(GIT_TAG)
|
|
|
+ # Release build with tag
|
|
|
+ set(PROJECT_VERSION_FULL "${GIT_TAG}")
|
|
|
+ set(PROJECT_VERSION_TYPE "release")
|
|
|
+elseif(GIT_DESCRIBE AND NOT GIT_DESCRIBE STREQUAL "unknown")
|
|
|
+ # Development build with git describe
|
|
|
+ set(PROJECT_VERSION_FULL "${GIT_DESCRIBE}")
|
|
|
+ set(PROJECT_VERSION_TYPE "development")
|
|
|
+else()
|
|
|
+ # Fallback to commit hash
|
|
|
+ set(PROJECT_VERSION_FULL "g${GIT_COMMIT_HASH}")
|
|
|
+ set(PROJECT_VERSION_TYPE "development")
|
|
|
+endif()
|
|
|
+
|
|
|
+# Add dirty suffix if working directory is not clean
|
|
|
+if(GIT_CLEAN STREQUAL "false")
|
|
|
+ set(PROJECT_VERSION_FULL "${PROJECT_VERSION_FULL}-dirty")
|
|
|
+endif()
|
|
|
+
|
|
|
+# Build timestamp
|
|
|
+string(TIMESTAMP BUILD_TIMESTAMP "%Y-%m-%dT%H:%M:%SZ" UTC)
|
|
|
+
|
|
|
+# Set project variables
|
|
|
+set(PROJECT_VERSION_COMMIT "${GIT_COMMIT_HASH}")
|
|
|
+set(PROJECT_VERSION_COMMIT_FULL "${GIT_COMMIT_HASH_FULL}")
|
|
|
+set(PROJECT_VERSION_BRANCH "${GIT_BRANCH}")
|
|
|
+set(PROJECT_VERSION_CLEAN "${GIT_CLEAN}")
|
|
|
+set(PROJECT_VERSION_BUILD_TIME "${BUILD_TIMESTAMP}")
|
|
|
+
|
|
|
+# Display version information
|
|
|
+message(STATUS "Version Information:")
|
|
|
+message(STATUS " Version: ${PROJECT_VERSION_FULL}")
|
|
|
+message(STATUS " Type: ${PROJECT_VERSION_TYPE}")
|
|
|
+message(STATUS " Commit: ${GIT_COMMIT_HASH}")
|
|
|
+message(STATUS " Branch: ${GIT_BRANCH}")
|
|
|
+message(STATUS " Clean: ${GIT_CLEAN}")
|
|
|
+message(STATUS " Build Time: ${BUILD_TIMESTAMP}")
|
|
|
+
|
|
|
+# Generate version header file
|
|
|
+configure_file(
|
|
|
+ "${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in"
|
|
|
+ "${CMAKE_CURRENT_BINARY_DIR}/include/version.h"
|
|
|
+ @ONLY
|
|
|
+)
|
|
|
+
|
|
|
# Option for CUDA support
|
|
|
option(SD_CUDA_SUPPORT "Enable CUDA support in stable-diffusion.cpp" ON)
|
|
|
|
|
|
@@ -85,23 +216,7 @@ if(BUILD_WEBUI)
|
|
|
set(WEBUI_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/webui)
|
|
|
set(WEBUI_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/webui)
|
|
|
|
|
|
- # Get git commit hash for versioning
|
|
|
- find_package(Git QUIET)
|
|
|
- if(GIT_FOUND)
|
|
|
- execute_process(
|
|
|
- COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD
|
|
|
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
- OUTPUT_VARIABLE GIT_COMMIT_HASH
|
|
|
- OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
- ERROR_QUIET
|
|
|
- )
|
|
|
- if(NOT GIT_COMMIT_HASH)
|
|
|
- set(GIT_COMMIT_HASH "unknown")
|
|
|
- endif()
|
|
|
- else()
|
|
|
- set(GIT_COMMIT_HASH "unknown")
|
|
|
- endif()
|
|
|
- message(STATUS "Git commit hash for UI versioning: ${GIT_COMMIT_HASH}")
|
|
|
+ message(STATUS "Git commit hash for UI versioning: ${PROJECT_VERSION_FULL}")
|
|
|
|
|
|
# Get build timestamp
|
|
|
string(TIMESTAMP BUILD_TIMESTAMP "%Y-%m-%dT%H:%M:%SZ" UTC)
|
|
|
@@ -113,12 +228,12 @@ if(BUILD_WEBUI)
|
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${WEBUI_OUTPUT_DIR}
|
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${WEBUI_OUTPUT_DIR}
|
|
|
# Generate version file
|
|
|
- COMMAND ${CMAKE_COMMAND} -E echo "{\"version\":\"${GIT_COMMIT_HASH}\",\"buildTime\":\"${BUILD_TIMESTAMP}\"}" > ${WEBUI_SOURCE_DIR}/public/version.json
|
|
|
+ COMMAND ${CMAKE_COMMAND} -E echo "{\"version\":\"${PROJECT_VERSION_FULL}\",\"commit\":\"${PROJECT_VERSION_COMMIT}\",\"branch\":\"${PROJECT_VERSION_BRANCH}\",\"buildTime\":\"${BUILD_TIMESTAMP}\",\"type\":\"${PROJECT_VERSION_TYPE}\",\"clean\":${PROJECT_VERSION_CLEAN}}" > ${WEBUI_SOURCE_DIR}/public/version.json
|
|
|
COMMAND ${NPM_EXECUTABLE} install
|
|
|
COMMAND ${NPM_EXECUTABLE} run build
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${WEBUI_SOURCE_DIR}/out ${WEBUI_OUTPUT_DIR}
|
|
|
WORKING_DIRECTORY ${WEBUI_SOURCE_DIR}
|
|
|
- COMMENT "Building Web UI with npm (version: ${GIT_COMMIT_HASH})"
|
|
|
+ COMMENT "Building Web UI with npm (version: ${PROJECT_VERSION_FULL})"
|
|
|
VERBATIM
|
|
|
)
|
|
|
|