Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,9 @@ Minecraft.World/x64_Debug/
Minecraft.World/Release/
Minecraft.World/x64_Release/

build/*
# CMake build output
build/
out/

# Existing build output files
!x64/**/Effects.msscmp
Expand All @@ -436,4 +438,3 @@ Minecraft.Client/Saves/

# Visual Studio Per-User Config
*.user
/out
184 changes: 99 additions & 85 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,16 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message(FATAL_ERROR "Use a 64-bit generator/toolchain (x64).")
endif()

set(CMAKE_CONFIGURATION_TYPES
"Debug"
"Release"
CACHE STRING "" FORCE
)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

function(configure_msvc_target target)
target_compile_options(${target} PRIVATE
$<$<AND:$<NOT:$<CONFIG:Release>>,$<COMPILE_LANGUAGE:C,CXX>>:/W3>
$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:C,CXX>>:/W3>
$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:C,CXX>>:/W0>
$<$<COMPILE_LANGUAGE:C,CXX>:/MP>
$<$<COMPILE_LANGUAGE:C,CXX>:/FS>
Expand All @@ -26,39 +31,55 @@ function(configure_msvc_target target)
)
endfunction()

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/")
list(APPEND MINECRAFT_CLIENT_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Xbox/MinecraftWindows.rc"
# ---
# Configuration
# ---
set(MINECRAFT_SHARED_DEFINES
_LARGE_WORLDS
_DEBUG_MENUS_ENABLED
$<$<CONFIG:Debug>:_DEBUG>
_CRT_NON_CONFORMING_SWPRINTFS
_CRT_SECURE_NO_WARNINGS
_WINDOWS64
)

set(WORLD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World")
set(CLIENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client")

# ---
# Sources
# ---
add_subdirectory(Minecraft.World)
add_subdirectory(Minecraft.Client)

# ---
# MinecraftWorld
# ---
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_include_directories(MinecraftWorld
PRIVATE "${WORLD_DIR}"
PUBLIC "${WORLD_DIR}/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>
${MINECRAFT_SHARED_DEFINES}
_LIB
)
if(MSVC)
configure_msvc_target(MinecraftWorld)
endif()

# ---
# MinecraftClient
# ---
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"
"${CLIENT_DIR}"
"${CLIENT_DIR}/Windows64/Iggy/include"
"${CLIENT_DIR}/Xbox/Sentient/Include"
"${CMAKE_CURRENT_SOURCE_DIR}/include/"
)
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>
${MINECRAFT_SHARED_DEFINES}
)
if(MSVC)
configure_msvc_target(MinecraftClient)
Expand All @@ -68,7 +89,7 @@ if(MSVC)
endif()

set_target_properties(MinecraftClient PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:MinecraftClient>"
VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)

target_link_libraries(MinecraftClient PRIVATE
Expand All @@ -77,74 +98,67 @@ target_link_libraries(MinecraftClient PRIVATE
XInput9_1_0
wsock32
legacy_stdio_definitions
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/lib/iggy_w64.lib"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/lib/iggyperfmon_w64.lib"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/lib/iggyexpruntime_w64.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_Render_PC_d.lib"
"${CLIENT_DIR}/Windows64/Iggy/lib/iggy_w64.lib"
"${CLIENT_DIR}/Windows64/Iggy/lib/iggyperfmon_w64.lib"
"${CLIENT_DIR}/Windows64/Iggy/lib/iggyexpruntime_w64.lib"
$<$<CONFIG:Debug>: # Debug 4J libraries
"${CLIENT_DIR}/Windows64/4JLibs/libs/4J_Input_d.lib"
"${CLIENT_DIR}/Windows64/4JLibs/libs/4J_Storage_d.lib"
"${CLIENT_DIR}/Windows64/4JLibs/libs/4J_Render_PC_d.lib"
>
$<$<NOT:$<CONFIG:Debug>>:
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Input.lib"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage.lib"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib"
$<$<NOT:$<CONFIG:Debug>>: # Release 4J libraries
"${CLIENT_DIR}/Windows64/4JLibs/libs/4J_Input.lib"
"${CLIENT_DIR}/Windows64/4JLibs/libs/4J_Storage.lib"
"${CLIENT_DIR}/Windows64/4JLibs/libs/4J_Render_PC.lib"
>
)

if(CMAKE_HOST_WIN32)
message(STATUS "Starting redist copy...")
execute_process(
COMMAND robocopy.exe
"${CMAKE_CURRENT_SOURCE_DIR}/x64/Release"
"${CMAKE_CURRENT_BINARY_DIR}"
/S /MT /R:0 /W:0 /NP
)
message(STATUS "Starting asset copy...")
execute_process(
COMMAND robocopy.exe
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client"
"${CMAKE_CURRENT_BINARY_DIR}"
/S /MT /R:0 /W:0 /NP
/XF "*.cpp" "*.c" "*.h" "*.hpp" "*.asm"
"*.xml" "*.lang" "*.vcxproj" "*.vcxproj.*" "*.sln"
"*.docx" "*.xls"
"*.bat" "*.cmd" "*.ps1" "*.py"
"*Test*"
/XD "Durango*" "Orbis*" "PS*" "Xbox"
)
message(STATUS "Patching Windows64Media...")
execute_process(
COMMAND robocopy.exe
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/DurangoMedia"
"${CMAKE_CURRENT_BINARY_DIR}/Windows64Media"
/S /MT /R:0 /W:0 /NP
/XF "*.h" "*.xml" "*.lang" "*.bat"
)
elseif(CMAKE_HOST_UNIX)
message(STATUS "Starting redist copy...")
execute_process(
COMMAND rsync -av "${CMAKE_CURRENT_SOURCE_DIR}/x64/Release/" "${CMAKE_CURRENT_BINARY_DIR}/"
)
message(STATUS "Starting asset copy...")
execute_process(
COMMAND rsync -av
"--exclude=*.cpp" "--exclude=*.c" "--exclude=*.h" "--exclude=*.hpp" "--exclude=*.asm"
"--exclude=*.xml" "--exclude=*.lang" "--exclude=*.vcxproj" "--exclude=*.vcxproj.*" "--exclude=*.sln"
"--exclude=*.docx" "--exclude=*.xls"
"--exclude=*.bat" "--exclude=*.cmd" "--exclude=*.ps1" "--exclude=*.py"
"--exclude=*Test*"
"--exclude=Durango*" "--exclude=Orbis*" "--exclude=PS*" "--exclude=Xbox"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/" "${CMAKE_CURRENT_BINARY_DIR}/"
)
message(STATUS "Patching Windows64Media...")
execute_process(
COMMAND rsync -av
"--exclude=*.h" "--exclude=*.xml" "--exclude=*.lang" "--exclude=*.bat"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/DurangoMedia/" "${CMAKE_CURRENT_BINARY_DIR}/Windows64Media/"
)
else()
message(FATAL_ERROR "Redist and asset copying is only supported on Windows (Robocopy) and Unix systems (rsync).")
endif()
# ---
# Build versioning
# ---
set(BUILDVER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateBuildVer.cmake")

add_custom_target(GenerateBuildVer
COMMAND ${CMAKE_COMMAND}
"-DOUTPUT_FILE=${CLIENT_DIR}/Common/BuildVer.h"
-P "${BUILDVER_SCRIPT}"
COMMENT "Generating BuildVer.h..."
VERBATIM
)

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
# ---
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/AssetCopyTargets.cmake")
setup_asset_copy_targets()

# Copy redist files
add_custom_target(CopyRedist ALL
COMMAND ${CMAKE_COMMAND}
"-DCOPY_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}/x64/Release"
"-DCOPY_DEST=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>"
-P "${COPY_SCRIPT}"
COMMENT "Copying redist files..."
VERBATIM
)

add_dependencies(MinecraftClient CopyRedist)

# ---
# Project organisation
# ---
# Set the startup project for Visual Studio
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient)

# Setup folders for Visual Studio, just hides the build targets under a sub folder
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(TARGET CopyRedist GenerateBuildVer PROPERTY FOLDER "Build")
60 changes: 60 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"version": 6,
"configurePresets": [
{
"name": "windows64",
"displayName": "Windows64",
"generator": "Visual Studio 17 2022",
"architecture": "x64"
},
{
"name": "durango",
"displayName": "Durango",
"generator": "Visual Studio 17 2022",
"toolchainFile": "${sourceDir}/cmake/toolchains/durango.cmake"
},
{
"name": "orbis",
"displayName": "ORBIS",
"generator": "Visual Studio 17 2022",
"toolchainFile": "${sourceDir}/cmake/toolchains/orbis.cmake"
},
{
"name": "ps3",
"displayName": "PS3",
"generator": "Visual Studio 17 2022",
"toolchainFile": "${sourceDir}/cmake/toolchains/ps3.cmake"
},
{
"name": "psvita",
"displayName": "PSVita",
"generator": "Visual Studio 17 2022",
"toolchainFile": "${sourceDir}/cmake/toolchains/psvita.cmake"
},
{
"name": "xbox360",
"displayName": "Xbox 360",
"generator": "Visual Studio 17 2022",
"toolchainFile": "${sourceDir}/cmake/toolchains/xbox360.cmake"
}
],
"buildPresets": [
{ "name": "windows64-debug", "displayName": "Windows64 - Debug", "configurePreset": "windows64", "configuration": "Debug" },
{ "name": "windows64-release", "displayName": "Windows64 - Release", "configurePreset": "windows64", "configuration": "Release" },

{ "name": "durango-debug", "displayName": "Durango - Debug", "configurePreset": "durango", "configuration": "Debug" },
{ "name": "durango-release", "displayName": "Durango - Release", "configurePreset": "durango", "configuration": "Release" },

{ "name": "orbis-debug", "displayName": "ORBIS - Debug", "configurePreset": "orbis", "configuration": "Debug" },
{ "name": "orbis-release", "displayName": "ORBIS - Release", "configurePreset": "orbis", "configuration": "Release" },

{ "name": "ps3-debug", "displayName": "PS3 - Debug", "configurePreset": "ps3", "configuration": "Debug" },
{ "name": "ps3-release", "displayName": "PS3 - Release", "configurePreset": "ps3", "configuration": "Release" },

{ "name": "psvita-debug", "displayName": "PSVita - Debug", "configurePreset": "psvita", "configuration": "Debug" },
{ "name": "psvita-release", "displayName": "PSVita - Release", "configurePreset": "psvita", "configuration": "Release" },

{ "name": "xbox360-debug", "displayName": "Xbox 360 - Debug", "configurePreset": "xbox360", "configuration": "Debug" },
{ "name": "xbox360-release", "displayName": "Xbox 360 - Release", "configurePreset": "xbox360", "configuration": "Release" }
]
}
5 changes: 5 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,8 @@ We currently do not accept any new code into the project that was written largel

# Pull Request Template
We request that all PRs made for this repo use our PR template to the fullest extent possible. Completely wiping it out to write minimal information will likely get your PR closed.

# Visual Studio
Visual Studio can directly open the `CMakeLists.txt` file in the root of the repo, just open the folder you cloned the repo into and it should automatically detect the `CMakeLists.txt` and set up the project.

We also suggest right clicking a folder in the solution explorer and switching to the 'CMake Targets View', which is more intuitive for navigating the project.
23 changes: 23 additions & 0 deletions Minecraft.Client/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
include("${CMAKE_CURRENT_LIST_DIR}/cmake/Common.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/Durango.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/ORBIS.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/PS3.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/PSVita.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/Windows.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/Xbox360.cmake")

include("${CMAKE_SOURCE_DIR}/cmake/CommonSources.cmake")

# Combine all source files into a single variable for the target
# TODO Add conditions to include sources for the current platform
set(MINECRAFT_CLIENT_SOURCES
${MINECRAFT_CLIENT_COMMON}
# ${MINECRAFT_CLIENT_DURANGO}
# ${MINECRAFT_CLIENT_ORBIS}
# ${MINECRAFT_CLIENT_PS3}
# ${MINECRAFT_CLIENT_PSVITA}
${MINECRAFT_CLIENT_WINDOWS}
# ${MINECRAFT_CLIENT_XBOX360}
${SOURCES_COMMON}
PARENT_SCOPE
)
28 changes: 0 additions & 28 deletions Minecraft.Client/Common/CommonMedia.sln

This file was deleted.

Loading
Loading