From c6a137ec6ff4de637a934df906f963bf331ae07a Mon Sep 17 00:00:00 2001 From: Fireblade <72758695+Firebladedoge229@users.noreply.github.com> Date: Thu, 23 Apr 2026 23:04:47 -0400 Subject: [PATCH] fix. building neoLegacy on linux not sure if bundling an exe file is the best way to do this but oh well --- CMakeLists.txt | 51 ++++++++++++++++ Minecraft.Client/Windows64/Shaders/fxc.exe | Bin 0 -> 174936 bytes build-linux.sh | 2 +- cmake/FxcWineWrapper.sh.in | 68 +++++++++++++++++++++ 4 files changed, 120 insertions(+), 1 deletion(-) create mode 100755 Minecraft.Client/Windows64/Shaders/fxc.exe create mode 100644 cmake/FxcWineWrapper.sh.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 76c47083..3a8257ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,11 +96,62 @@ if(PLATFORM_NAME STREQUAL "Windows64") endif() list(APPEND MINECRAFT_SHARED_DEFINES ${PLATFORM_DEFINES}) +# handle fxc shader compilation on non-windows platforms +if(CMAKE_HOST_UNIX AND CMAKE_CROSSCOMPILING AND PLATFORM_NAME STREQUAL "Windows64") + set(_LCE_FXC_CANDIDATES + "${CMAKE_SOURCE_DIR}/Minecraft.Client/Windows64/Shaders/fxc.exe" + "${CMAKE_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/impls/Windows_Libs/Render/shaders/fxc.exe" + ) + + unset(LCE_FXC_EXE) + foreach(_LCE_FXC_CANDIDATE IN LISTS _LCE_FXC_CANDIDATES) + if(EXISTS "${_LCE_FXC_CANDIDATE}") + set(LCE_FXC_EXE "${_LCE_FXC_CANDIDATE}") + break() + endif() + endforeach() + + if(LCE_FXC_EXE) + find_program(LCE_WINE_PROGRAM NAMES wine) + if(NOT LCE_WINE_PROGRAM) + message(FATAL_ERROR "Found fxc.exe at '${LCE_FXC_EXE}', but could not find wine in the system PATH.") + endif() + + set(_LCE_FXC_WRAPPER_DIR "${CMAKE_BINARY_DIR}/tools") + set(_LCE_FXC_WRAPPER "${_LCE_FXC_WRAPPER_DIR}/fxc") + file(MAKE_DIRECTORY "${_LCE_FXC_WRAPPER_DIR}") + configure_file( + "${CMAKE_SOURCE_DIR}/cmake/FxcWineWrapper.sh.in" + "${_LCE_FXC_WRAPPER}" + @ONLY + ) + file(CHMOD "${_LCE_FXC_WRAPPER}" + PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + ) + + set(FXC_COMPILER "${_LCE_FXC_WRAPPER}" CACHE FILEPATH "Path to FXC compiler" FORCE) + message(STATUS "Translating FXC through Wine: ${LCE_WINE_PROGRAM} ${LCE_FXC_EXE}") + endif() +endif() + # --- # Sources # --- add_subdirectory("Minecraft.Client/${PLATFORM_NAME}/4JLibs") +if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # clang apparently doesnt like whatever __m128 is so we gotta define it manually + if(TARGET 4JLibs.${PLATFORM_NAME}.Render) + target_compile_definitions(4JLibs.${PLATFORM_NAME}.Render PRIVATE + _XM_NO_INTRINSICS_ + m128_f32=vector4_f32 + ) + endif() +endif() + add_subdirectory(Minecraft.World) add_subdirectory(Minecraft.Client) if(PLATFORM_NAME STREQUAL "Windows64") # Server is only supported on Windows for now diff --git a/Minecraft.Client/Windows64/Shaders/fxc.exe b/Minecraft.Client/Windows64/Shaders/fxc.exe new file mode 100755 index 0000000000000000000000000000000000000000..9d5e3e7359203aaf459b3819cf11f541534ea183 GIT binary patch literal 174936 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

fR#az+R#lYU9R+<_W(t>GW4|e=2y>rVXphI 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 literal 0 HcmV?d00001 diff --git a/build-linux.sh b/build-linux.sh index 7669646b..d5357932 100755 --- a/build-linux.sh +++ b/build-linux.sh @@ -17,7 +17,7 @@ warn() { echo -e "${YELLOW}[warn]${NC} $*"; } die() { echo -e "${RED}[error]${NC} $*" >&2; exit 1; } check_deps() { local missing=() - local deps=(clang-cl lld-link llvm-rc llvm-ml llvm-lib llvm-mt cmake ninja xwin rsync) + local deps=(clang-cl lld-link llvm-rc llvm-ml llvm-lib llvm-mt cmake ninja xwin rsync wine) for dep in "${deps[@]}"; do command -v "$dep" &>/dev/null || missing+=("$dep") done diff --git a/cmake/FxcWineWrapper.sh.in b/cmake/FxcWineWrapper.sh.in new file mode 100644 index 00000000..6a744fd0 --- /dev/null +++ b/cmake/FxcWineWrapper.sh.in @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +set -euo pipefail + +map_to_windows_path() { + local v="$1" + if [[ "$v" == /*/* ]]; then + winepath -w "$v" 2>/dev/null || printf '%s' "$v" + else + printf '%s' "$v" + fi +} + +args=() +out_header="" +expect_out_header=0 +for arg in "$@"; do + if [[ "$expect_out_header" -eq 1 ]]; then + out_header="$arg" + expect_out_header=0 + elif [[ "$arg" == "/Fh" ]]; then + expect_out_header=1 + fi + + args+=("$(map_to_windows_path "$arg")") +done + +"@LCE_WINE_PROGRAM@" "@LCE_FXC_EXE@" "${args[@]}" +status=$? + +if [[ "$status" -eq 0 && -n "$out_header" && -f "$out_header" ]]; then + tmp="${out_header}.tmp.$$" + # normalize CRLF and #endif arguments + LC_ALL=C awk ' + BEGIN { + has_if0 = 0 + has_endif = 0 + inserted = 0 + } + { + sub(/\r$/, "") + + if (index($0, "#if 0") == 1) { + has_if0 = 1 + } + + if (index($0, "#endif") > 0) { + print "#endif" + has_endif = 1 + next + } + + if (has_if0 && !has_endif && !inserted && index($0, "const BYTE ") == 1) { + print "#endif" + inserted = 1 + has_endif = 1 + } + + print $0 + } + END { + if (has_if0 && !has_endif) { + print "#endif" + } + } + ' "$out_header" > "$tmp" && mv "$tmp" "$out_header" +fi + +exit "$status"