diff options
| author | isaiah <isaiahjclark21@gmail.com> | 2026-03-01 15:07:50 -0700 |
|---|---|---|
| committer | isaiah <isaiahjclark21@gmail.com> | 2026-03-01 15:47:31 -0700 |
| commit | 5109b8c07a8c47ead95a9db3755e40176a96a7a4 (patch) | |
| tree | d0c491b11fab783544b2d0a864479f13f9baca02 /CMakeLists.txt | |
| parent | 4576e46e7ff0dcc985d38943d371badc6c332449 (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.txt | 82 |
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) |
