Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a840db9b41 | ||
|
|
43099ccbd4 |
@@ -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 stable/latest release tag
|
||||
- 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:
|
||||
|
||||
@@ -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
|
||||
|
||||
+16
-5
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
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)"
|
||||
|
||||
if [[ "$actual_tag" != "$expected_tag" ]]; then
|
||||
printf 'expected stable DXVK tag %s, got %s\n' "$expected_tag" "$actual_tag" >&2
|
||||
exit 1
|
||||
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'
|
||||
Reference in New Issue
Block a user