LoginSignup
2
2

More than 5 years have passed since last update.

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

Posted at

※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を起動してビルド。
2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2