Help us understand the problem. What is going on with this article?

M1 MacでのCrossOver Wine 20.0.2のソースコードのビルドと実行

CrossOver版Wine

WindowsアプリケーションをLinuxやmacOS上で動作させることができるWine というソフトがあります。また、Wineの主要な開発者が関わっているCodeWeavers社が商用版のWineに相当するCrossOverを開発しています。

32bitアプリケーション非対応になったmacOS Catalina以降でも32bit Windowsアプリケーションを実行できるWineは2020年12月28日時点ではCrossOverのみです。llvm/clangベースの特別なコンパイラを使って64bit環境で32bitバイナリを実行する仕組みであるwine32on64を実現しています。

WineはGPLなので、WineをベースとするCrossOverもこちらでソースコードを公開しています。M1 Mac Big SurのRosetta2環境でCrossOver 20.0.2をビルド・実行してみたので開発者の方に向けて手順を解説します。

ビルド環境構築

基本的に~/Download/以下で作業しています。

$ cd ~/Downloads

(20201229追記) 最初にCommand line tools for Xcodeをインストールしてください。
こちらが参考になります。

Rosetta2でx86_64用のhomebrewをインストールしてください。
例えばこちらが参考になります。

homebrewでcmake、bison、flex、mingw-w64、pkgconfig、freetypeをインストールしbisonやflexにパスを通します。

$ brew install cmake bison flex mingw-w64 pkgconfig freetype
$ export PATH="/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH"
$ export LDFLAGS="-L/usr/local/opt/flex/lib -L/usr/local/opt/bison/lib"
$ export CPPFLAGS="-I/usr/local/opt/flex/include"

CrossOverのソースのダウンロード

CrossOver 20.0.0のみにwine32on64に必要なllvm/clangが入っているようなので、20.0.020.0.2の両方をダウンロードし展開してください。

$ tar xvf crossover-sources-20.0.0.tar
$ mv sources/ sources-20.0.0
$ tar xvf crossover-sources-20.0.2.tar
$ mv sources/ sources-20.0.2

必要な修正

まず、wine/include/distversion.hが抜けています。

/* ---------------------------------------------------------------
*   distversion.c
*
* Copyright 2013, CodeWeavers, Inc.
*
* Information from DISTVERSION which needs to find
* its way into the wine tree.
* --------------------------------------------------------------- */

#define WINDEBUG_WHAT_HAPPENED_MESSAGE "This can be caused by a problem in the program or a deficiency in Wine. You may want to check <a href=\"http://www.codeweavers.com/compatibility/\">http://www.codeweavers.com/compatibility/</a> for tips about running this application."

#define WINDEBUG_USER_SUGGESTION_MESSAGE "If this problem is not present under Windows and has not been reported yet, you can save the detailed information to a file using the \"Save As\" button, then <a href=\"http://www.codeweavers.com/support/tickets/enter/\">file a bug report</a> and attach that file to the report."

現時点でbrewでインストールされるgccは10ですが、CrossOver 20.0.2はgcc10未対応なので次のパッチも必要です。
- https://www.winehq.org/pipermail/wine-cvs/2020-June/145081.html)
- https://source.winehq.org/git/wine.git/commitdiff/cc7f698b8245a48669d248569e7589ff824f2c70)
- https://source.winehq.org/git/wine.git/commitdiff/ea032bb7f8daddfe308f86f52c54db5f657b658a
- https://source.winehq.org/git/wine.git/commitdiff/1d785798605c01dcfc8a2f9f6ecc24bc21351029
- https://source.winehq.org/git/wine.git/commitdiff/4a91eb362666b3af549c48b95e093051756628e0
- https://source.winehq.org/git/wine.git/commitdiff/da21c305164c3e585e29e20242afc5a31f91989f
- https://source.winehq.org/git/wine.git/commitdiff/bc51c5d589de709e1d393b58b0cc5985c78061ac
- https://source.winehq.org/git/wine.git/commitdiff/44e69405adcdc98d6b0777e6c0acb2697d776ef8

また、dlls/winecoreaudio.drv/authorization.mのCoreAudio_request_capture_authorizationでコンパイラのclang-8が落ちるのを回避する修正や,
dlls/winemac.drv/cocoa_event.mの107行目の
NSParameterAssertでコンパイル時にエラーが出ることへの修正や、—without-vulkanなのにdlls/winvulkan/でエラーが出るのを修正する必要があります。

authorization.mはHAVE_AVFOUNDATION_AVFOUNDATION_Hを未定義とした雑な修正で、NSParameterAssertはコメントアウトする雑な修正ですが、以上の内容を統合したbuild20201227.patchを用意したのでこれをダウンロードして当ててください。

$ cd sources-20.0.2
$ patch -p1 < ../build20201227.patch

llvmとclangのビルド

wine32on64用のllvm/clangをビルドしてパスを通します。ビルドにかなり時間がかかります。

llvm

$ cd ../sources-20.0.0

$ cd clang/llvm
$ mkdir build
$ cd build
$ cmake ../
$ make
$ cd bin
$ export PATH="$(pwd):$PATH"
$ cd ../../../..

clang

$ cd clang/clang
$ mkdir build
$ cd build
$ cmake ../
$ make
$ cd bin
$ export PATH="$(pwd):$PATH"
$ cd ../../../..

CrossOver Wineのビルド

Windows 32bitアプリと64bitアプリの実行環境を共存できるようにするためには、最初にwine64をビルドした後、wine64のビルド環境を参照するオプション(--with-wine64)を指定してwine32on64をビルドする必要があります。

/usr/local/crossover-20.0.2にインストールするようにしていますが、別なディレクトリでも問題ないはずです。

こちらもビルドにかなり時間がかかります。

wine64

$ cd ../sources-20.0.2

$ cd wine
$ export PATH="$(pwd):$PATH"
$ export MACOSX_DEPLOYMENT_TARGET=10.14

$ mkdir build64
$ cd build64

$ CC="clang" CXX="clang++" MACOSX_DEPLOYMENT_TARGET=10.14 ../configure --enable-win64 --disable-winedbg --without-x --without-vulkan --disable-mscms --prefix=/usr/local/crossover-20.0.2

$ make

$ sudo mkdir /usr/local/crossover-20.0.2
$ sudo chown "$USER":admin /usr/local/crossover-20.0.2
$ make install

$ cd ..

wine32on64

$ cd ..

$ mkdir build32
$ cd build32

$ CC="clang" CXX="clang++" MACOSX_DEPLOYMENT_TARGET=10.14 ../configure --enable-win32on64 --with-wine64=../build64 --disable-winedbg --without-x --without-vulkan --disable-mscms --prefix=/usr/local/crossover-20.0.2

$ make

$ make install

wineの実行とwinetricks等の実行環境構築

最初にwine64を実行しないと~/.wine/を32bit64bit両対応にならないはずなので、wine64を先に実行してください。その後はWindows 32bitバイナリならばwine32on64を使い、Windows 64bitバイナリならばwine64を使ってください。

7zipのx86版とx64版が正常に動作することは確認しています。

winecfg

$ export PATH=/usr/local/crossover-20.0.2/bin:$PATH
$ wine64 winecfg

winetricks

winetricksをダウンロードしてください。

$ ./winetricks

日本語フォントを入れるならば

$ ./winetricks fonts fakejapanese

Mono

monoが必要な場合はこちらよりダウンロードして

$ wine32on64 msiexec /i wine-mono-5.1.1-x86.msi

(.netアプリはwine32on64でないと起動しないようです)

問題点

windowsアプリ終了後wineが落ちたようなエラーが出ます。

参考ページ

次のページを参考にビルドしました。
- https://gist.github.com/Alex4386/4cce275760367e9f5e90e2553d655309
- https://gist.github.com/sarimarton/471e9ff8046cc746f6ecb8340f942647
- https://wiki.winehq.org/Building_Wine

おまけ

homebrew経由でもインストール可能なビルド済みCrossOver 19.0.2がこちらにあるようです。
https://github.com/Gcenx/homebrew-wine

asfdrwe
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