M1 MacでのWine 6.1のビルド


Wine

WindowsアプリケーションをLinuxやmacOS上で動作させることができるWineの開発版6.1をM1 MacのRosetta2環境でビルド&実行してみました。

以前
https://qiita.com/asfdrwe/items/d8e49320c2ab6c980fdc
で解説した6.0-rc5では

display: macdrv_init_display_devices No GPUs detected

と出て正常に動作しないのでパッチが必要でしたが、6.1で修正されたようなのでそのままビルドしても問題ありません。

Brendan Shanks (4):
      winemac.drv: Use Metal to get a display's GPU info if possible.

Wineビルド環境構築

準備

~/Download/以下で作業していきます。

$ cd ~/Downloads

未インストールの場合Command line tools for XcodeとRosetta2上で動作するx86_64用homebrewをインストールして、Rosetta2環境下で作業します。

$ xcode-select --install
$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ arch -x86_64 /bin/bash

参考サイト
https://qiita.com/royroy/items/338362362de73a94fc0c
https://qiita.com/shira-shun/items/0f6213f4923cb5544367
https://zenn.dev/ress/articles/069baf1c305523dfca3d

homebrewから必要なものをインストール

homebrew経由でビルドに必要なbisonやflex他、SSL関係のgnutlsやVulkan→Metalの変換を行うMoltenVKなどライブラリやツールもインストールし環境変数の設定をします(一部不要なのがあるかも)。

$ brew install cmake ninja bison flex freetype mingw-w64 gnutls libtiff krb5 FAudio lcms2 gstreamer gst-plugins-base sane-backends libusb libgsm libgphoto2 molten-vk vulkan-headers spirv-cross spirv-tools glslang

$ export PATH="/usr/local/opt/net-snmp/sbin:/usr/local/opt/net-snmp/bin:/usr/local/opt/icu4c/sbin:/usr/local/opt/icu4c/bin:/usr/local/opt/sqlite/bin:/usr/local/opt/krb5/sbin:/usr/local/opt/krb5/bin:/usr/local/opt/[email protected]/bin:/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH"

$ export GUILE_LOAD_PATH="/usr/local/share/guile/site/3.0"
$ export GUILE_LOAD_COMPILED_PATH="/usr/local/lib/guile/3.0/site-ccache"
$ export GUILE_SYSTEM_EXTENSIONS_PATH="/usr/local/lib/guile/3.0/extensions"
$ export GUILE_TLS_CERTIFICATE_DIRECTORY=/usr/local/etc/gnutls/

SPIRV-Headers

vkd3dのビルドに必要なSPIRV-Headersがhomebrewにないようなので手動で入れます。

$ git clone https://github.com/KhronosGroup/SPIRV-Headers.git
$ cd SPIRV-Headers
$ mkdir build
$ cd build
$ cmake ..
$ make install
$ cd ../..

SPIRV-Headersでインストールされるファイルは/usr/local/include/spirvと/usr/local/lib/cmake/SPIRV-Headersに入るので、SPIRV-Headersをアンインストールするときは手動で消してください。

vkd3d

Vulkan経由でDirectX12を動かすvkd3dをビルドします。/usr/local/opt/vkd3d-1.2にインストールします。

https://dl.winehq.org/vkd3d/source/
からvkd3d-1.2.tar.xzをダウンロードし展開してビルドしてインストールしvkd3dのpkgconfigのパスを通します。

$ tar xvfJ vkd3d-1.2.tar.xz
$ cd vkd3d-1.2
$ ./configure --prefix=/usr/local/opt/vkd3d-1.2 --with-spirv-tools
$ make
$ make install
$ cd ..
$ export PKG_CONFIG_PATH="/usr/local/opt/vkd3d-1.2/lib/pkgconfig/"

Wineのビルド

https://www.winehq.org/
からwine-6.1.tar.xzをダウンロードし展開します。/usr/local/opt/wine-6.1にインストールします。

$ tar xvfJ wine-6.1.tar.xz
$ cd wine-6.1

configureスクリプトに対して、Linux用と思われるinotify,v4l2,pulse,oss,udev,capiは無効にしています。Xはなくてもビルドできるので無効にしています。QuickTimeはビルドに必要なものがわからないで無効にしています。
オプションを指定してconfigureを実行し、ビルドとインストールを行います。

$ ./configure --prefix=/usr/local/opt/wine-6.1 --enable-win64 --without-quicktime --without-x --without-inotify --without-v4l2 --without-pulse --without-oss --without-udev --without-capi
$ make
$ make install

Wineの実行

wine64のパスを通してWineの設定ツールのwinecfgを実行します。

$ export PATH="/usr/local/opt/wine-6.1/bin:$PATH"
$ wine64 winecfg

winetricks

homebrewにwinetricksがあるのでインストールし、念のためhomebrewからインストールされるunzipへのパスを通します。

$ brew install winetricks
$ export PATH="/usr/local/opt/unzip/bin:$PATH"

環境変数のWINEにwine64を指定してwinetricksを実行します。

$ export WINE=/usr/local/opt/wine-6.1/bin/wine64
$ winetricks

例えば日本語フォントに関しては次のようにipamonaをインストールして設定できます。

$ winetricks fonts ipamona fakejapanese_ipamona

動作確認

7zipのx64版が動作するのを確認しています。インストーラーがx86のようなので、msi版インストーラをダウンロードして、msiexecコマンドでインストールしてください。

$ wine64 msiexec /i 7z1900-x64.msi

notepad++もインストーラが32bitですが、ポータブル版は動くはずです。

これ以外でも64bitアプリなのにインストーラーが32bitのものが多くインストールできないものが多いです。

PSPエミュレータのppssppは起動直後に落ちます。

こちらのビルドにミスがあるのかもしれませんが、現時点(2021/2/6)では素のWineはLinux上でのWineと違って正常に動作するのが少ないです。

補足

quarantine拡張属性

ネットからダウンロードしたexeを実行する際に、『開発元を検証できないため開けません』という警告が出ます。

セキュリティ上あまり好ましくないのですが

$ xattr -d com.apple.quarantine xxx.exe

とすればquarantine拡張属性を消せるので警告がでなくなります。

参考サイト
https://news.mynavi.jp/article/osxhack-187/
https://infornography.blue/mac/remove-quarantine-attribute/

Wine 6.1のビルド済みバイナリ

https://github.com/Gcenx/homebrew-wine
からgcenx氏ビルドの6.1(2021/2/6時点)がhomebrew経由でインストールできます。こちらのビルドと微妙にオプションが違っていますが(krb5等)。

gcenx氏のリポジトリを追加(tap)

$ brew tap gcenx/wine

インストール

$ brew install --cask --no-quarantine gcenx-wine-devel