LLVMをVisual Studio 2008でコンパイルする
LLVMで遊ぼうと思い、ソースコードを落としてコンパイルを始めた。ところがインストラクション通りにやっているはずなのに上手くいかない。試行錯誤していくうちに何とかコンパイルすることができた。その時の手順を備忘録がてら書いていくことにする。
ソースコードの配置
LLVMだけをコンパイルするなら特に工夫する必要はない。clangも合わせてコンパイルする場合は、ディレクトリ名をclang-*.*からclangに変えたあと、LLVMのtoolsの中に配置する。この後CMakeを書けるとclangのプロジェクトもソリューションに追加される。
X86CompilationCallback_Win64.asmのコンパイルエラー
CMakeのバグでasmファイルをコンパイルするための設定がされないらしい。この問題をとりあえず回避するには、X86CompilationCallback_Win64.asmのルールを直接指定すれば良いそうだ。lib\Target\X86\CMakeLists.txtの該当する部分を以下のように書き換える。
if( CMAKE_CL_64 ) enable_language(ASM_MASM) ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/X86CompilationCallback_Win64.obj COMMAND "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/amd64/ml64" /Fo ${CMAKE_CURRENT_BINARY_DIR}/X86CompilationCallback_Win64.obj /c ${CMAKE_CURRENT_SOURCE_DIR}/X86CompilationCallback_Win64.asm DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/X86CompilationCallback_Win64.asm ) set(sources ${sources} ${CMAKE_CURRENT_BINARY_DIR}/X86CompilationCallback_Win64.obj) endif()
BasicStore.cppのコンパイルエラー
Visual Studio 2008のコンパイラのバグでBasicStore.cppがコンパイルできない。この問題を回避するには当該部分のソースコードを書き換える必要がある。
SVal value; if (T) { value = *T; } else { value = UnknownVal(); } return SValuator::CastResult(state, value);
という感じでコンパイルまでできた。早速遊んでみようと思う。
- [LLVMbugs] [Bug 4936] New: Win64 visual studio build does not compile AS http://www.mail-archive.com/llvmbugs@cs.uiuc.edu/msg04312.html
- ICE when compiling LLVM 2.6/x64 | Microsoft Connect http://connect.microsoft.com/VisualStudio/feedback/details/510943/ice-when-compiling-llvm-2-6-x64
追記(2010/03/10)
CMakeはコンパイラへのパスが通った状態で実行しなければならない