mirror of
				https://github.com/deepseek-ai/3FS
				synced 2025-06-26 18:16:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			128 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| find_package(Git REQUIRED)
 | |
| 
 | |
| if (NOT DEFINED PRE_CONFIGURE_DIR)
 | |
|     set(PRE_CONFIGURE_DIR ${PROJECT_SOURCE_DIR}/src/common/utils)
 | |
| endif ()
 | |
| 
 | |
| if (NOT DEFINED POST_BUILD_DIR)
 | |
|     set(POST_BUILD_DIR ${PROJECT_BINARY_DIR})
 | |
| endif ()
 | |
| 
 | |
| set(PRE_CONFIGURE_FILE ${PRE_CONFIGURE_DIR}/VersionInfo.cc.in)
 | |
| set(POST_CONFIGURE_FILE ${POST_BUILD_DIR}/src/common/utils/VersionInfo.cc)
 | |
| 
 | |
| function(CheckGitWrite git_hash)
 | |
|     file(WRITE ${POST_BUILD_DIR}/git-state.txt ${git_hash})
 | |
| endfunction()
 | |
| 
 | |
| function(CheckGitRead git_hash)
 | |
|     if (EXISTS ${POST_BUILD_DIR}/git-state.txt)
 | |
|         file(STRINGS ${POST_BUILD_DIR}/git-state.txt CONTENT)
 | |
|         LIST(GET CONTENT 0 var)
 | |
|         set(${git_hash} ${var} PARENT_SCOPE)
 | |
|     endif ()
 | |
| endfunction()
 | |
| 
 | |
| function(CheckGitVersion)
 | |
|     # Get the latest abbreviated commit hash of the working branch
 | |
|     execute_process(
 | |
|             COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD
 | |
|             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
 | |
|             OUTPUT_VARIABLE BUILD_COMMIT_HASH_SHORT
 | |
|             OUTPUT_STRIP_TRAILING_WHITESPACE
 | |
|     )
 | |
|     execute_process(
 | |
|             COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
 | |
|             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
 | |
|             OUTPUT_VARIABLE BUILD_COMMIT_HASH_FULL
 | |
|             OUTPUT_STRIP_TRAILING_WHITESPACE
 | |
|     )
 | |
|     execute_process(
 | |
|             COMMAND ${GIT_EXECUTABLE} log -1 --format=%at --date=local
 | |
|             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
 | |
|             OUTPUT_VARIABLE BUILD_TIMESTAMP
 | |
|             OUTPUT_STRIP_TRAILING_WHITESPACE
 | |
|     )
 | |
|     execute_process(
 | |
|             COMMAND date -d @${BUILD_TIMESTAMP} +%Y%m%d
 | |
|             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
 | |
|             OUTPUT_VARIABLE BUILD_DATE
 | |
|             OUTPUT_STRIP_TRAILING_WHITESPACE
 | |
|     )
 | |
|     execute_process(
 | |
|             COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
 | |
|             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
 | |
|             OUTPUT_VARIABLE BUILD_TAG
 | |
|             OUTPUT_STRIP_TRAILING_WHITESPACE
 | |
|     )
 | |
|     execute_process(
 | |
|             COMMAND bash -c "${GIT_EXECUTABLE} describe --tags --long | sed -E 's/(.*)-([0-9]+)-(\\w+)/\\2/g'"
 | |
|             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
 | |
|             OUTPUT_VARIABLE BUILD_TAG_SEQ_NUM
 | |
|             OUTPUT_STRIP_TRAILING_WHITESPACE
 | |
|     )
 | |
|     if(NOT DEFINED BUILD_TAG OR BUILD_TAG STREQUAL "")
 | |
|         set(BUILD_TAG "250228")
 | |
|     endif()
 | |
|     if(NOT DEFINED BUILD_TAG_SEQ_NUM OR BUILD_TAG_SEQ_NUM STREQUAL "")
 | |
|         set(BUILD_TAG_SEQ_NUM "1")
 | |
|     endif()
 | |
|     message(STATUS "Git Commit hash: ${BUILD_COMMIT_HASH_SHORT} ${BUILD_COMMIT_HASH_FULL}")
 | |
|     message(STATUS "Git Commit Date & Timestamp: ${BUILD_DATE} ${BUILD_TIMESTAMP}")
 | |
|     message(STATUS "Git Commit Tag & Seq Num: ${BUILD_TAG} ${BUILD_TAG_SEQ_NUM}")
 | |
| 
 | |
|     set(BUILD_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
 | |
|     set(BUILD_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
 | |
|     set(BUILD_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
 | |
|     set(BUILD_VERSION "${PROJECT_VERSION}")
 | |
| 
 | |
|     CheckGitRead(GIT_HASH_CACHE)
 | |
| 
 | |
|     if (NOT DEFINED GIT_HASH_CACHE)
 | |
|         set(GIT_HASH_CACHE "INVALID")
 | |
|     endif ()
 | |
| 
 | |
|     if (NOT DEFINED BUILD_ON_RELEASE_BRANCH)
 | |
|       set(BUILD_ON_RELEASE_BRANCH "false")
 | |
|     endif ()
 | |
| 
 | |
|     if (NOT DEFINED BUILD_PIPELINE_ID)
 | |
|         set(BUILD_PIPELINE_ID "999999")
 | |
|     endif()
 | |
| 
 | |
|     # Only update the git_version.cpp if the hash has changed. This will
 | |
|     # prevent us from rebuilding the project more than we need to.
 | |
|     if (NOT ${BUILD_COMMIT_HASH_FULL} STREQUAL ${GIT_HASH_CACHE} OR NOT EXISTS ${POST_CONFIGURE_FILE})
 | |
|         # Set che GIT_HASH_CACHE variable the next build won't have
 | |
|         # to regenerate the source file.
 | |
|         CheckGitWrite("${BUILD_COMMIT_HASH_FULL}")
 | |
|         configure_file(${PRE_CONFIGURE_FILE} ${POST_CONFIGURE_FILE} @ONLY)
 | |
|     endif ()
 | |
| endfunction()
 | |
| 
 | |
| function(CheckGitSetup project_src_dir)
 | |
|     add_custom_target(AlwaysCheckGit COMMAND ${CMAKE_COMMAND}
 | |
|         -DRUN_CHECK_GIT_VERSION=1
 | |
|         -DPRE_CONFIGURE_DIR=${PRE_CONFIGURE_DIR}
 | |
|         -DPOST_BUILD_DIR=${POST_BUILD_DIR}
 | |
|         -DGIT_HASH_CACHE=${GIT_HASH_CACHE}
 | |
|         -DPROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
 | |
|         -DPROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR}
 | |
|         -DPROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH}
 | |
|         -DPROJECT_VERSION=${PROJECT_VERSION}
 | |
|         -DPROJECT_SOURCE_DIR=${project_src_dir}
 | |
|         -P ${PROJECT_SOURCE_DIR}/cmake/GitVersion.cmake
 | |
|         DEPENDS ${PRE_CONFIGURE_FILE}
 | |
|         BYPRODUCTS ${POST_CONFIGURE_FILE}
 | |
|     )
 | |
| 
 | |
|     add_library(version-info STATIC ${POST_CONFIGURE_FILE})
 | |
|     target_include_directories(version-info PUBLIC ${PROJECT_SOURCE_DIR}/src)
 | |
|     add_dependencies(version-info AlwaysCheckGit)
 | |
|     CheckGitVersion()
 | |
| endfunction()
 | |
| 
 | |
| if (RUN_CHECK_GIT_VERSION)
 | |
|     CheckGitVersion()
 | |
| endif ()
 |