Seperate projects properly

This commit is contained in:
rtm516 2026-03-11 02:28:08 +00:00
parent 76bd513e84
commit cca184d988
No known key found for this signature in database
GPG key ID: 331715B8B007C67A
14 changed files with 102 additions and 105 deletions

View file

@ -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
$<$<CONFIG:Release>:/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"
$<$<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>>: # 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}/$<CONFIG>"
-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")

View file

@ -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
$<$<CONFIG:Release>:/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"
$<$<CONFIG:Debug>: # 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"
>
$<$<NOT:$<CONFIG:Debug>>: # 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}/$<CONFIG>"
-P "${COPY_SCRIPT}"
COMMENT "Copying redist files..."
VERBATIM
)
add_dependencies(Minecraft.Client CopyRedist)
set_property(TARGET CopyRedist PROPERTY FOLDER "Build")

View file

@ -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}/$<CONFIG>/${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()

View file

@ -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()

View file

@ -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()