田海立@CSDN 2023-06-01
本文简明列举LLVM作为target,如何集成到TVM里的。
{cmake/modules/LLVM.cmake}
0. 设置编译选项 -- USE_LLVM
build option:
- USE_LLVM: ON/OFF/<path to llvm-config>
{set in cmake/config.cmake, and copy into build/}
1. 执行llvm-config获取llvm配置
find_llvm($(USE_LLVM), $([LLVM_VERSION]))
// {from cmake/utils/FindLLVM.cmake}
=> LLVM_INCLUDE_DIRS
llvm-config --cxxflags
output match -I
=> LLVM_DEFINITIONS
llvm-config --cxxflags
output match -D
=> LLVM_LIBS
llvm-config --libfiles // for llvm libs
llvm-config --system-libs // for llvm sys libs
=> TVM_LLVM_VERSION
llvm-config --version
获取之后,设置:
set env:
TVM_LLVM_VERSION
define Macro:
TVM_LLVM_VERSION
比如我的MacBook上:
执行cmake ..
会执行以上过程,通过find_llvm,执行llvm-config获取llvm信息
而这个过程与通过手动执行llvm-config结果一致:
2. TVM编译选项:
Compile options:
COMPILER_LLVM_SRCS <= src/target/llvm/*.cc
TVM_LINKER_LIBS <= $(LLVM_LIBS)
COMPILER_SRCS <= $(COMPILER_LLVM_SRCS)
总结:
- llvm的配置通过指定llvm-congig;
- 执行llvm-config获取各种配置信息;
- 把llvm的信息添加到tvm编译系统中。
注:以上在tvm-0.11.1版本中,其他版本可能会有所不同。