4クロックで支度しな

脊髄反射で思ったことを書き垂れます。68060とか名乗っときながら4クロックはヌルいとか言わないで。

MinGW64(MSYS2)上のPython3にPyOpenClをインストールする

MinGW64(MSYS2)上のPython3にmatplotlibをインストールする - 4クロックで支度しなの続きみたいなものです。
前回の流れのようにサクッとPyOpenClもインストールできるか?・・・と思ったらハマッたので。

前提条件として、OpenClのCライブラリがMinGWから参照できるように設定してあることを想定します。
例えばAMD APP SDKなら、include/CLフォルダとopencl.dll.aがMinGWGCCから参照可能であるようにしてください(わたしは単純にMinGWのincludeとlibフォルダにコピーしました。真似は勧めません)。

先に、PyOpenClが要求するモジュールであるMaKoをインストールしておきます。

$ pacman -S mingw-w64-x86_64-python3-mako

そして、PyOpenCl(pyopencl-2017.2.2.tar.gz)をhttps://pypi.python.org/pypi/pyopenclからダウンロードします。
作業フォルダに展開して移動し、

$ python3 configure.py --python-exe=python3.exe

これでMakefileが生成されるので、make、・・・と行きたい所ですが、2017年12月26日現在のMSYS2環境上(gcc-7.2.0-1、mingw-w64-x86_64-crt-git 5.0.0.5002.34a7c1c0-1、mingw-w64-x86_64-libwinpthread-git 5.0.0.4850.d1662dc7-1)でpyopencl-2017.2.2.tar.gzのファイルをmakeしようとすると、エラーで終了します。
原因はどうやらMinGW64の進歩とPyOpenClの対応の齟齬のようで、C++で書かれたいくつかのクラスが衝突します。
対処法としては、単純に、src/c_wrapper/mingw-std-threadsフォルダ内の

mingw.mutex.h
mingw.thread.h

を適当にリネームし(アンダースコアでも付けてください)、上記2つのファイル名で空のファイルを作成します。
その後は

$ make
$ make install

で問題なくmake・installが完了します(わたしの環境ではしました)。