From a840db9b418f85776c5a2b419163b2d39929d52d Mon Sep 17 00:00:00 2001 From: magges Date: Sun, 19 Jul 2026 21:34:43 +0200 Subject: [PATCH] release: target GE-Proton10-34 with latest DXVK --- README.md | 24 ++++++++++++------------ flake.nix | 11 +++++++++++ scripts/common.sh | 21 ++++++++++++++++----- scripts/install-to-steam.sh | 4 ++-- scripts/validate-build.sh | 2 +- tests/common_test.sh | 21 +++++++++++++++++++++ 6 files changed, 63 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index c4a3d26..f3f3185 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ This repository builds two custom Proton-GE 11 compatibility tools for Elsword on Linux/Steam: -- `Elsword-GE-11-1` -- `Elsword-GE-11-1+dxvk-git` +- `Elsword-GE-10-34` +- `Elsword-GE-10-34+dxvk-git` It is designed for NixOS and for hosting on a private or public Gitea server with Gitea Actions. ## What this project does -- Builds a Proton-GE 11 / Wine 11 based compatibility tool for Elsword. +- Builds a Proton-GE 10-34 / Wine 10 based compatibility tool for Elsword. - Uses Steam Linux Runtime 4 (`soldier`, appid `4183110`). - Builds DXVK for both x86 and x64. - Produces release archives that other users can install into Steam. @@ -30,11 +30,11 @@ It is designed for NixOS and for hosting on a private or public Gitea server wit ## Variant difference -- `Elsword-GE-11-1` +- `Elsword-GE-10-34` - Proton-GE 11 base - DXVK newest stable release at build time -- `Elsword-GE-11-1+dxvk-git` +- `Elsword-GE-10-34+dxvk-git` - Proton-GE 11 base - DXVK from current upstream Git @@ -127,9 +127,9 @@ nix develop -c ./scripts/create-release-archive.sh After packaging, the main release files are: ```text -dist/Elsword-GE-11-1.tar.zst -dist/Elsword-GE-11-1+dxvk-git.tar.zst -dist/Elsword-GE-11-1-dxvk-git.tar.zst +dist/Elsword-GE-10-34.tar.zst +dist/Elsword-GE-10-34+dxvk-git.tar.zst +dist/Elsword-GE-10-34-dxvk-git.tar.zst dist/SHA256SUMS.txt dist/release-notes.md ``` @@ -137,13 +137,13 @@ dist/release-notes.md If `+` causes issues in a filesystem or upload target, the safe alias is: ```text -Elsword-GE-11-1-dxvk-git.tar.zst +Elsword-GE-10-34-dxvk-git.tar.zst ``` The Steam compatibility tool name still remains exactly: ```text -Elsword-GE-11-1+dxvk-git +Elsword-GE-10-34+dxvk-git ``` ## Install into Steam @@ -151,8 +151,8 @@ Elsword-GE-11-1+dxvk-git Install a built archive: ```bash -./scripts/install-to-steam.sh dist/Elsword-GE-11-1.tar.zst -./scripts/install-to-steam.sh dist/Elsword-GE-11-1+dxvk-git.tar.zst +./scripts/install-to-steam.sh dist/Elsword-GE-10-34.tar.zst +./scripts/install-to-steam.sh dist/Elsword-GE-10-34+dxvk-git.tar.zst ``` Generic installer for release archives, including Flatpak Steam users: diff --git a/flake.nix b/flake.nix index 6e01fbd..5954af5 100644 --- a/flake.nix +++ b/flake.nix @@ -7,9 +7,20 @@ let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; + mingwPthreadRoot = pkgs.runCommand "elsword-ge-mingw-pthread" { } '' + mkdir -p "$out/x32" "$out/x64" + ln -s ${pkgs.pkgsCross.mingw32.windows.mcfgthreads}/lib/libmcfgthread.a "$out/x32/libpthread.a" + ln -s ${pkgs.pkgsCross.mingw32.windows.mcfgthreads}/lib/libmcfgthread.a "$out/x32/libmcfgthread.a" + ln -s ${pkgs.pkgsCross.mingw32.windows.mcfgthreads}/bin/libmcfgthread-2.dll "$out/x32/libmcfgthread-2.dll" + ln -s ${pkgs.pkgsCross.mingwW64.windows.mcfgthreads}/lib/libmcfgthread.a "$out/x64/libpthread.a" + ln -s ${pkgs.pkgsCross.mingwW64.windows.mcfgthreads}/lib/libmcfgthread.a "$out/x64/libmcfgthread.a" + ln -s ${pkgs.pkgsCross.mingwW64.windows.mcfgthreads}/bin/libmcfgthread-2.dll "$out/x64/libmcfgthread-2.dll" + ''; in { devShells.${system}.default = pkgs.mkShell { + MINGW_PTHREAD_ROOT = mingwPthreadRoot; + packages = with pkgs; [ bash binutils diff --git a/scripts/common.sh b/scripts/common.sh index 000fd13..547a59c 100755 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -10,11 +10,11 @@ DXVK_CACHE_DIR="${DXVK_CACHE_DIR:-$CACHE_DIR/dxvk}" METADATA_DIR="${METADATA_DIR:-$DIST_DIR/metadata}" STEAM_COMPAT_DIR_DEFAULT="${STEAM_COMPAT_DIR_DEFAULT:-$HOME/.local/share/Steam/compatibilitytools.d}" UPSTREAM_REPO="${UPSTREAM_REPO:-GloriousEggroll/proton-ge-custom}" -ELSWORD_GE_VERSION="${ELSWORD_GE_VERSION:-11-1}" +ELSWORD_GE_VERSION="${ELSWORD_GE_VERSION:-10-34}" PROTON_TAG="${PROTON_TAG:-GE-Proton${ELSWORD_GE_VERSION}}" PROTON_ASSET="${PROTON_ASSET:-x86_64}" RUNTIME_APPID="${RUNTIME_APPID:-4183110}" -WINE_SERIES="${WINE_SERIES:-Wine 11}" +WINE_SERIES="${WINE_SERIES:-Wine 10}" DXVK_STABLE_TAG_DEFAULT="${DXVK_STABLE_TAG_DEFAULT:-latest}" DXVK_GIT_REF="${DXVK_GIT_REF:-origin/master}" MINGW_PTHREAD_ROOT="${MINGW_PTHREAD_ROOT:-}" @@ -259,7 +259,7 @@ PY resolve_runtime_dll_path() { local arch="$1" local dll="$2" - local compiler result nix_attr store_path + local compiler result nix_attr store_path arch_dir case "$arch" in x86_64) compiler="x86_64-w64-mingw32-g++" ;; @@ -275,9 +275,20 @@ resolve_runtime_dll_path() { if [[ "$dll" == "libmcfgthread-2.dll" ]]; then case "$arch" in - x86_64) nix_attr="pkgsCross.mingwW64.windows.mcfgthreads" ;; - x86) nix_attr="pkgsCross.mingw32.windows.mcfgthreads" ;; + x86_64) + nix_attr="pkgsCross.mingwW64.windows.mcfgthreads" + arch_dir="x64" + ;; + x86) + nix_attr="pkgsCross.mingw32.windows.mcfgthreads" + arch_dir="x32" + ;; esac + result="${MINGW_PTHREAD_ROOT:-}/$arch_dir/$dll" + if [[ -f "$result" ]]; then + printf "%s\n" "$result" + return 0 + fi store_path="$(NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1 nix path-info --impure "nixpkgs#${nix_attr}")" result="$(find "$store_path" -name "$dll" -type f | head -n1 || true)" if [[ -n "$result" && -f "$result" ]]; then diff --git a/scripts/install-to-steam.sh b/scripts/install-to-steam.sh index 543ef39..3e39e70 100755 --- a/scripts/install-to-steam.sh +++ b/scripts/install-to-steam.sh @@ -7,8 +7,8 @@ STEAM_COMPAT_DIR="${STEAM_COMPAT_DIR:-$HOME/.local/share/Steam/compatibilitytool usage() { cat <<'EOF' Usage: - ./scripts/install-to-steam.sh dist/Elsword-GE-11-1.tar.zst - ./scripts/install-to-steam.sh dist/Elsword-GE-11-1+dxvk-git.tar.zst + ./scripts/install-to-steam.sh dist/Elsword-GE-10-34.tar.zst + ./scripts/install-to-steam.sh dist/Elsword-GE-10-34+dxvk-git.tar.zst EOF } diff --git a/scripts/validate-build.sh b/scripts/validate-build.sh index 814d98e..8bbbc14 100755 --- a/scripts/validate-build.sh +++ b/scripts/validate-build.sh @@ -8,7 +8,7 @@ source "$SCRIPT_DIR/common.sh" usage() { cat <<'EOF' Usage: - ./scripts/validate-build.sh dist/Elsword-GE-11-1 Elsword-GE-11-1 + ./scripts/validate-build.sh dist/Elsword-GE-10-34 Elsword-GE-10-34 EOF } diff --git a/tests/common_test.sh b/tests/common_test.sh index a10ae1e..95a0af3 100644 --- a/tests/common_test.sh +++ b/tests/common_test.sh @@ -5,6 +5,13 @@ set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" source "$REPO_ROOT/scripts/common.sh" +if [[ "$ELSWORD_GE_VERSION" != "10-34" || "$PROTON_TAG" != "GE-Proton10-34" ]]; then + printf 'expected GE-Proton10-34 default, got version=%s tag=%s\n' "$ELSWORD_GE_VERSION" "$PROTON_TAG" >&2 + exit 1 +fi + +printf 'Proton base is pinned to %s\n' "$PROTON_TAG" + expected_tag="latest" actual_tag="$(dxvk_tag_for_variant stable)" @@ -14,3 +21,17 @@ if [[ "$actual_tag" != "$expected_tag" ]]; then fi printf 'stable DXVK tag resolves dynamically as %s\n' "$actual_tag" + +flake_file="$REPO_ROOT/flake.nix" + +if ! rg -Fq 'MINGW_PTHREAD_ROOT = mingwPthreadRoot;' "$flake_file"; then + printf 'Nix shell must provide the MinGW pthread compatibility directory\n' >&2 + exit 1 +fi + +if ! rg -Fq '${MINGW_PTHREAD_ROOT:-}/$arch_dir/$dll' "$REPO_ROOT/scripts/common.sh"; then + printf 'runtime dependency lookup must use the Nix shell MinGW directory\n' >&2 + exit 1 +fi + +printf 'Nix shell provides the MinGW pthread compatibility directory\n'