Skip to content

Build LLVM with VS

valtron edited this page Dec 23, 2012 · 1 revision

Note: CLang cannot be used on Windows if built with VS: http://www.mail-archive.com/[email protected]/msg00008.html.

Open up llvm-3.1.src\tools\clang\lib\CodeGen\CGDebugInfo.cpp. There are two sections that need changing.

Around line 1699, there is a peice of code that looks like:

if (TC.Verify() && TC.isForwardDecl())
  ReplaceMap.push_back(std::make_pair(Ty.getAsOpaquePtr(), TC));

The TC needs casting to llvm::Value*:

if (TC.Verify() && TC.isForwardDecl())
  ReplaceMap.push_back(std::make_pair(Ty.getAsOpaquePtr(), static_cast<llvm::Value *>(TC)));

Around line: 1809, there is a piece of code that looks like:

if (T.Verify() && T.isForwardDecl())
  ReplaceMap.push_back(std::make_pair(Ty.getAsOpaquePtr(), T));

The T needs casting to llvm::MDNode*:

if (T.Verify() && T.isForwardDecl())
  ReplaceMap.push_back(std::make_pair(Ty.getAsOpaquePtr(), static_cast<llvm::MDNode *>(T)));

By default, llvm-config isn't built on windows (http://code.google.com/p/tart/issues/detail?id=35) The fix is to edit two files.

First, in llvm-src\tools\CMakeLists.txt, comment out: if( NOT WIN32 OR MSYS OR CYGWIN ) and its corresponding endif().

Next, open up llvm-src/tools/llvm-config/CMakeLists.txt. Before add_custom_command(OUTPUT ${BUILDVARIABLES_OBJPATH} add:

if (NOT WIN32 OR MSYS OR CYGWIN)
set(BUILDVARIABLES_SRCPATH ${CMAKE_CURRENT_SOURCE_DIR}/BuildVariables.inc.in)
set(SEDSCRIPT_OBJPATH ${CMAKE_CURRENT_BINARY_DIR}/BuildVariables.configure.sed)

Then after

VERBATIM
  COMMENT "Building BuildVariables.inc include."
  )

add:

else()

if (DEFINED LLVM_MAIN_SRC_DIR)
    set(LLVM_SRC_ROOT ${LLVM_MAIN_SRC_DIR})
else()
    set(LLVM_SRC_ROOT " ")
endif()

if (DEFINED LLVM_BINARY_DIR)
    set(LLVM_OBJ_ROOT ${LLVM_BINARY_DIR})
else()
    set(LLVM_OBJ_ROOT " ")
endif()

if (DEFINED CPP_FLGS)
    set(LLVM_CPPFLAGS ${CPP_FLGS})
else()
    set(LLVM_CPPFLAGS " ")
endif()

if (DEFINED C_FLGS)
    set(LLVM_CFLAGS ${C_FLGS})
else()
    set(LLVM_CFLAGS " ")
endif()

if (DEFINED CXX_FLGS)
    set(LLVM_CXXFLAGS ${CXX_FLGS})
else()
    set(LLVM_CXXFLAGS " ")
endif()

if (DEFINED CMAKE_SHARED_LINKER_FLAGS)
    set(LLVM_LDFLAGS ${CMAKE_SHARED_LINKER_FLAGS})
else()
    set(LLVM_LDFLAGS " ")
endif()

if (DEFINED CMAKE_BUILD_TYPE)
    set(LLVM_BUILDMODE ${CMAKE_BUILD_TYPE})
else()
    set(LLVM_BUILDMODE " ")
endif()

if (DEFINED SYSTEM_LIBS)
    set(LLVM_SYSTEM_LIBS ${SYSTEM_LIBS})
else()
    set(LLVM_SYSTEM_LIBS " ")
endif()

if (DEFINED LLVM_TARGETS_TO_BUILD)
    set(LLVM_TARGETS_BUILT ${LLVM_TARGETS_TO_BUILD})
else()
    set(LLVM_TARGETS_BUILT " ")
endif()

CONFIGURE_FILE(${BUILDVARIABLES_SRCPATH} ${BUILDVARIABLES_OBJPATH})
 
endif()