2015年07月23日

LLVM/Clang 3.6.2をVisualStudio 2013 Expressでビルド

過去に何回か似たような記事を書いてますが、それのアップデートです。

内容的には、以下とほとんど同じ内容です。このツールの組み合わせでビルドが成功したというメモです。

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

(2015/9/4 追記: 下記手順で Express 2015 for Windows Desktop と LLVM 3.7.0 でもビルドと動作を確認しました。リンク先、中央の Community 2015 ではなく、下の方の Express for Windows Desktop からダウンロードしてください。)



今回は VMWare Workstation 上に、まっさらの Windows 7 64bit スナップショットイメージをベースに環境を作りました。
メモリは 4GB、ディスクの空き容量は、ツールのインストール込みで 25GB 程度あれば大丈夫そうです。

(1) 必要なツールのインストール

- VisualStudio 2013 Express

今回はちょっと試したいだけだったので、無償版の VS2013 を採用しました。LLVM/Clang のビルドに必要なのは、VC++ の基本機能だけなので、Express Edition で十分です。

(2013 を最後に、今後は Express Edition は廃止され、Visual Studio Community に統合されるとのことなので、今なら Visual Studio Community 2015 あたりを使おうかとも思ったのですが、ライセンスの条件が厳しくなっているので、今回は不採用としました。Community は、基本的に商用利用は不可になったようで、会社のブログの題材に使用というのも、厳密に考えると駄目そうなので。)

追記: コメント欄で教えていただきました。VS Express 2015、何事も無かったかのようにリリースされそうです。(2015/7/24 現在は RC ?)

Microsoft Visual Studio Express 2013 for Windows Desktop Update 4
http://www.microsoft.com/ja-jp/download/details.aspx?id=44914

普通にデフォルトインストールするだけなのですが、今回はベースにしたイメージが sp1 すら適用されていない Win7 だったので、Windows Update を何回か繰り返して sp1 の適用と、IE11(IE10 以上)のインストールが必要だったため、けっこう時間がかかりました。

- CMake インストール

http://www.cmake.org/download/

今回は cmake-3.3.0-rc4-win32-x86.exe というバージョンのインストーラを使用してデフォルトインストールしました。

- python インストール

https://www.python.org/downloads/release/python-2710/

LLVM の要件的には、新しいバージョンでも問題無さそうですが、今回は保守的に python-2.7.10.amd64.msi という 2.7 系のインストーラーを使用してデフォルトインストールしました。

- 7-zip のインストール

http://sevenzip.osdn.jp/

今回は subversion は使用せず、tar.xz ファイルを展開して使用したためです。

(2) LLVM/Clang のソースを準備

http://llvm.org/releases/download.html#3.6.2

llvm-3.6.2.src.tar.xz
cfe-3.6.2.src.tar.xz
compiler-rt-3.6.2.src.tar.xz

をダウンロードして、右クリックから 7-Zip で展開します。展開後、以下のようにリネームします。
llvm-3.6.2.src -> llvm
cfe-3.6.2.src -> clang
compiler-rt-3.6.2.src -> compiler-rt
今回は C:\work\llvm 以下に llvm を展開しました。clang と compiler-rt を、llvm 以下に、次のように移動させます。
llvm\tools\clang
llvm\projects\compiler-rt
(3) Visual Studio Solution ファイル生成

CMake を起動して、以下のように llvm を展開したフォルダと、Solution ファイル等のビルド生成物を展開するフォルダを適当に指定します。(フォルダが無い場合は、ダイアログが出て、作成するかどうかを聞かれます。)
Where is the source code: c:\work\llvm\llvm\llvm
Where to build the binaries: c:\work\llvm\build
Configure ボタンを押します。様々な VisualStudio 向けの Solution ファイルが作れますが、今回は「Visual Studio 12 2013」を指定しました。(未確認ですが、64bit ネイティブ版バイナリが欲しい場合は、x64 の方を指定すれば良さそうです。)

LLVM_TARGETS_TO_BUILD で、必要なターゲットだけをビルドできるようですが、とりあえず今回はデフォルトのままにして、全ターゲット(ホスト以外にも、AArch64 や ARM、PPC など、全部)をビルドしてみます。
Generate ボタンを押して VisualStudio のソリューションファイル(LLVM.sln)を生成します。

(4) ビルド

C:\work\llvm\build 以下に生成された LLVM.sln をダブルクリックして開きます。
どうも、「ソリューションのビルド」だと、今は上手く行かないようです。(依存関係が正しく解決できないようで、本来はビルド途中に生成される inc ファイルが無いというエラーが大量に出ました。)
ALL_BUILD プロジェクトを右クリックして「ビルド」を選択すると、1~2 時間ほどでビルドできるはずです。

(5) 確認

とりあえずホスト環境のコンパイルを試してみました。コマンドプロンプトを起動して
set PATH=C:\work\llvm\build\Release\bin;%PATH%
のように、生成物に直接 PATH を通してみました。(どうも INSTALL が上手く行かなかったので。)

この状態で、適当にハローワールドが動くことを確認しました。
> clang hello.c
> a.exe
ヘッダや libc は何を使っているのか、などの詳細はまだ未確認です。ここらへんをちゃんと把握していないと、いちおう全ターゲット向けのバイナリを生成可能とはいえ、ARM 等のバイナリを生成することは難しそうです。(LLVM には、まだ正式なリンカが存在しないので、binutils の GNU ld を使う必要があるようです。)

トラックバックURL

コメント一覧

1. Posted by 名無し   2015年07月23日 18:26
Expressが無くなるって話はいつのまにか無かったことにされて、RCもRTMも何事もなかったかのようにExpressがリリースされました
Exp廃止の根拠であったQ&Aの「Visual Studio Express エディションはどうなりますか?」も6月ごろこっそり消されました
2. Posted by 若槻   2015年07月24日 13:18
コメントありがとうございます。
なるほど、Visual Studio Express のページが、Community 2015 に誘導しているのは罠だったんですね(笑)

コメントする

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

QRコード
QRコード