Skip to content

Move fully to CMake#781

Open
rtm516 wants to merge 43 commits intosmartcmd:mainfrom
rtm516:feature/cmake-full
Open

Move fully to CMake#781
rtm516 wants to merge 43 commits intosmartcmd:mainfrom
rtm516:feature/cmake-full

Conversation

@rtm516
Copy link
Collaborator

@rtm516 rtm516 commented Mar 7, 2026

Description

  • Removes all msbuild/Visual Studio requirements
  • Full CMake now
  • Add BuildVer.h changes
  • Merge in master so we are on latest
  • Work out why it's broken it's self
  • Also restructures files to match the old structure in the visual studio filters Make source_groups work to keep the project structure
  • Update actions script
    • Nightly
    • PR

This 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 ambiguous

Build times will likely be a bit faster due to better handling of BuildVer.h

Also 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.

image

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.dll‎ has been updated to the one from the x64/Release as it exported 2 extra functions which matched the headers file

@rtm516 rtm516 changed the title Feature/cmake full Move fully to CMake Mar 7, 2026
@Fivebuss
Copy link

Fivebuss commented Mar 7, 2026

How about make visual studio use cmake instead?

Keeping VS support while making cmake (righfully) the build system

@lightyisreal
Copy link

Would this allow the project to be built using MINGW? (Unless the project relies on something that only VS has)

@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 7, 2026

How about make visual studio use cmake instead?

Keeping VS support while making cmake (righfully) the build system

It does, you just open the project folder with visual studio, I've updated the contributing guide to reflect this.

@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 7, 2026

Would this allow the project to be built using MINGW? (Unless the project relies on something that only VS has)

Should do although untested

@bootsareme
Copy link
Contributor

I assume this still allows MSBuild to be used?

@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 7, 2026

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

@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 8, 2026

Looks like my source groups are wrong and include more than needed, likely need to re-generate these based on the old vcxproj to only add what's needed for each platform

@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 11, 2026

This is ready for testing, it should be almost identical to the old VS/MSBuild stuff just using CMake.

@rtm516 rtm516 marked this pull request as ready for review March 11, 2026 15:57
@rtm516 rtm516 marked this pull request as draft March 11, 2026 16:12
@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 12, 2026

14h of work and I think its done

@irice7
Copy link

irice7 commented Mar 13, 2026

Nice work. Anything spesific to test?

@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 13, 2026

Nice work. Anything spesific to test?

@irice7
Just make sure it works and if you know CMake well give it a look over to make sure I've not missed anything obvious

@rtm516 rtm516 requested a review from Copilot March 14, 2026 10:22
@rtm516
Copy link
Collaborator Author

rtm516 commented Mar 14, 2026

Lets see if I've missed anything obvious

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.Client and Minecraft.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.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@irice7
Copy link

irice7 commented Mar 14, 2026

Builds fine on my machine. But with Clang (clang-cl) if(MSVC) will be true as well, and the /LTCG flag will be passed for the Release configuration alongside /GL which it does not support

Doesn't really matter since Clang will ignore it. Just thought I'd mention it

@rtm516 rtm516 requested a review from codeHusky March 14, 2026 17:37
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-based BuildVer.h generation.
  • 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.

Comment on lines +73 to +76
)

set(_tmp "${OUTPUT_FILE}.tmp")
file(WRITE "${_tmp}" ${_content})
Comment on lines +18 to +33
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`
Comment on lines +204 to +207
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants