콘텐츠로 이동

Wine 런타임 빌드

wine-build 저장소는 밥똥이리호요 런처에서 사용하는 macOS용 Wine 런타임을 재현 가능하게 만들기 위한 빌드 파이프라인입니다. 현재 유지되는 런타임은 세 가지입니다.

런타임빌드 명령결과 경로
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 기반 패치셋을 적용하는 별도 라인이며, 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 replay가 필요하면 대상 런타임의 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 라우팅 backend를 포함합니다. CrossOver 패키지는 Steam과 object-directory 호환 패치, 공용 process telemetry 패치를 포함하지만, WineHQ 전용 extras는 기본 포함 대상이 아닙니다.

WineHQ 계열과 CrossOver 계열은 Steam UI 안정성을 위해 eligible steamwebhelper.exe 프로세스에 다음 인자를 붙이는 기준을 사용합니다.

--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에서는 이터널리턴 실행 중 set_timer와 select 관련 wineserver 요청이 WineHQ 11.0보다 높게 관찰된 기록이 있습니다. 현재 문서는 이것을 확정된 regression이나 release blocker로 보지 않고, CPU와 발열 여유를 줄일 수 있는 성능 조사 항목으로 다룹니다.

릴리즈 빌드에는 request counter 같은 임시 측정 코드를 남기지 않아야 합니다. 프레임타임 개선이 확인되고 Steam, HoYoverse workload에서 회귀가 없는 경우에만 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