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);

という感じでコンパイルまでできた。早速遊んでみようと思う。

追記(2010/03/10)

CMakeはコンパイラへのパスが通った状態で実行しなければならない