M1 Macでのオープンソース版CrossOver 21.2.0のビルドと実行


CrossOver

CrossOverはWindowsバイナリをLinuxやmacOS上で動作させることができる商用ソフトです。GPLのWineをベースとしているのでソースコードが公開されています。

CrossOverは、通常のWineと異なり、llvm/clangベースの特別なコンパイラを使って64bit環境で32bitバイナリを実行するwine32on64により32bit Windowsバイナリと64bit Windowsバイナリの両方を動かすことができます。

CrossOver 21.2.0のビルド手順は以前の21.0.0の解説
https://qiita.com/asfdrwe/items/eae7a507e4bc6d37a64a
とほぼ同様です。M1 mac miniのmacOS Monterey 12.3で確認しています。

ビルド環境構築

~/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/zsh

余計なものが入っているとwine32on64のビルドに失敗したりうまく動かなくなるようなので、homebrewでインストールするものは次のものだけにします。他はアンインストールしておいてください。CFLAGSやLDFLAGSやPKG_CONFIG_PATH等の環境設定も外してください(unset CFLAGS CPPFLAGS LDFLAGS PKG_CONFIG_PATH)。

$ brew install cmake pkg-config bison flex mingw-w64 winetricks freetype

ビルドに必要な環境変数の設定をします。

$ export PATH="/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH"
$ export CC=clang
$ export CXX=clang++
$ export MACOSX_DEPLOYMENT_TARGET=10.14

CrossOver 21.2.0のダウンロード

https://www.codeweavers.com/crossover/source
よりcurlでダウンロードしtarで展開しsoucesに移動します。

$ curl -o crossover-sources-21.2.0.tar.gz https://media.codeweavers.com/pub/crossover/source/crossover-sources-21.2.0.tar.gz
$ tar xvfz crossover-sources-21.2.0.tar.gz
$ cd sources

llvmのビルド

llvmをビルドしてパスを通します。macOS Monterey 12.3ではpython2.7が削除されたので、llvmのcmake時にpython3を利用する設定が必要です。

$ cd clang/llvm
$ mkdir build
$ cd build
$ cmake ../ -Dpython=ON -DPYTHON_EXECUTABLE=$(which python3)
$ make -j 3
$ cd bin
$ export PATH="$(pwd):$PATH"
$ cd ../../../..

clangのビルド

clangをビルドしてパスを通します。同様にcmake時にpython3を利用する設定をします。

$ cd clang/clang
$ mkdir build
$ cd build
$ cmake ../ -Dpython=ON -DPYTHON_EXECUTABLE=$(which python3)
$ make -j 3
$ cd bin
$ export PATH="$(pwd):$PATH"
$ cd ../../../..

CrossOverのビルド

ビルドに必要なinclude/distversion.hが抜けているので、パッチを当ててください。

$ curl -o distversion.patch https://gist.githubusercontent.com/asfdrwe/f5466c0a8af448a9464732d93f774521/raw/ad8ee996c23b44d1f56aed3b58215973af5c166b/distversion.patch
$ patch -p1 < distversion.patch

wineに移動します。

$ cd wine

wine64のビルド

環境変数を設定し64bit Windowsバイナリ用のwine64をビルドして
/usr/local/opt/crossover-21.2.0以下にインストールします。

$ mkdir build64
$ cd build64
$ ../configure --prefix=/usr/local/opt/crossover-21.2.0 --enable-win64 --without-x --disable-winedbg --disable-tests
$ make -j 3
$ make install
$ cd ../..

wine32on64のビルド時にdlls/winecoreaudio.drv/authorization.mでコンパイラのclangが落ちるのを回避する修正とbcrypt/macos.cのC_ASSERTが失敗するのを修正するパッチを当ててください。

$ curl -o bcrypt_coreaudio.patch https://gist.githubusercontent.com/asfdrwe/d67a8822c678bb7d7d008cb4f4fc86d1/raw/d3e24d37846cdd17f26ed6f266519312138239fc/bcrypt_coreaudio.patch
$ patch -p1 < bcrypt_coreaudio.patch

wine32on64のビルド

WineのWOW64に対応させて32bit Windowsバイナリと64bit Windows
バイナリ両対応となるようにwine32on64をビルドし、
/usr/local/opt/crossover-21.2.0以下にインストールします。make installではmsvcrt関係のエラーが出るので、make install-libでインストールします。

$ cd wine
$ mkdir build32
$ cd build32
$ ../configure --prefix=/usr/local/opt/crossover-21.2.0 --enable-win32on64 --with-wine64=../build64 --without-x --disable-winedbg --disable-tests
$ make -j 3
$ make install-lib
$ cd ../../..`

CrossOverの実行

設定

実行に必要な環境変数を設定します。

$ export PATH=/usr/local/opt/crossover-21.2.0/bin:$PATH
$ export WINE=wine64

先にwine64を実行してWineのWOW64環境対応の~/.wine/を作成してください。

$ wine64 winecfg

winetricksで日本語フォントをインストールします。

$ winetricks fonts fakejapanese

Monoが入っていないので、必要ならばWine-Monoよりインストールしてください。

$ curl -o wine-mono-6.4.0-x86.msi http://dl.winehq.org/wine/wine-mono/6.4.0/wine-mono-6.4.0-x86.msi
$ wine64 msiexec /i wine-mono-6.4.0-x86.msi

動作確認したもの

7zip

7zipは問題なく動作します。

PPSSPP

PSPエミュレータのPPSSPPは32bit版も64bit版もOpenGLバックエンドでのみ動作します。DirectX9バックエンドとDirectX11バックエンドは動作しないようです。PPSSPP自作ソフトストアにあるCave Storyで動作確認しています。

GUIとビルド済みバイナリ

GUIはGcenx氏によるWineskinServerがあります。現時点(2022/3/26)ではCrossOver 21.0.0のビルド済みバイナリが同じ作者から配布されています。

WineskinServerについては
https://pc.watch.impress.co.jp/docs/column/nishikawa/1332743.html
も参考にどうぞ。