Conversation
|
How about make visual studio use cmake instead? Keeping VS support while making cmake (righfully) the build system |
|
Would this allow the project to be built using MINGW? (Unless the project relies on something that only VS has) |
It does, you just open the project folder with visual studio, I've updated the contributing guide to reflect this. |
Should do although untested |
|
I assume this still allows MSBuild to be used? |
I believe it will run the cmake scripts, either way it works fine on my windows box through VS so hopefully should on everyone elses |
|
Looks like my source groups are wrong and include more than needed, likely need to re-generate these based on the old |
|
This is ready for testing, it should be almost identical to the old VS/MSBuild stuff just using CMake. |
|
14h of work and I think its done |
|
Nice work. Anything spesific to test? |
@irice7 |
|
Lets see if I've missed anything obvious |
There was a problem hiding this comment.
Pull request overview
This PR migrates the repository’s Windows build from legacy Visual Studio solution/project artifacts to a CMake-presets-based build, updates CI workflows to use CMake, and removes a large set of obsolete VS/TFS metadata and auxiliary project files.
Changes:
- Add CMake build definitions for
Minecraft.ClientandMinecraft.World, plus shared sources and BuildVer generation. - Add cross-platform asset/redist copy support for the CMake build.
- Update documentation,
.gitignore, and GitHub Actions workflows to reflect the CMake-based build.
Reviewed changes
Copilot reviewed 78 out of 90 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Updates build/run instructions and CMake commands. |
| CONTRIBUTING.md | Adds guidance for opening the repo as a CMake project in Visual Studio. |
| .gitignore | Adjusts ignored build output to reflect CMake build directories. |
| CMakeLists.txt | Reworks top-level build to use subdirectories, presets-driven defines, and BuildVer generation. |
| CMakePresets.json | Introduces configure/build presets for multiple platforms (Windows64, Durango, Orbis, PS3, PSVita, Xbox 360). |
| cmake/CommonSources.cmake | Defines shared source groups (filesystem + BuildVer header) for targets. |
| cmake/GenerateBuildVer.cmake | Generates BuildVer.h with git-derived version/branch info. |
| Minecraft.Client/CMakeLists.txt | Adds a CMake target for Minecraft.Client, linking, PCH, and copy targets. |
| Minecraft.Client/cmake/AssetCopyTargets.cmake | Adds CMake targets to copy required assets into the build output. |
| Minecraft.Client/cmake/CopyAssets.cmake | Implements host-specific recursive copy (robocopy/rsync) with exclusions. |
| Minecraft.World/CMakeLists.txt | Adds a CMake target for Minecraft.World (static lib), includes/defines, and PCH. |
| Minecraft.World/cmake/sources/Durango.cmake | Adds Durango-specific source grouping for Minecraft.World. |
| Minecraft.World/stdafx.h | Adjusts BuildVer.h include path to match new include layout. |
| include/Common/BuildVer.h | Adds a fallback/stub BuildVer header in the source tree. |
| .github/workflows/pull-request.yml | Adds PR CI build using CMake presets on Windows. |
| .github/workflows/nightly.yml | Migrates nightly build pipeline from MSBuild to CMake presets + artifact packaging. |
| .github/workflows/debug-test.yml | Removes old MSBuild debug PR workflow. |
| .github/workflows/build.yml | Removes old MSBuild workflow that built Debug/Release artifacts. |
| cmake/WorldSources.cmake | Removes legacy source-list CMake fragment (replaced by per-target CMake in subdirs). |
| cmake/ClientSources.cmake | Removes legacy source-list CMake fragment (replaced by per-target CMake in subdirs). |
| Minecraft.World/Minecraft.World.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.World/Minecraft.World.vcxproj.user | Removes legacy per-user VS project settings file. |
| Minecraft.World/compile_flags.txt | Removes legacy compile flags file used by non-CMake tooling. |
| Minecraft.World/ARM64EC_Debug/Minecraft.World.vcxproj.FileListAbsolute.txt | Removes generated build output file list. |
| Minecraft.Client/Minecraft.Client.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/compile_flags.txt | Removes legacy compile flags file used by non-CMake tooling. |
| Minecraft.Client/PS3/SPU_Tasks/SPU_Tasks.sln | Removes legacy PS3 SPU tasks solution file. |
| Minecraft.Client/PS3/SPU_Tasks/Texture_blit/Texture_blit.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Texture_blit/Texture_blit.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/RLECompress/RLECompress.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Renderer_TextureUpdate/Renderer_TextureUpdate.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Renderer_TextureUpdate/Renderer_TextureUpdate.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/PerlinNoise/PerlinNoise.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/PerlinNoise/PerlinNoise.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_zSort/LevelRenderer_zSort.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_zSort/LevelRenderer_zSort.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_FindNearestChunk/LevelRenderer_FindNearestChunk.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_FindNearestChunk/LevelRenderer_FindNearestChunk.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_cull/LevelRenderer_cull.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_cull/LevelRenderer_cull.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.filters | Removes legacy VS filters file for PS3 SPU task project. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj.filters | Removes legacy VS filters file for PS3 SPU task project. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_getData/CompressedTileStorage_getData.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_getData/CompressedTileStorage_getData.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj.filters | Removes legacy VS filters file for PS3 SPU task project. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj.filters | Removes legacy VS filters file for PS3 SPU task project. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj.filters | Removes legacy VS filters file for PS3 SPU task project. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/ReplaceNewDelete/PS3/ReplaceNewDeleteSample.vcxproj | Removes legacy HeapInspector sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/MultiThreadedHook/PS3/MultiThreadedHookSample.vcxproj | Removes legacy HeapInspector sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/Manual/PS3/ManualSample.vcxproj | Removes legacy HeapInspector sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/Hook/PS3/HookSample.vcxproj | Removes legacy HeapInspector sample project file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj | Removes legacy build-only project file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.sln | Removes legacy solution file. |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.vspscc | Removes legacy VS/TFS source control metadata file. |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj | Removes legacy build-only project file. |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.sln | Removes legacy solution file. |
| Minecraft.Client/Common/CommonMedia.vcxproj.filters | Removes legacy VS filters file for CommonMedia. |
| Minecraft.Client/Common/CommonMedia.vcxproj | Removes legacy CommonMedia makefile project. |
| Minecraft.Client/Common/CommonMedia.sln | Removes legacy solution for CommonMedia. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
There was a problem hiding this comment.
Pull request overview
This PR continues the repo’s build-system migration toward a CMake + preset-based workflow, cleaning up legacy Visual Studio artifacts and updating CI/docs accordingly.
Changes:
- Introduces per-module CMake builds (Minecraft.World / Minecraft.Client), shared source lists, and git-based BuildVer generation.
- Adds cross-platform asset/redist copy targets used by local builds and CI.
- Removes legacy VS/TFS source-control files and many PS3/Xbox360-era auxiliary VS projects/solutions; updates GitHub Actions workflows and README/CONTRIBUTING guidance.
Reviewed changes
Copilot reviewed 78 out of 90 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Updates build/run instructions to Visual Studio “open folder” + CMake presets. |
| Minecraft.World/stdafx.h | Switches BuildVer include path to Common\\BuildVer.h. |
| Minecraft.World/Minecraft.World.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.World/Minecraft.World.vcxproj.user | Removes per-user Visual Studio settings file. |
| Minecraft.World/compile_flags.txt | Removes clangd compile flags file (likely superseded by CMake). |
| Minecraft.World/CMakeLists.txt | Adds CMake target for Minecraft.World with includes/defines/PCH setup. |
| Minecraft.World/cmake/sources/Durango.cmake | Adds Durango-specific source grouping for Minecraft.World. |
| Minecraft.World/ARM64EC_Debug/Minecraft.World.vcxproj.FileListAbsolute.txt | Removes generated VS build output file. |
| Minecraft.Client/PS3/SPU_Tasks/Texture_blit/Texture_blit.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Texture_blit/Texture_blit.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/SPU_Tasks.sln | Removes legacy PS3 SPU task solution file. |
| Minecraft.Client/PS3/SPU_Tasks/RLECompress/RLECompress.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Renderer_TextureUpdate/Renderer_TextureUpdate.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Renderer_TextureUpdate/Renderer_TextureUpdate.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/PerlinNoise/PerlinNoise.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/PerlinNoise/PerlinNoise.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_zSort/LevelRenderer_zSort.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_zSort/LevelRenderer_zSort.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_FindNearestChunk/LevelRenderer_FindNearestChunk.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_FindNearestChunk/LevelRenderer_FindNearestChunk.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_cull/LevelRenderer_cull.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_cull/LevelRenderer_cull.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_getData/CompressedTileStorage_getData.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_getData/CompressedTileStorage_getData.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/ReplaceNewDelete/PS3/ReplaceNewDeleteSample.vcxproj | Removes legacy PS3 sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/MultiThreadedHook/PS3/MultiThreadedHookSample.vcxproj | Removes legacy PS3 sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/Manual/PS3/ManualSample.vcxproj | Removes legacy PS3 sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/Hook/PS3/HookSample.vcxproj | Removes legacy PS3 sample project file. |
| Minecraft.Client/Minecraft.Client.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj | Removes legacy project file for build-only GameRules assets. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.sln | Removes legacy solution for build-only GameRules assets. |
| Minecraft.Client/compile_flags.txt | Removes clangd compile flags file (likely superseded by CMake). |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.filters | Removes legacy VS filters file. |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj | Removes legacy project file for build-only GameRules assets. |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.sln | Removes legacy solution for build-only GameRules assets. |
| Minecraft.Client/Common/CommonMedia.vcxproj.filters | Removes legacy VS filters file for CommonMedia tooling project. |
| Minecraft.Client/Common/CommonMedia.vcxproj | Removes legacy tooling project for building media archives/localisation. |
| Minecraft.Client/Common/CommonMedia.sln | Removes legacy solution for CommonMedia tooling project. |
| Minecraft.Client/CMakeLists.txt | Adds CMake target for Minecraft.Client, links, PCH, asset/redist copy, CI-facing working directory. |
| Minecraft.Client/cmake/CopyAssets.cmake | Adds cross-platform asset-copy helper (robocopy/rsync). |
| Minecraft.Client/cmake/AssetCopyTargets.cmake | Adds asset copy target orchestration and exclusion patterns. |
| include/Common/BuildVer.h | Adds placeholder BuildVer header in source tree (generated header written to build dir). |
| CONTRIBUTING.md | Adds guidance for using Visual Studio’s CMake folder-open workflow. |
| CMakePresets.json | Adds configure/build presets for supported platforms + debug/release build presets. |
| CMakeLists.txt | Refactors root CMake to shared defines, per-target config helpers, subdirectories, and BuildVer generation target. |
| cmake/WorldSources.cmake | Removes large legacy source list file (replaced by new modular cmake/sources/*.cmake). |
| cmake/GenerateBuildVer.cmake | Adds script to generate BuildVer.h from git metadata. |
| cmake/CommonSources.cmake | Adds shared source grouping (filesystem + BuildVer) for both targets. |
| cmake/ClientSources.cmake | Removes large legacy source list file (replaced by new modular cmake/sources/*.cmake). |
| .gitignore | Updates ignored build output paths for new CMake build layout. |
| .github/workflows/pull-request.yml | Adds PR build workflow using CMake presets on Windows. |
| .github/workflows/nightly.yml | Updates nightly build to use CMake presets and uploads staged artifacts. |
| .github/workflows/debug-test.yml | Removes legacy MSBuild debug workflow. |
| .github/workflows/build.yml | Removes legacy MSBuild build workflow. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
|
Builds fine on my machine. But with Clang (clang-cl) Doesn't really matter since Clang will ignore it. Just thought I'd mention it |
There was a problem hiding this comment.
Pull request overview
This PR migrates the repository’s primary build workflow from legacy Visual Studio/MSBuild project files to a CMake-presets-based build, updates docs/CI accordingly, and removes a large amount of legacy VS/TFS scaffolding.
Changes:
- Added modular CMake builds for
Minecraft.World,Minecraft.Client, and (Windows-only)Minecraft.Server, including asset/redist copy helpers and git-basedBuildVer.hgeneration. - Added/updated GitHub Actions workflows to build via CMake presets for PRs and nightly releases.
- Removed legacy VS source-control metadata files and many unused legacy VS solution/project files (notably PS3 SPU task projects and build-only utility projects).
Reviewed changes
Copilot reviewed 87 out of 104 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| x64/Release/mss64.dll | Binary runtime dependency (Windows) included/updated. |
| x64/Release/iggy_w64.dll | Binary runtime dependency (Windows) included/updated. |
| x64/Debug/mss64.dll | Binary runtime dependency (Windows) included/updated. |
| x64/Debug/iggy_w64.dll | Binary runtime dependency (Windows) included/updated. |
| README.md | Updates build/run instructions to the CMake + VS “Open Folder” flow and CMake presets. |
| COMPILE.md | Rewrites compile instructions around CMake presets and VS CMake Targets View. |
| CMakePresets.json | Introduces standardized configure/build presets for Windows64 and console toolchains. |
| CMakeLists.txt | Refactors top-level build to use subdirectories, shared defines, and BuildVer generation. |
| cmake/CommonSources.cmake | Centralizes common sources (filesystem + BuildVer header) for reuse across targets. |
| cmake/Utils.cmake | Adds helper targets for GameHDD creation and redist copying. |
| cmake/CopyAssets.cmake | Adds reusable folder/file asset copy target generators for CMake targets. |
| cmake/CopyFolderScript.cmake | Implements cross-platform folder copy (robocopy/rsync) with exclusion support. |
| cmake/CopyFileScript.cmake | Implements cross-platform file copy (robocopy/rsync) for specific asset files. |
| cmake/GenerateBuildVer.cmake | Generates BuildVer.h at build time using git metadata. |
| cmake/CopyServerAssets.cmake | Removes old server-asset copy script (replaced by new CMake copy helpers). |
| include/Common/BuildVer.h | Adds a checked-in fallback BuildVer header (CMake generates a build output version). |
| Minecraft.Client/CMakeLists.txt | Adds CMake target for client, platform source selection, linking, and asset copy. |
| Minecraft.Server/CMakeLists.txt | Adds CMake target for dedicated server, linking, and minimal asset/redist copy. |
| Minecraft.World/CMakeLists.txt | Adds CMake target for world static library and includes/defines/PCH setup. |
| Minecraft.World/cmake/sources/Durango.cmake | Adds Durango-only world source grouping for CMake. |
| Minecraft.World/stdafx.h | Adjusts BuildVer include path to the new include layout. |
| Minecraft.Server/Windows64/postbuild_server.ps1 | Removes legacy post-build PowerShell script (replaced by CMake copy targets). |
| Minecraft.World/compile_flags.txt | Removes legacy compile flags file. |
| Minecraft.Client/compile_flags.txt | Removes legacy compile flags file. |
| cmake/ClientSources.cmake | Removes legacy monolithic client sources list file (replaced by per-platform CMake includes). |
| Minecraft.World/Minecraft.World.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.World/Minecraft.World.vcxproj.user | Removes per-user VS config file from repo. |
| Minecraft.World/ARM64EC_Debug/Minecraft.World.vcxproj.FileListAbsolute.txt | Removes generated build artifact file from repo. |
| Minecraft.Client/Minecraft.Client.vcxproj.vspscc | Removes legacy TFS/VS source control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/SPU_Tasks.sln | Removes legacy PS3 SPU tasks solution file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj.filters | Removes legacy PS3 SPU task filters file. |
| Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkUpdate.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj.filters | Removes legacy PS3 SPU task filters file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTile/CompressedTile.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj.filters | Removes legacy PS3 SPU task filters file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_compress/CompressedTileStorage_compress.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_getData/CompressedTileStorage_getData.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/CompressedTileStorage_getData/CompressedTileStorage_getData.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj.filters | Removes legacy PS3 SPU task filters file. |
| Minecraft.Client/PS3/SPU_Tasks/GameRenderer_updateLightTexture/GameRenderer_updateLightTexture.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.filters | Removes legacy PS3 SPU task filters file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderChunks/LevelRenderChunks.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_cull/LevelRenderer_cull.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_cull/LevelRenderer_cull.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_FindNearestChunk/LevelRenderer_FindNearestChunk.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_FindNearestChunk/LevelRenderer_FindNearestChunk.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_zSort/LevelRenderer_zSort.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_zSort/LevelRenderer_zSort.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/PerlinNoise/PerlinNoise.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/PerlinNoise/PerlinNoise.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Renderer_TextureUpdate/Renderer_TextureUpdate.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/Renderer_TextureUpdate/Renderer_TextureUpdate.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/RLECompress/RLECompress.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/SPU_Tasks/Texture_blit/Texture_blit.spu.vcxproj | Removes legacy PS3 SPU task project file. |
| Minecraft.Client/PS3/SPU_Tasks/Texture_blit/Texture_blit.spu.vcxproj.vspscc | Removes legacy PS3 SPU task source-control metadata file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/Hook/PS3/HookSample.vcxproj | Removes legacy PS3 HeapInspector sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/Manual/PS3/ManualSample.vcxproj | Removes legacy PS3 HeapInspector sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/MultiThreadedHook/PS3/MultiThreadedHookSample.vcxproj | Removes legacy PS3 HeapInspector sample project file. |
| Minecraft.Client/PS3/PS3Extras/HeapInspector/Samples/ReplaceNewDelete/PS3/ReplaceNewDeleteSample.vcxproj | Removes legacy PS3 HeapInspector sample project file. |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj | Removes legacy build-only GameRules VS project (Durango layout). |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.filters | Removes legacy build-only GameRules filters file (Durango layout). |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.vspscc | Removes legacy GameRules source-control metadata file (Durango layout). |
| Minecraft.Client/Durango/Layout/Image/Loose/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.sln | Removes legacy build-only GameRules solution (Durango layout). |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj | Removes legacy build-only GameRules VS project (common res). |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.filters | Removes legacy build-only GameRules filters file (common res). |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.vcxproj.vspscc | Removes legacy GameRules source-control metadata file (common res). |
| Minecraft.Client/Common/res/TitleUpdate/GameRules/BuildOnly/GameRules.sln | Removes legacy build-only GameRules solution (common res). |
| Minecraft.Client/Common/CommonMedia.vcxproj | Removes legacy CommonMedia makefile project (asset packaging path). |
| Minecraft.Client/Common/CommonMedia.vcxproj.filters | Removes legacy CommonMedia filters file. |
| Minecraft.Client/Common/CommonMedia.sln | Removes legacy CommonMedia solution. |
| .gitignore | Simplifies ignore rules around CMake build outputs and server data. |
| .github/workflows/pull-request.yml | Adds PR build workflow using CMake presets on Windows runners. |
| .github/workflows/nightly.yml | Updates nightly client release to build/package via CMake presets and upload artifacts. |
| .github/workflows/nightly-server.yml | Adds separate nightly dedicated server release workflow via CMake presets. |
| .github/workflows/debug-test.yml | Removes old MSBuild-based debug CI workflow. |
| .github/workflows/build.yml | Removes old MSBuild-based build workflow. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| ) | ||
|
|
||
| set(_tmp "${OUTPUT_FILE}.tmp") | ||
| file(WRITE "${_tmp}" ${_content}) |
| foreach(filepath IN LISTS COPY_SOURCE) | ||
| get_filename_component(dir "${filepath}" DIRECTORY) | ||
| get_filename_component(name "${filepath}" NAME) | ||
|
|
||
| if(NOT dir IN_LIST unique_dirs) | ||
| list(APPEND unique_dirs "${dir}") | ||
| endif() | ||
|
|
||
| list(APPEND "FILES_IN_${dir}" "${name}") | ||
| endforeach() | ||
|
|
||
| foreach(dir IN LISTS unique_dirs) | ||
| execute_process( | ||
| COMMAND robocopy.exe "${dir}" "${COPY_DEST}" ${FILES_IN_${dir}} /MT /R:0 /W:0 /NP | ||
| RESULT_VARIABLE rc | ||
| ) |
| 1. Open the repo folder in Visual Studio 2022+. | ||
| 2. Wait for cmake to configure the project and load all assets (this may take a few minutes on the first run). | ||
| 3. Right click a folder in the solution explorer and switch to the 'CMake Targets View' | ||
| 4. Select platform and configuration from the dropdown. EG: `Windows - Debug` or `Windows - Release` |
| 1. Install [Visual Studio 2022](https://aka.ms/vs/17/release/vs_community.exe) or [newer](https://visualstudio.microsoft.com/downloads/). | ||
| 2. Clone the repository. | ||
| 3. Open the project by double-clicking `MinecraftConsoles.sln`. | ||
| 4. Make sure `Minecraft.Client` is set as the Startup Project. | ||
| 5. Set the build configuration to **Debug** (Release is also ok but missing some debug features) and the target platform to **Windows64**, then build and run. | ||
| 3. Open the project folder from Visual Studio. | ||
| 4. Set the build configuration to **Windows - Debug** (Release is also ok but missing some debug features), then build and run. |
| @@ -0,0 +1,85 @@ | |||
| # Note: Alot of this file is the same as the client due to the shared code | |||
Description
Also restructures files to match the old structure in the visual studio filtersMake source_groups work to keep the project structureThis should also pave the way for builds on other platforms like linux. Note: We have to force MSVC as otherwise the project won't compile due to
reference to 'byte' is ambiguousBuild times will likely be a bit faster due to better handling of
BuildVer.hAlso the Nightly workflow has been re-worked to support multiple platforms later
Toolchains for each of the platforms will need setting up once we are ready to build for those, for now they are empty.
Changes
Previous Behavior
N/A
Root Cause
N/A
New Behavior
N/A
Fix Implementation
N/A
AI Use Disclosure
AI was used to generate the sources groups file from the filters as I really didnt wanna do that by hand.
Related Issues
More info
Theres a bunch of files not used in the repo by the looks of it, atleast they were excluded by every platform from what I could see
Minecraft.Client.Excluded.cmake.txt
Minecraft.World.Excluded.cmake.txt
The
Minecraft.Client/Windows64/Iggy/lib/redist64/iggy_w64.dllhas been updated to the one from thex64/Releaseas it exported 2 extra functions which matched the headers file