2014年03月06日

LLVM 3.5(git リポジトリ)をMS VC++でビルド

最新の LLVM 3.5(2014/3/6 の git リポジトリ)を MS Windows 環境でビルドしてみました。



・必要なツールのインストール

- VisualStudio 2012
今回はビルドに VC++ 2012 を使用します。
- CMake
ソリューションファイルを生成するために必要です。
http://www.cmake.org/files/v2.8/cmake-2.8.12.2-win32-x86.exe
全て default でインストールしました。
- Python
リグレッションテストを省略するならば不要そうですが、後述するエラーが出たので、インストールしておきます。
http://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi
全て default でインストールしました。

・ビルド手順

(1) 空白を含まないパスに llvm と clang のソースコードを展開

今回は C:\work\llvm 以下に git で取得しました。
(llvm\tools 以下に clang のソースコードが必要な点に注意してください。)
c:\work\llvm>git clone http://llvm.org/git/llvm.git
c:\work\llvm>cd llvm
c:\work\llvm\llvm>git log
commit 907423f7db7b9537cc3101398fc981f140fef348
Author: Owen Anderson 
Date:   Thu Mar 6 01:51:01 2014 +0000
...
c:\work\llvm\llvm>cd tools
c:\work\llvm\llvm\tools>git clone http://llvm.org/git/clang.git
c:\work\llvm\llvm\tools>cd clang
c:\work\llvm\llvm\tools\clang>git log
commit 70e2f181f57a3cfc22575524d90f83f408ff6967
Author: Rafael Espindola 
Date:   Thu Mar 6 01:57:34 2014 +0000
...
(2) LLVM.sln ファイルの生成
C:\work\llvm\build のような書き込み可能なフォルダを適当に作っておきます。(後述するように、かなりのディスク容量が必要ですので、15GB 程度の空き容量を見ておいた方が良さそうです。少なくとも 9GB では足りませんでした。)
CMake GUI を起動し、
Where is the source code: C:\work\llvm\llvm
Where to build the binaries: C:\work\llvm\build
を指定して「Configure」ボタンを押します。
いろいろ選択できるようですが、今回は要件に「You will need Visual Studio 2012 or higher.」と書いてあったので
VisualStudio 11
Use default native compilers
を選択して「Configure」ボタンを押しました。

# Python をインストールしていない場合、以下のエラーが出ます。
# Please install Python or specify the PYTHON_EXECUTABLE CMake variable.

Subversion をインストールしていないので警告が出ますが、特に問題無さそう?なので、「Generate」ボタンを押して LLVM.sln が生成できました。

(3) LLVM.sln のビルド
sln ファイルを起動して VS2012 が立ち上がったら、「ソリューションのビルド」で C:\work\llvm\build\Debug\bin 以下にバイナリが生成されました。
ただし、VMWare の Windows 7 環境で 1 時間半ほどかかり、仮想ディスクの空き容量が 9GB ほどしか無かったので、途中でディスクフルで失敗してしまいました…が、一応 clang++ などはできていました。

リンカや標準ライブラリは準備してないので実行ファイルは作れませんが、とりあえず構文のチェックやシンボルの補完は動くようです。(本当は STL ライブラリの補完をしたかったのですが、当然ながらヘッダが無いので無理です。)
>type test.cpp
class C {
public:
    int abc;
    int xyz;
};

int f()
{
    C c;
    c./* 10 行目カラム 7 でのシンボル補完結果 */
}

>"clang++.exe" -v
clang version 3.5.0
Target: i686-pc-win32
Thread model: posix

>"clang++.exe" -cc1 -fsyntax-only -code-completion-at=test.cpp:10:7 test.cpp
COMPLETION: abc : [#int#]abc
COMPLETION: C : C::
COMPLETION: operator= : [#C &#]operator=(<#const C &#>)
COMPLETION: xyz : [#int#]xyz
COMPLETION: ~C : [#void#]~C()


トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード