aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorisaiah <isaiahjclark21@gmail.com>2026-03-01 15:07:50 -0700
committerisaiah <isaiahjclark21@gmail.com>2026-03-01 15:47:31 -0700
commit5109b8c07a8c47ead95a9db3755e40176a96a7a4 (patch)
treed0c491b11fab783544b2d0a864479f13f9baca02 /CMakeLists.txt
parent4576e46e7ff0dcc985d38943d371badc6c332449 (diff)
Add CMake build system and source files for Minecraft Client
- Created Compile.md with detailed instructions for building the project using Visual Studio and CMake. - Added ClientSources.cmake to define the source files for the Minecraft Client. - Implemented CopyAssets.cmake to handle asset copying during the build process. - Introduced WorldSources.cmake to list the source files for Minecraft world functionalities.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt82
1 files changed, 82 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 00000000..a9ce5f69
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,82 @@
+cmake_minimum_required(VERSION 3.24)
+
+project(MinecraftConsoles LANGUAGES C CXX)
+
+if(NOT WIN32)
+ message(FATAL_ERROR "This CMake build currently supports Windows only.")
+endif()
+
+if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
+ message(FATAL_ERROR "Use a 64-bit generator/toolchain (x64).")
+endif()
+
+set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+
+include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/WorldSources.cmake")
+include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/ClientSources.cmake")
+
+list(TRANSFORM MINECRAFT_WORLD_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/")
+list(TRANSFORM MINECRAFT_CLIENT_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/")
+
+add_library(MinecraftWorld STATIC ${MINECRAFT_WORLD_SOURCES})
+target_include_directories(MinecraftWorld PRIVATE
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers"
+)
+target_compile_definitions(MinecraftWorld PRIVATE
+ $<$<CONFIG:Debug>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_DEBUG;_LIB;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
+ $<$<NOT:$<CONFIG:Debug>>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_LIB;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
+)
+if(MSVC)
+ target_compile_options(MinecraftWorld PRIVATE /W3 /MP /EHsc)
+endif()
+
+add_executable(MinecraftClient WIN32 ${MINECRAFT_CLIENT_SOURCES})
+target_include_directories(MinecraftClient PRIVATE
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/include"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Xbox/Sentient/Include"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers"
+)
+target_compile_definitions(MinecraftClient PRIVATE
+ $<$<CONFIG:Debug>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_DEBUG;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
+ $<$<NOT:$<CONFIG:Debug>>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
+)
+if(MSVC)
+ target_compile_options(MinecraftClient PRIVATE /W3 /MP /EHsc)
+endif()
+
+set_target_properties(MinecraftClient PROPERTIES
+ VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:MinecraftClient>"
+)
+
+target_link_libraries(MinecraftClient PRIVATE
+ MinecraftWorld
+ d3d11
+ XInput9_1_0
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/lib/iggy_w64.lib"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Miles/lib/mss64.lib"
+ $<$<CONFIG:Debug>:
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_d.lib"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_d.lib"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_d.lib"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC_d.lib"
+ >
+ $<$<NOT:$<CONFIG:Debug>>:
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_r.lib"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_r.lib"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_r.lib"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib"
+ >
+)
+
+add_custom_command(TARGET MinecraftClient POST_BUILD
+ COMMAND "${CMAKE_COMMAND}"
+ -DPROJECT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ -DOUTPUT_DIR="$<TARGET_FILE_DIR:MinecraftClient>"
+ -DCONFIGURATION=$<CONFIG>
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake"
+ VERBATIM
+)
+
+set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient)