コンテンツにスキップ

Wine ランタイムのビルド

wine-build リポジトリは、バブトンイリホヨ ランチャーで使用する macOS 向け Wine ランタイムを再現可能にビルドしてパッケージングするためのパイプラインです。 現在は 3 つのランタイム系列を維持しています。

ランタイムビルドコマンド出力先
wine-winehq-11.11./scripts/winehq-11.11/build-all.shartifacts/wine-winehq-11.11/wine-winehq-11.11
wine-winehq-11./scripts/winehq-11/build-all.shartifacts/wine-winehq-11/wine-winehq-11
wine-crossover-26.1.0./scripts/crossover-26.1.0/build-all.shartifacts/wine-crossover-26.1.0/wine-crossover-26.1.0

WineHQ 11.11 は現在の WineHQ 系列の基準ビルドです。 WineHQ 11.0 は比較と互換性のための別ラインです。 CrossOver 26.1.0 は CrossOver ベースの独立した patch set を適用する別ラインで、WineHQ 専用の DWProton extras や HoYoPlay proxy は既定では含めません。

macOS でのビルドを前提にしています。 まず Homebrew の依存関係と共有 toolchain を準備します。

Terminal window
./scripts/common/install-brew-deps.sh
./scripts/common/fetch-toolchain.sh

各 build-all.sh も共有 toolchain の準備を呼び出します。 初回ビルド時に上のコマンドを先に実行しておくと、依存関係の問題とランタイムビルドの問題を切り分けやすくなります。

対象ランタイムに合わせて build-all.sh を実行します。

Terminal window
./scripts/winehq-11.11/build-all.sh
./scripts/winehq-11/build-all.sh
./scripts/crossover-26.1.0/build-all.sh

patch をきれいに再適用したい場合は、対象ランタイムの clean.sh を先に実行します。

Terminal window
./scripts/winehq-11.11/clean.sh
./scripts/winehq-11.11/build-all.sh

clean.sh は選択した flavor の source と output を削除しますが、共有 download cache と toolchain は残します。 patch 適用状態を検証する場合は、--keep-source を使わず clean build を行うのが無難です。

CrossOver 系列は次の流れでビルドされます。

common/fetch-toolchain.sh
crossover-26.1.0/fetch-source.sh
crossover-26.1.0/apply-patches.sh
crossover-26.1.0/configure.sh
common/build.sh
common/install.sh
common/package.sh

WineHQ 系列では DWProton extras と HoYoPlay proxy も準備します。

common/fetch-toolchain.sh
BDIH-HelperProgram/hoyoplay-proxy/build.sh
winehq-*/fetch-source.sh
winehq-*/apply-patches.sh
winehq-*/fetch-dwproton-source.sh
winehq-*/prepare-dwproton-lsteamclient.sh
winehq-*/configure.sh
common/build.sh
winehq-*/build-proton-steam.sh
common/install.sh
common/package.sh

WineHQ パッケージには DWProton steam.exe、lsteamclient、HoYoPlay proxy、GStreamer、macOS msync、Steam CEF 互換パッチ、HoYoPlay routing backend が含まれます。 CrossOver パッケージには Steam と object-directory の互換パッチ、共有 process telemetry パッチが含まれますが、WineHQ 専用 extras は既定では含まれません。

WineHQ 系列と CrossOver 系列は、対象となる steamwebhelper.exe プロセスに次の Steam UI 安定化引数を適用します。

--no-sandbox --in-process-gpu --disable-gpu

この引数は steam.exe 本体には付けません。 また、crashpad handler と host-resolver helper には注入しません。 Steam overlay DLL override は Wine patch の一部ではないため、overlay 比較が必要な場合は別途指定します。

WineHQ 系列には、HoYoPlay が起動しようとするゲーム child process を検出し、ランチャーが別の game prefix で実際のゲームを起動できるよう route event を送る backend が含まれます。 この構造では、HoYoPlay のログインと更新状態を launcher prefix に置き、DXMT、media、HoYoProtect、msync などのゲーム別状態を game prefix に分離します。

これは Wine だけで完結するエンドユーザー向けフローではありません。 バブトンイリホヨ ランチャーが prefix 作成、イベント検証、game profile 準備、実際の起動、プロセス追跡を担当する必要があります。

WineHQ 11.11 では、Eternal Return 実行中に WineHQ 11.0 より高い set_timer と select の wineserver request が観測された記録があります。 この文書では、これを確定した regression や release blocker ではなく、CPU と発熱余裕に影響し得る性能調査項目として扱います。

リリースビルドに一時的な request counter を残してはいけません。 frametime 改善が測定され、Steam と HoYoverse workload で回帰がないことを確認した後にだけ、変更を release patch set に入れる方針です。

共通 override の例です。

Terminal window
BUILD_NAME=winehq-11-test ./scripts/winehq-11/build-all.sh
BREW_PREFIX="$(brew --prefix)" ./scripts/crossover-26.1.0/build-all.sh
BUNDLE_PROTON_EXTRAS=0 ./scripts/winehq-11/build-all.sh
BUNDLE_DXMT_RUNTIME=1 \
DXMT_RUNTIME_DIR=/path/to/dxmt-runtime \
./scripts/winehq-11.11/build-all.sh

パッケージング結果は次の構造で生成されます。

artifacts/wine-$BUILD_NAME/
wine-$BUILD_NAME-build/
wine-$BUILD_NAME-install/
wine-$BUILD_NAME/
wine-$BUILD_NAME.tar.gz
wine-$BUILD_NAME.tar.gz.sha256
wine-$BUILD_NAME.json