Skip to content

Wine Runtime Builds

The wine-build repository provides reproducible macOS Wine runtime build and packaging pipelines for the Bob-Ddong-Iri-Hoyo Launcher. Three runtime lines are currently maintained.

RuntimeBuild CommandOutput
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 is the current WineHQ baseline. WineHQ 11.0 is a separate comparison and compatibility line. CrossOver 26.1.0 applies a separate CrossOver-based patch set and does not bundle the WineHQ-only DWProton extras or HoYoPlay proxy by default.

The build is intended for macOS. Prepare the Homebrew dependencies and shared toolchain first.

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

Each build-all.sh also calls the shared toolchain step. Running the setup commands first makes it easier to separate dependency failures from runtime build failures.

Run the build-all.sh for the runtime you want to produce.

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

For a clean patch replay, run the target runtime’s clean.sh first.

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

clean.sh removes the selected flavor’s source and outputs while keeping shared download caches and toolchains. When validating patch application, prefer a clean build without --keep-source.

The CrossOver line is built with this flow.

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

The WineHQ lines also prepare DWProton extras and the 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 packages include DWProton steam.exe, lsteamclient, the HoYoPlay proxy, GStreamer, macOS msync, Steam CEF compatibility patches, and the HoYoPlay routing backend. CrossOver packages include Steam and object-directory compatibility patches plus the shared process telemetry patch, but not the WineHQ-only extras by default.

The WineHQ and CrossOver lines use the same Steam UI stability baseline for eligible steamwebhelper.exe processes.

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

The arguments are not appended to steam.exe itself. They are also not injected into crashpad handlers or host-resolver helpers. Steam overlay DLL overrides are not part of the Wine patch and should be set explicitly for overlay tests.

The WineHQ lines include a backend that detects HoYoPlay game child processes and sends a route event so the launcher can start the actual game in a separate game prefix. This keeps HoYoPlay login and update state in the launcher prefix while game-specific state such as DXMT, media, HoYoProtect, and msync belongs to the game prefix.

This is not a complete end-user workflow inside Wine alone. The Bob-Ddong-Iri-Hoyo Launcher is responsible for prefix creation, event validation, game profile preparation, actual launch, and process tracking.

WineHQ 11.11 has an investigation note showing higher set_timer and select wineserver request traffic in Eternal Return compared with WineHQ 11.0. The docs treat this as a performance investigation item that may affect CPU and thermal headroom, not as a confirmed regression or release blocker.

Do not leave temporary request counters in a release build. A change should only move into the release patch set after frametime improvement is measured and Steam plus HoYoverse workloads are checked for regressions.

Common override examples:

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

Packaging produces this layout.

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