From 76bd513e845e1ab440369f786aebeb6992da1fe2 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Wed, 11 Mar 2026 02:08:46 +0000 Subject: [PATCH] Move BuildVer.h to common include and fix rebuild issue --- CMakeLists.txt | 18 +++++++------- Minecraft.Client/cmake/Common.cmake | 7 ------ Minecraft.World/stdafx.h | 2 +- cmake/CommonSources.cmake | 6 +++++ cmake/GenerateBuildVer.cmake | 24 +++++++++++++++++-- .../Common/BuildVer.h | 0 6 files changed, 37 insertions(+), 20 deletions(-) rename {Minecraft.Client => include}/Common/BuildVer.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40ef9daee..1d1cf0f5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,8 +62,12 @@ add_subdirectory(Minecraft.Client) # --- add_library(MinecraftWorld STATIC ${MINECRAFT_WORLD_SOURCES}) target_include_directories(MinecraftWorld - PRIVATE "${WORLD_DIR}" - PUBLIC "${WORLD_DIR}/x64headers" + PRIVATE + "${CMAKE_CURRENT_BINARY_DIR}/generated/" + "${WORLD_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/include/" + PUBLIC + "${WORLD_DIR}/x64headers" ) target_compile_definitions(MinecraftWorld PRIVATE ${MINECRAFT_SHARED_DEFINES} @@ -122,10 +126,11 @@ target_link_libraries(MinecraftClient PRIVATE # Build versioning # --- set(BUILDVER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateBuildVer.cmake") +set(BUILDVER_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/generated/Common/BuildVer.h") add_custom_target(GenerateBuildVer COMMAND ${CMAKE_COMMAND} - "-DOUTPUT_FILE=${CLIENT_DIR}/Common/BuildVer.h" + "-DOUTPUT_FILE=${BUILDVER_OUTPUT}" -P "${BUILDVER_SCRIPT}" COMMENT "Generating BuildVer.h..." VERBATIM @@ -133,13 +138,6 @@ add_custom_target(GenerateBuildVer add_dependencies(MinecraftClient GenerateBuildVer) -add_custom_command(TARGET MinecraftClient POST_BUILD - COMMAND git restore "**/BuildVer.h" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT "Restoring BuildVer.h..." - VERBATIM -) - # --- # Asset / redist copy # --- diff --git a/Minecraft.Client/cmake/Common.cmake b/Minecraft.Client/cmake/Common.cmake index 56982fce7..7c2293824 100644 --- a/Minecraft.Client/cmake/Common.cmake +++ b/Minecraft.Client/cmake/Common.cmake @@ -36,11 +36,6 @@ set(_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_AUDIO ) source_group("Common/Source Files/Audio" FILES ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_AUDIO}) -set(_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_BUILDVER - "${BASE_DIR}/BuildVer.h" -) -source_group("Common/Source Files/BuildVer" FILES ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_BUILDVER}) - set(_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_COLOURS "${BASE_DIR}/Colours/ColourTable.cpp" "${BASE_DIR}/Colours/ColourTable.h" @@ -1053,10 +1048,8 @@ set(MINECRAFT_CLIENT_COMMON ${_MINECRAFT_CLIENT_COMMON_COMMON} ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES} ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_AUDIO} - ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_BUILDVER} ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_COLOURS} ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_DLC} - ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_FILESYSTEM} ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_GAMERULES} ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_GAMERULES_LEVELGENERATION} ${_MINECRAFT_CLIENT_COMMON_COMMON_SOURCE_FILES_GAMERULES_LEVELGENERATION_STRUCTUREACTIONS} diff --git a/Minecraft.World/stdafx.h b/Minecraft.World/stdafx.h index 37ec371f5..5b42a0dae 100644 --- a/Minecraft.World/stdafx.h +++ b/Minecraft.World/stdafx.h @@ -192,7 +192,7 @@ void MemSect(int sect); #include "..\Minecraft.Client\Common\Minecraft_Macros.h" #include "..\Minecraft.Client\Common\Colours\ColourTable.h" -#include "..\Minecraft.Client\Common\BuildVer.h" +#include "Common\BuildVer.h" #ifdef _XBOX #include "..\Minecraft.Client\Xbox\Xbox_App.h" diff --git a/cmake/CommonSources.cmake b/cmake/CommonSources.cmake index 9a3cb386f..e6ad7d3d3 100644 --- a/cmake/CommonSources.cmake +++ b/cmake/CommonSources.cmake @@ -4,6 +4,12 @@ set(_INCLUDE_LCE_FILESYSTEM ) source_group("include/lce_filesystem" FILES ${_INCLUDE_LCE_FILESYSTEM}) +set(_INCLUDE_BUILDVER + "${CMAKE_SOURCE_DIR}/include/Common/BuildVer.h" +) +source_group("Common" FILES ${_INCLUDE_BUILDVER}) + set(SOURCES_COMMON ${_INCLUDE_LCE_FILESYSTEM} + ${_INCLUDE_BUILDVER} ) \ No newline at end of file diff --git a/cmake/GenerateBuildVer.cmake b/cmake/GenerateBuildVer.cmake index 6e6e63b1c..5db7f0d03 100644 --- a/cmake/GenerateBuildVer.cmake +++ b/cmake/GenerateBuildVer.cmake @@ -60,7 +60,9 @@ if(GIT_STATUS) set(SUFFIX "-dev") endif() -file(WRITE "${OUTPUT_FILE}" +# Write to a temp file first, only overwrite if content changed. +# This prevents unnecessary rebuilds when the version info hasn't changed. +set(_content "#pragma once\n" "\n" "#define VER_PRODUCTBUILD ${BUILD_NUMBER}\n" @@ -68,4 +70,22 @@ file(WRITE "${OUTPUT_FILE}" "#define VER_FILEVERSION_STR_W VER_PRODUCTVERSION_STR_W\n" "#define VER_BRANCHVERSION_STR_W L\"${GIT_REF}\"\n" "#define VER_NETWORK VER_PRODUCTBUILD\n" -) \ No newline at end of file +) + +set(_tmp "${OUTPUT_FILE}.tmp") +file(WRITE "${_tmp}" ${_content}) + +if(EXISTS "${OUTPUT_FILE}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E compare_files "${OUTPUT_FILE}" "${_tmp}" + RESULT_VARIABLE _changed + ) +else() + set(_changed 1) +endif() + +if(_changed) + file(RENAME "${_tmp}" "${OUTPUT_FILE}") +else() + file(REMOVE "${_tmp}") +endif() \ No newline at end of file diff --git a/Minecraft.Client/Common/BuildVer.h b/include/Common/BuildVer.h similarity index 100% rename from Minecraft.Client/Common/BuildVer.h rename to include/Common/BuildVer.h