Posted at

LLVMをVisual Studio 2017でコンパイルする

More than 1 year has passed since last update.

※Visual Studioのコンパイラとしてclangを使いたい人向けではありません。

先行文献:LLVMに実行可能コードの生成をまかせたいの方が詳しく書かれていますが、ハマったところも含めて書きます。


実験環境


  • Win7, Visual Studio 2017インストール済み

  • Visual Studio 2017でC++をコンパイルしたことがある

  • cygwinがインストールされている



  1. まずllvmのソースを入手します。素直にアーカイブを入手した方が良いかもしれません。

    $ git clone https://github.com/llvm-mirror/llvm.git




  2. CMakeをインストールします。

    cygwin向けには3.5までしか存在しないようで、これはVisual Studio 2017に対応していないので、Windows用バイナリCMake3.8.2をインストールしました。



  3. bin/cmake-gui.exeを実行します。


  4. configureでVisual Studio 15 2017 Win64を選択します。


  5. 下の空欄にhost=x64と入力します。


  6. そのまま進んだところ、大量のエラーが出ました。


  7. LLVM+ClangをVisual C++でビルドしてみた。を参考に、LLVM_DEFAULT_TARGET_TRIPLEx86_64-pc-windows-msvc19に変更します。


  8. cygwinのPythonでは/cygdrive/d/……/LLVMBuild.txt does not existと怒られてしまうため、stackoverflowの当該質問を参考に、Windows用Python2.7をインストールします


  9. Getting Started with the LLVM System using Microsoft Visual Studioを(今更)見てみるとGnuWin32 toolsが必要らしいのでインストールします。


  10. その後パスをいじったりと悪戦苦闘しましたが、環境変数Pathの中で、Windows用Python2.7.exeをcygwinのそれより手前に置いて、CMake-guiを一旦閉じてから再び実行し、今までの手順をやり直すとうまくいきました。


  11. 最後にGenerateを押すとVisual Studio向けのファイルが作成されます。


  12. Open Projectを押すとVisual Studioが起動するので、普通にビルドします。とても時間がかかります。


cygwinのパスが通っていると、CMakeがcygwinのPythonを選んでしまい、/cygdrive/d/……などのパスを生成し、そんなディレクトリはないと怒られてしまうようです。環境変数Pathからcygwinを消したり、LIT_COMMANDを手で書き換えたり悪戦苦闘したのですが、CMake-guiをいったん閉じて再び実行することが重要だったようで、そうしたら自動で正しい方のWindows用Pythonを選んでくれました。


確認環境


  • Win10, Visual Studio 2017インストール済み

  • Visual Studio 2017でC++をコンパイルしたことがある

  • Bash on Windowsがインストールされている

以下の方法でうまくいきました。GnuWin32 toolsは必要ないのか……?


  1. ソースコードを入手。

  2. CMake3.8.2をzipでダウンロード。(BoWのaptから持ってこれるCMakeは3.5と古いので)

  3. Python2.7.13をインストール。

  4. CMake-guiを実行、Visual Studio 15 2017 Win64を選択、host=x64と入力。


  5. LLVM_DEFAULT_TARGET_TRIPLEx86_64-pc-windows-msvc19に変更。

  6. Generateを押してファイルを作成。

  7. Open ProjectからVisual Studioを起動してビルド。