From 190f9eff2cf877771e3627de862f6c7f39928391 Mon Sep 17 00:00:00 2001 From: Firebladedoge229 Date: Sun, 12 Apr 2026 15:19:22 -0400 Subject: [PATCH] fix: server failing from localization changes + abrupt wine crash on exit --- CMakeLists.txt | 22 ++++++++++- Minecraft.Client/CMakeLists.txt | 52 ++++++++++++++++++-------- build-linux.sh | 20 ++++++---- cmake/ServerTarget.cmake | 66 +++++++++++++++++++++++++-------- 4 files changed, 118 insertions(+), 42 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3bc7f6c..9d98d228 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,12 +13,24 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) message(FATAL_ERROR "Use a 64-bit generator/toolchain (x64).") endif() +set(LCE_XWIN_CROSS_DEBUG_COMPAT OFF) +if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(LCE_XWIN_CROSS_DEBUG_COMPAT ON) +endif() + set(CMAKE_CONFIGURATION_TYPES "Debug" "Release" CACHE STRING "" FORCE ) -set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + +if(NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) + if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") + else() + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() +endif() function(configure_compiler_target target) # MSVC and compatible compilers (like Clang-cl) @@ -31,9 +43,13 @@ function(configure_compiler_target target) $<$:/GS> $<$:/EHsc> $<$:/GR> + $<$,$>:/Z7> $<$,$>:/Od> $<$,$>:/O2 /Oi /GT /GF> ) + target_link_options(${target} PRIVATE + $<$:/DEBUG:FULL /INCREMENTAL:NO> + ) endif() # MSVC @@ -65,7 +81,9 @@ endfunction() set(MINECRAFT_SHARED_DEFINES _LARGE_WORLDS _DEBUG_MENUS_ENABLED - $<$:_DEBUG> + $<$,$>>:_DEBUG> + $<$,$>:_ITERATOR_DEBUG_LEVEL=0> + $<$,$>:_HAS_ITERATOR_DEBUGGING=0> _CRT_NON_CONFORMING_SWPRINTFS _CRT_SECURE_NO_WARNINGS _HAS_STD_BYTE=0 diff --git a/Minecraft.Client/CMakeLists.txt b/Minecraft.Client/CMakeLists.txt index d09e882a..ff75cea1 100644 --- a/Minecraft.Client/CMakeLists.txt +++ b/Minecraft.Client/CMakeLists.txt @@ -70,30 +70,50 @@ set_source_files_properties(compat_shims.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS configure_compiler_target(Minecraft.Client) +set(MINECRAFT_CLIENT_USE_4J_DEBUG_LIBS TRUE) +if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(MINECRAFT_CLIENT_USE_4J_DEBUG_LIBS FALSE) +endif() + set_target_properties(Minecraft.Client PROPERTIES OUTPUT_NAME "Minecraft.Client" VS_DEBUGGER_WORKING_DIRECTORY "$" ) -target_link_libraries(Minecraft.Client PRIVATE - Minecraft.World - d3d11 - dxgi - d3dcompiler - XInput9_1_0 - wsock32 - legacy_stdio_definitions - $<$: # Debug 4J libraries - "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Input_d.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Storage_d.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC_d.lib" - > - $<$>: # Release 4J libraries +if(MINECRAFT_CLIENT_USE_4J_DEBUG_LIBS) + target_link_libraries(Minecraft.Client PRIVATE + Minecraft.World + d3d11 + dxgi + d3dcompiler + XInput9_1_0 + wsock32 + legacy_stdio_definitions + $<$: + "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Input_d.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Storage_d.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC_d.lib" + > + $<$>: + "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Input.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Storage.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC.lib" + > + ) +else() + target_link_libraries(Minecraft.Client PRIVATE + Minecraft.World + d3d11 + dxgi + d3dcompiler + XInput9_1_0 + wsock32 + legacy_stdio_definitions "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Input.lib" "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Storage.lib" "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC.lib" - > -) + ) +endif() # Iggy libs foreach(lib IN LISTS IGGY_LIBS) diff --git a/build-linux.sh b/build-linux.sh index 2875cd50..cd709346 100755 --- a/build-linux.sh +++ b/build-linux.sh @@ -133,11 +133,11 @@ do_install() { [[ -e "$BUILD_DIR/Minecraft.Client/$asset" ]] && \ cp -r "$BUILD_DIR/Minecraft.Client/$asset" "$INSTALL_DIR/client/" || true done - for asset in iggy_w64.dll Common Windows64; do - [[ -e "$BUILD_DIR/Minecraft.Server/$asset" ]] && \ - cp -r "$BUILD_DIR/Minecraft.Server/$asset" "$INSTALL_DIR/server/" || true + for asset in iggy_w64.dll Common Windows64 Windows64Media; do + [[ -e "$BUILD_DIR/Minecraft.Server/$BUILD_TYPE/$asset" ]] && \ + cp -r "$BUILD_DIR/Minecraft.Server/$BUILD_TYPE/$asset" "$INSTALL_DIR/server/" || true done - for asset in iggy_w64.dll Common Windows64 plugins runtime; do + for asset in iggy_w64.dll Common Windows64 Windows64Media plugins runtime; do [[ -e "$BUILD_DIR/Minecraft.Server.FourKit/$BUILD_TYPE/$asset" ]] && \ cp -r "$BUILD_DIR/Minecraft.Server.FourKit/$BUILD_TYPE/$asset" "$INSTALL_DIR/fourkit/" || true done @@ -186,7 +186,8 @@ SERVER_BIND_IP="\${MC_BIND:-0.0.0.0}" PERSIST_DIR="\${MC_DATA_DIR:-\$HOME/.local/share/minecraft-lce-server}" export WINEARCH=win64 export WINEPREFIX="\${WINEPREFIX:-\$HOME/.local/share/minecraft-lce-server-prefix}" -export WINEDLLOVERRIDES="winemenubuilder.exe=d" +export WINEDLLOVERRIDES="winemenubuilder.exe=d;winedbg.exe=d" +export WINEDEBUG="-all" export WINEESYNC=1 export WINEFSYNC=1 mkdir -p "\$PERSIST_DIR" "\$WINEPREFIX" @@ -211,7 +212,8 @@ if [[ -z "\${DISPLAY:-}" ]]; then trap 'kill \$XVFB_PID 2>/dev/null || true; rm -rf "\$WORK_DIR"' EXIT sleep 1 fi -exec wine "\$WORK_DIR/Minecraft.Server.exe" -port "\$SERVER_PORT" -bind "\$SERVER_BIND_IP" "\$@" +exec wine "\$WORK_DIR/Minecraft.Server.exe" -port "\$SERVER_PORT" -bind "\$SERVER_BIND_IP" "\$@" \ + 2> >(grep --line-buffered -vE '^(wine:|[0-9A-Fa-f]{4}:(fixme|err|warn|trace):|Unhandled exception:|Backtrace:|Modules:|Threads:|Registers:|Stack dump:)' >&2) LAUNCHER chmod +x "$INSTALL_DIR/minecraft-lce-server" } @@ -227,7 +229,8 @@ SERVER_BIND_IP="\${MC_BIND:-0.0.0.0}" PERSIST_DIR="\${MC_DATA_DIR:-\$HOME/.local/share/minecraft-lce-fourkit}" export WINEARCH=win64 export WINEPREFIX="\${WINEPREFIX:-\$HOME/.local/share/minecraft-lce-fourkit-prefix}" -export WINEDLLOVERRIDES="winemenubuilder.exe=d" +export WINEDLLOVERRIDES="winemenubuilder.exe=d;winedbg.exe=d" +export WINEDEBUG="-all" export WINEESYNC=1 export WINEFSYNC=1 mkdir -p "\$PERSIST_DIR" "\$WINEPREFIX" @@ -250,7 +253,8 @@ if [[ -z "\${DISPLAY:-}" ]]; then trap 'kill \$XVFB_PID 2>/dev/null || true; rm -rf "\$WORK_DIR"' EXIT sleep 1 fi -exec wine "\$WORK_DIR/Minecraft.Server.exe" -port "\$SERVER_PORT" -bind "\$SERVER_BIND_IP" "\$@" +exec wine "\$WORK_DIR/Minecraft.Server.exe" -port "\$SERVER_PORT" -bind "\$SERVER_BIND_IP" "\$@" \ + 2> >(grep --line-buffered -vE '^(wine:|[0-9A-Fa-f]{4}:(fixme|err|warn|trace):|Unhandled exception:|Backtrace:|Modules:|Threads:|Registers:|Stack dump:)' >&2) LAUNCHER chmod +x "$INSTALL_DIR/minecraft-lce-fourkit" } diff --git a/cmake/ServerTarget.cmake b/cmake/ServerTarget.cmake index f4ec0877..57f78297 100644 --- a/cmake/ServerTarget.cmake +++ b/cmake/ServerTarget.cmake @@ -39,6 +39,11 @@ function(configure_lce_server_target target) "${CMAKE_SOURCE_DIR}/Minecraft.Client/Common/Media/MediaWindows64" "Common/Media/MediaWindows64" ) + set(_use_debug_4j_libs TRUE) + if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(_use_debug_4j_libs FALSE) + endif() + target_include_directories(${target} PRIVATE "${CMAKE_BINARY_DIR}/generated/" # Generated BuildVer.h "${CMAKE_SOURCE_DIR}/Minecraft.Client/" @@ -70,25 +75,40 @@ function(configure_lce_server_target target) VS_DEBUGGER_COMMAND_ARGUMENTS "-port 25565 -bind 0.0.0.0 -name DedicatedServer" ) - target_link_libraries(${target} PRIVATE - Minecraft.World - d3d11 - dxgi - d3dcompiler - XInput9_1_0 - wsock32 - legacy_stdio_definitions - $<$: - "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Input_d.lib" - "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Storage_d.lib" - "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC_d.lib" - > - $<$>: + if(_use_debug_4j_libs) + target_link_libraries(${target} PRIVATE + Minecraft.World + d3d11 + dxgi + d3dcompiler + XInput9_1_0 + wsock32 + legacy_stdio_definitions + $<$: + "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Input_d.lib" + "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Storage_d.lib" + "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC_d.lib" + > + $<$>: + "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Input.lib" + "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Storage.lib" + "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC.lib" + > + ) + else() + target_link_libraries(${target} PRIVATE + Minecraft.World + d3d11 + dxgi + d3dcompiler + XInput9_1_0 + wsock32 + legacy_stdio_definitions "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Input.lib" "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Storage.lib" "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC.lib" - > - ) + ) + endif() foreach(lib IN LISTS IGGY_LIBS) target_link_libraries(${target} PRIVATE "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/Iggy/lib/${lib}") @@ -99,6 +119,20 @@ function(configure_lce_server_target target) # server flavour has its own set in the VS Solution Explorer. setup_asset_folder_copy(${target} "${_asset_folder_pairs}") setup_asset_file_copy(${target} "${_asset_files_pairs}") + + if(PLATFORM_NAME STREQUAL "Windows64") + add_custom_target(AssetLocalizationCopy_${target} ALL + COMMAND ${CMAKE_COMMAND} + "-DCOPY_SOURCE=${CMAKE_SOURCE_DIR}/Minecraft.Client/Windows64Media/loc" + "-DCOPY_DEST=$/Windows64Media/loc" + -P "${CMAKE_SOURCE_DIR}/cmake/CopyFolderScript.cmake" + VERBATIM + ) + + add_dependencies(${target} AssetLocalizationCopy_${target}) + set_property(TARGET AssetLocalizationCopy_${target} PROPERTY FOLDER "Build") + endif() + add_copyredist_target(${target}) if(PLATFORM_NAME STREQUAL "Windows64") add_gamehdd_target(${target})