LLVM msvc DEBUG编译

LLVM msvc DEBUG编译

 

LLVM官方有各个操作系统,各个版本编译好的LLVM二进制文件;但是自己编译可以对LLVM选择性编译一些我们需要的,还可以编译出来可调试的LLVM二进制文件。如果需要编译Debug版本的HALIDE、TVM就需要我们自己编译了。

1. 安装Ninja

从这个地方下载一个你看着顺眼的版本就行,这个不太挑版本,这点比bazel强

2. 进入64位msvc 2019 命令行

在这个目录“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat”下找到这个bat文件,双击运行一下,就会进入msvc2019 64位的编译环境了。这样ninja就可以找到cl 等可执行程序。

3. CMakeLists.txt 修改

编译debug llvm时有的obj文件过大,所以需要添加/bigobj这个编译器选项:

在<LLVM_ROOT>/llvm/这个文件夹下面,找到CMakeLists.txt这个文件。

以我的版本11.1为例,在第581行开始,修改为:

if(MSVC)

option(LLVM_BUILD_LLVM_C_DYLIB "Build LLVM-C.dll (Windows only)" ON)

# Set this variable to OFF here so it can't be set with a command-line

# argument.

set (LLVM_LINK_LLVM_DYLIB OFF)

if (BUILD_SHARED_LIBS)

message(FATAL_ERROR "BUILD_SHARED_LIBS options is not supported on Windows.")

endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")

message(STATUS "add bigobj on msvc compiler")

如果是其他版本,只要找到if(MSVC)这一句话,在if里面添加:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")

这样来给visual studio编译器添加/bigobj选项。

4. CMake configure

cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=<debug_llvm_install_dir> -DLLVM_ENABLE_PROJECTS=clang;lld;clang-tools-extra -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=X86;ARM;NVPTX;AArch64;Mips;Hexagon -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_32_BITS=OFF -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON <LLVM_ROOT>/llvm

 

其中<debug_llvm_install_dir>是安装路径,在编译halide和tvm时方便找到LLVM。<LLVM_ROOT>是llvm源代码的根目录。上面的cmake选项设置了编译debug版本的llvm,使能的LLVM projects有: clang;lld;clang-tools-extra;目标平台有X86;ARM;NVPTX;AArch64;Mips;Hexagon;编译64位的版本。Cmake configure成功后,会有这样的输出:

 

其中的Using Debug VC++ CRT: MDd 说明我们编译的是debug版本的llvm,可用于编译debug版本的halide和tvm。编译debug版本的halide和tvm,有助于我们理解深度学习编译器工作的原理。

5. 编译安装

Cmake成功生成后,可以启动ninja来编译了;在msvc 2019 64bit的环境下输入:

cmake –build . –config Debug –target install -j 6

来启动编译,启动了6个线程,可根据各自的cpu性能改变-j 后面的数字。

6. 编译出错:

在编译的过程中,有一个特殊字符msvc的编译器无法识别,导致出错,我把那个字符改成了$,因为跟那个字符有关的是自动提示,代码分析的功能,halide以及TVM没有涉及,所以到目前为止还不受影响;

 

以Diagnostics.cpp为例,在第542行出现了一个特殊字符,我给改掉了,不知道大家有没有更好的解决办法。

posted on 2023-09-12 10:28  漫思  阅读(63)  评论(0编辑  收藏  举报

导航