From cca184d988d9845bacca07d4f3ddc96746368f94 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Wed, 11 Mar 2026 02:28:08 +0000 Subject: [PATCH] Seperate projects properly --- CMakeLists.txt | 93 +------------------ Minecraft.Client/CMakeLists.txt | 78 ++++++++++++++-- .../cmake}/AssetCopyTargets.cmake | 7 +- .../cmake}/CopyAssets.cmake | 6 +- .../cmake/{ => sources}/Common.cmake | 0 .../cmake/{ => sources}/Durango.cmake | 0 .../cmake/{ => sources}/ORBIS.cmake | 0 .../cmake/{ => sources}/PS3.cmake | 0 .../cmake/{ => sources}/PSVita.cmake | 0 .../cmake/{ => sources}/Windows.cmake | 0 .../cmake/{ => sources}/Xbox360.cmake | 0 Minecraft.World/CMakeLists.txt | 23 ++++- .../cmake/{ => sources}/Common.cmake | 0 .../cmake/{ => sources}/Durango.cmake | 0 14 files changed, 102 insertions(+), 105 deletions(-) rename {cmake => Minecraft.Client/cmake}/AssetCopyTargets.cmake (89%) rename {cmake => Minecraft.Client/cmake}/CopyAssets.cmake (92%) rename Minecraft.Client/cmake/{ => sources}/Common.cmake (100%) rename Minecraft.Client/cmake/{ => sources}/Durango.cmake (100%) rename Minecraft.Client/cmake/{ => sources}/ORBIS.cmake (100%) rename Minecraft.Client/cmake/{ => sources}/PS3.cmake (100%) rename Minecraft.Client/cmake/{ => sources}/PSVita.cmake (100%) rename Minecraft.Client/cmake/{ => sources}/Windows.cmake (100%) rename Minecraft.Client/cmake/{ => sources}/Xbox360.cmake (100%) rename Minecraft.World/cmake/{ => sources}/Common.cmake (100%) rename Minecraft.World/cmake/{ => sources}/Durango.cmake (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d1cf0f5d..e9e133f42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,80 +48,12 @@ set(MINECRAFT_SHARED_DEFINES # Add platform-specific defines list(APPEND MINECRAFT_SHARED_DEFINES ${PLATFORM_DEFINES}) -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_BINARY_DIR}/generated/" - "${WORLD_DIR}" - "${CMAKE_CURRENT_SOURCE_DIR}/include/" - PUBLIC - "${WORLD_DIR}/x64headers" -) -target_compile_definitions(MinecraftWorld PRIVATE - ${MINECRAFT_SHARED_DEFINES} - _LIB -) -if(MSVC) - configure_msvc_target(MinecraftWorld) -endif() - -# --- -# MinecraftClient -# --- -add_executable(MinecraftClient WIN32 ${MINECRAFT_CLIENT_SOURCES}) -target_include_directories(MinecraftClient PRIVATE - "${CLIENT_DIR}" - "${CLIENT_DIR}/Windows64/Iggy/include" - "${CMAKE_CURRENT_SOURCE_DIR}/include/" -) -target_compile_definitions(MinecraftClient PRIVATE - ${MINECRAFT_SHARED_DEFINES} -) -if(MSVC) - configure_msvc_target(MinecraftClient) - target_link_options(MinecraftClient PRIVATE - $<$:/LTCG /INCREMENTAL:NO> - ) -endif() - -set_target_properties(MinecraftClient PROPERTIES - VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" -) - -target_link_libraries(MinecraftClient PRIVATE - MinecraftWorld - d3d11 - d3dcompiler - XInput9_1_0 - wsock32 - legacy_stdio_definitions - "${CLIENT_DIR}/Windows64/Iggy/lib/iggy_w64.lib" - "${CLIENT_DIR}/Windows64/Iggy/lib/iggyperfmon_w64.lib" - "${CLIENT_DIR}/Windows64/Iggy/lib/iggyexpruntime_w64.lib" - $<$: # 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" - > - $<$>: # 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" - > -) - # --- # Build versioning # --- @@ -136,32 +68,15 @@ add_custom_target(GenerateBuildVer VERBATIM ) -add_dependencies(MinecraftClient GenerateBuildVer) - -# --- -# 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}/$" - -P "${COPY_SCRIPT}" - COMMENT "Copying redist files..." - VERBATIM -) - -add_dependencies(MinecraftClient CopyRedist) +add_dependencies(Minecraft.World GenerateBuildVer) +add_dependencies(Minecraft.Client GenerateBuildVer) # --- # Project organisation # --- # Set the startup project for Visual Studio -set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient) +set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT Minecraft.Client) # 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") +set_property(TARGET GenerateBuildVer PROPERTY FOLDER "Build") diff --git a/Minecraft.Client/CMakeLists.txt b/Minecraft.Client/CMakeLists.txt index e8cce7602..a36fbbe55 100644 --- a/Minecraft.Client/CMakeLists.txt +++ b/Minecraft.Client/CMakeLists.txt @@ -1,10 +1,10 @@ -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_CURRENT_LIST_DIR}/cmake/sources/Common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/Durango.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/ORBIS.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/PS3.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/PSVita.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/Windows.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/Xbox360.cmake") include("${CMAKE_SOURCE_DIR}/cmake/CommonSources.cmake") @@ -19,5 +19,67 @@ set(MINECRAFT_CLIENT_SOURCES ${MINECRAFT_CLIENT_WINDOWS} # ${MINECRAFT_CLIENT_XBOX360} ${SOURCES_COMMON} - PARENT_SCOPE ) + +add_executable(Minecraft.Client WIN32 ${MINECRAFT_CLIENT_SOURCES}) + +target_include_directories(Minecraft.Client PRIVATE + "${CMAKE_BINARY_DIR}/generated/" # This is for the generated BuildVer.h + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/Iggy/include" + "${CMAKE_SOURCE_DIR}/include/" +) +target_compile_definitions(Minecraft.Client PRIVATE + ${MINECRAFT_SHARED_DEFINES} +) +if(MSVC) + configure_msvc_target(Minecraft.Client) + target_link_options(Minecraft.Client PRIVATE + $<$:/LTCG /INCREMENTAL:NO> + ) +endif() + +set_target_properties(Minecraft.Client PROPERTIES + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" +) + +target_link_libraries(Minecraft.Client PRIVATE + Minecraft.World + d3d11 + d3dcompiler + XInput9_1_0 + wsock32 + legacy_stdio_definitions + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/Iggy/lib/iggy_w64.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/Iggy/lib/iggyperfmon_w64.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/Iggy/lib/iggyexpruntime_w64.lib" + $<$: # Debug 4J libraries + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/4JLibs/libs/4J_Input_d.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/4JLibs/libs/4J_Storage_d.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/4JLibs/libs/4J_Render_PC_d.lib" + > + $<$>: # Release 4J libraries + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/4JLibs/libs/4J_Input.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/4JLibs/libs/4J_Storage.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Windows64/4JLibs/libs/4J_Render_PC.lib" + > +) + +# --- +# 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_SOURCE_DIR}/x64/Release" + "-DCOPY_DEST=${CMAKE_CURRENT_BINARY_DIR}/$" + -P "${COPY_SCRIPT}" + COMMENT "Copying redist files..." + VERBATIM +) + +add_dependencies(Minecraft.Client CopyRedist) +set_property(TARGET CopyRedist PROPERTY FOLDER "Build") diff --git a/cmake/AssetCopyTargets.cmake b/Minecraft.Client/cmake/AssetCopyTargets.cmake similarity index 89% rename from cmake/AssetCopyTargets.cmake rename to Minecraft.Client/cmake/AssetCopyTargets.cmake index 2b726cd5e..8bfbaafae 100644 --- a/cmake/AssetCopyTargets.cmake +++ b/Minecraft.Client/cmake/AssetCopyTargets.cmake @@ -2,7 +2,7 @@ set(COPY_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake") -# Source;Dest pairs relative to Minecraft.Client/ and the build output. +# Source;Dest pairs relative to the current source dir and the build output. # Order matters — later entries overwrite earlier ones on conflict. set(ASSET_FOLDER_PAIRS "music" "music" @@ -22,6 +22,7 @@ set(ASSET_EXCLUDE_FILES "*.bat" "*.cmd" "*.msscmp" "*.binka" "*.swf" # These are built into the .arc + "*.xui" ) # Join the exclusion patterns into a single string for passing to the copy script @@ -40,7 +41,7 @@ function(setup_asset_copy_targets) list(APPEND copy_commands COMMAND ${CMAKE_COMMAND} - "-DCOPY_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/${src}" + "-DCOPY_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}/${src}" "-DCOPY_DEST=${CMAKE_CURRENT_BINARY_DIR}/$/${dest}" "-DEXCLUDE_FILES=${ASSET_EXCLUDE_FILES_STR}" -P "${COPY_SCRIPT}" @@ -53,7 +54,7 @@ function(setup_asset_copy_targets) VERBATIM ) - add_dependencies(MinecraftClient AssetCopyTargets) + add_dependencies(Minecraft.Client AssetCopyTargets) set_property(TARGET AssetCopyTargets PROPERTY FOLDER "Build") endfunction() \ No newline at end of file diff --git a/cmake/CopyAssets.cmake b/Minecraft.Client/cmake/CopyAssets.cmake similarity index 92% rename from cmake/CopyAssets.cmake rename to Minecraft.Client/cmake/CopyAssets.cmake index a6c3aa162..d05d2f2cc 100644 --- a/cmake/CopyAssets.cmake +++ b/Minecraft.Client/cmake/CopyAssets.cmake @@ -17,7 +17,7 @@ if(EXCLUDE_FILES) string(REPLACE "|" ";" EXCLUDE_FILES "${EXCLUDE_FILES}") endif() -if(WIN32) +if(CMAKE_HOST_WIN32) set(robocopy_args "${COPY_SOURCE}" "${COPY_DEST}" /S /MT /R:0 /W:0 /NP @@ -35,7 +35,7 @@ if(WIN32) if(rc GREATER 3) # Allows for "files copied" and "no files copied" cases, but treats actual errors as failures message(FATAL_ERROR "robocopy failed (exit code ${rc})") endif() -else() +elseif(CMAKE_HOST_UNIX) set(rsync_args -av) foreach(pattern IN LISTS EXCLUDE_FILES) @@ -51,4 +51,6 @@ else() if(rs GREATER 0) # Any non-zero exit code indicates an error message(FATAL_ERROR "rsync failed (exit code ${rs})") endif() +else() + message(FATAL_ERROR "Unsupported host platform for asset copying.") endif() \ No newline at end of file diff --git a/Minecraft.Client/cmake/Common.cmake b/Minecraft.Client/cmake/sources/Common.cmake similarity index 100% rename from Minecraft.Client/cmake/Common.cmake rename to Minecraft.Client/cmake/sources/Common.cmake diff --git a/Minecraft.Client/cmake/Durango.cmake b/Minecraft.Client/cmake/sources/Durango.cmake similarity index 100% rename from Minecraft.Client/cmake/Durango.cmake rename to Minecraft.Client/cmake/sources/Durango.cmake diff --git a/Minecraft.Client/cmake/ORBIS.cmake b/Minecraft.Client/cmake/sources/ORBIS.cmake similarity index 100% rename from Minecraft.Client/cmake/ORBIS.cmake rename to Minecraft.Client/cmake/sources/ORBIS.cmake diff --git a/Minecraft.Client/cmake/PS3.cmake b/Minecraft.Client/cmake/sources/PS3.cmake similarity index 100% rename from Minecraft.Client/cmake/PS3.cmake rename to Minecraft.Client/cmake/sources/PS3.cmake diff --git a/Minecraft.Client/cmake/PSVita.cmake b/Minecraft.Client/cmake/sources/PSVita.cmake similarity index 100% rename from Minecraft.Client/cmake/PSVita.cmake rename to Minecraft.Client/cmake/sources/PSVita.cmake diff --git a/Minecraft.Client/cmake/Windows.cmake b/Minecraft.Client/cmake/sources/Windows.cmake similarity index 100% rename from Minecraft.Client/cmake/Windows.cmake rename to Minecraft.Client/cmake/sources/Windows.cmake diff --git a/Minecraft.Client/cmake/Xbox360.cmake b/Minecraft.Client/cmake/sources/Xbox360.cmake similarity index 100% rename from Minecraft.Client/cmake/Xbox360.cmake rename to Minecraft.Client/cmake/sources/Xbox360.cmake diff --git a/Minecraft.World/CMakeLists.txt b/Minecraft.World/CMakeLists.txt index 3010354ac..9836a50fa 100644 --- a/Minecraft.World/CMakeLists.txt +++ b/Minecraft.World/CMakeLists.txt @@ -1,5 +1,5 @@ -include("${CMAKE_CURRENT_LIST_DIR}/cmake/Common.cmake") -include("${CMAKE_CURRENT_LIST_DIR}/cmake/Durango.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/Common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/cmake/sources/Durango.cmake") include("${CMAKE_SOURCE_DIR}/cmake/CommonSources.cmake") @@ -9,5 +9,22 @@ set(MINECRAFT_WORLD_SOURCES ${MINECRAFT_WORLD_COMMON} # ${MINECRAFT_WORLD_DURANGO} ${SOURCES_COMMON} - PARENT_SCOPE ) + +add_library(Minecraft.World STATIC ${MINECRAFT_WORLD_SOURCES}) + +target_include_directories(Minecraft.World + PRIVATE + "${CMAKE_BINARY_DIR}/generated/" + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_SOURCE_DIR}/include/" + PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/x64headers" +) +target_compile_definitions(Minecraft.World PRIVATE + ${MINECRAFT_SHARED_DEFINES} + _LIB +) +if(MSVC) + configure_msvc_target(Minecraft.World) +endif() diff --git a/Minecraft.World/cmake/Common.cmake b/Minecraft.World/cmake/sources/Common.cmake similarity index 100% rename from Minecraft.World/cmake/Common.cmake rename to Minecraft.World/cmake/sources/Common.cmake diff --git a/Minecraft.World/cmake/Durango.cmake b/Minecraft.World/cmake/sources/Durango.cmake similarity index 100% rename from Minecraft.World/cmake/Durango.cmake rename to Minecraft.World/cmake/sources/Durango.cmake