6
Help us understand the problem. What are the problem?

posted at

updated at

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

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
も参考にどうぞ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
6
Help us understand the problem. What are the problem?