CrossOver
CrossOverはWindowsバイナリをLinuxやmacOS上で動作させることができる商用ソフトです。GPLのWineをベースとしているのでソースコードが公開されています。
CrossOverは、通常のWineと異なり、llvm/clangベースの特別なコンパイラを使って64bit環境で32bitバイナリを実行するwine32on64により32bit Windowsバイナリと64bit Windowsバイナリの両方を動かすことができます。
CrossOver 21.0.0のビルド手順は以前の20.0.4の解説
https://qiita.com/asfdrwe/items/eae7a507e4bc6d37a64a
とほぼ同様ですが、細かい違いがあるので改めて説明します。
追記(2021/12/28,2021/12/29微妙に修正)
M1 mac miniでmacOS Monterey 12.1 + Xcode 13.2.1だとwine32on64の
dlls/ntdll/unix/signal_x86_32on64.cのビルドでコンパイラが落ちて
うまくビルドできないようです。crossover 21.1.0でも同様です。
ビルド環境構築
~/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でインストールするものは次のものだけにします。他はアンインストールしておいてください。gnutlsを入れてビルドするとおそらくwine32on64が動作しなくなります。
$ 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.0.0のダウンロード
https://www.codeweavers.com/crossover/source
よりcurlでダウンロードしtarで展開しsoucesに移動します。
$ curl -o crossover-sources-21.0.0.tar.gz https://media.codeweavers.com/pub/crossover/source/crossover-sources-21.0.0.tar.gz
$ tar xvfz crossover-sources-21.0.0.tar.gz
$ cd sources
llvmのビルド
llvmをビルドしてパスを通します。
$ cd clang/llvm
$ mkdir build
$ cd build
$ cmake ../
$ make -j 3
$ cd bin
$ export PATH="$(pwd):$PATH"
$ cd ../../../..
注: make -jにするとmac mini メモリ8GBでは途中でメモリが足らなくなってビルドに失敗します。
clangのビルド
clangをビルドしてパスを通します。
$ cd clang/clang
$ mkdir build
$ cd build
$ cmake ../
$ 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
また、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
wineに移動します。
$ cd wine
wine64のビルド
環境変数を設定し64bit Windowsバイナリ用のwine64をビルドして
/usr/local/opt/crossover-21.0.0以下にインストールします。
$ mkdir build64
$ cd build64
$ ../configure --prefix=/usr/local/opt/crossover-21.0.0 --enable-win64 --without-x --disable-winedbg --disable-tests
$ make -j 3
$ make install
$ cd ..
wine32on64のビルド
WineのWOW64に対応させて32bit Windowsバイナリと64bit Windows
バイナリ両対応となるようにwine32on64をビルドし、
/usr/local/opt/crossover-21.0.0以下にインストールします。make install
ではmsvcrt関係のエラーが出るので、make install-lib
でインストールします。
$ mkdir build32
$ cd build32
$ ../configure --prefix=/usr/local/opt/crossover-21.0.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.0.0/bin:$PATH
$ export WINE=wine64
先にwine64
を実行してWineのWOW64環境対応の~/.wine/を作成してください。
$ wine64 winecfg
一部文字化けするのでwinetricksで日本語フォントをインストールします。
$ winetricks fonts fakejapanese
Monoが入っていないので、必要ならばWine-Monoよりインストールしてください。
$ curl -o wine-mono-6.3.0-x86.msi http://dl.winehq.org/wine/wine-mono/6.3.0/wine-mono-6.3.0-x86.msi
$ wine64 msiexec /i wine-mono-6.3.0-x86.msi
動作確認したもの
7zip
7zipは32bit版も64bit版も問題なく動作します。
PPSSPP
PSPエミュレータのPPSSPPは32bit版も64bit版もOpenGLバックエンドとDirectX9バックエンドで動作します。DirectX11バックエンドは動作しないようです。PPSSPP自作ソフトストアにあるCave Storyで動作確認しています。
なお、homebrewでmolten-vkやvulkan-headerをインストールし、
$ brew install molten-vk vulkan-headers
wine64ビルド時に
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib../configure --prefix=/usr/local/opt/crossover-21.0.0 --enable-win64 --without-x --disable-winedbg --disable-tests
のようにvulkanを使えるようにビルドすればVulkanバックエンドが動作します。ただ、自分が試した範囲では、DirectX 9バックエンドが動かなくなり、DirectX11バックエンドは動作しないままです。winetricksでDXVKを入れてもDirectX 9バックエンドもDirectX11バックエンドも動きませんでした。
GUIとビルド済みバイナリ
GUIはWineskinServerがあります。現時点(2021/8/7)ではCrossOver 20.0.2のビルド済みバイナリも同じ作者から配布されています。
2021/12/4 追記:
Gcenx氏のCrossOver 21.0.0のビルド済みバイナリはこちらです。
WineskinServerについては
https://pc.watch.impress.co.jp/docs/column/nishikawa/1332743.html
も参考にどうぞ。