LLVM out of source pass build:不支持可加载模块(在 Linux 上)
Posted
技术标签:
【中文标题】LLVM out of source pass build:不支持可加载模块(在 Linux 上)【英文标题】:LLVM out of source pass build: Loadable modules not supported (on Linux) 【发布时间】:2015-01-09 15:18:27 【问题描述】:几周前,我在 debian wheezy 上编译并安装了 LLVM(配置和制作),现在尝试从源代码编译 llvm-mutate pass。 AFAICC,llvm-mutate 遵循 cmake out of source pass build instructions。
尝试构建 llvm-mutate 时
mkdir build
cd build
cmake -DCMAKE_MODULE_PATH=/usr/local/share/llvm/cmake ../
我明白了:
-- 忽略变异 -- 此平台不支持可加载模块。
嗯? opt 和可加载通道(在 llvm_trunk/build/Debug+Asserts/lib/xxx.so)存在并且可以工作(使用 configure & make 编译,而不是 cmake)。
所以这个问题好像和cmake有关? 其他人也遇到过这样的问题,但是在 Win 上使用 cygwin:here
有什么想法吗? 谢谢 亚历克斯
【问题讨论】:
【参考方案1】:AddLLVM
cmake 模块需要一些先决条件。添加到 CMakeLists.txt:
# AddLLVM needs these
set(LLVM_RUNTIME_OUTPUT_INTDIR $CMAKE_BINARY_DIR/$CMAKE_CFG_INTDIR/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR $CMAKE_BINARY_DIR/$CMAKE_CFG_INTDIR/lib)
include(HandleLLVMOptions) # important: matches compiler flags to LLVM/Clang build
include(AddLLVM)
一些灵感来自this message。
【讨论】:
【参考方案2】:只是为了完整起见,如果有人会遇到此错误。此错误同时在 LLVM 3.8.0 中得到修复,因此您只需包含 AddLLVM 即可构建您的插件。 HandleLLVMOption 包含文件仅有助于获得正确的编译器标志,如上文所述。
【讨论】:
【参考方案3】:添加到 alexei 的 reply。
您也可以在CMakeLists.txt
文件中的include(AddLLVM)
行之前添加list(APPEND CMAKE_MODULE_PATH "$LLVM_CMAKE_DIR")
,然后在PATH
中添加llvm-config
的LLVM 二进制目录,
调用 cmake 为
CXX=clang++ cmake -DLLVM_DIR=$(llvm-config --prefix)/share/llvm/cmake ..
【讨论】:
以上是关于LLVM out of source pass build:不支持可加载模块(在 Linux 上)的主要内容,如果未能解决你的问题,请参考以下文章
LLVM 之 IR 篇:如何基于传统 Pass 框架扩展 LLVM IR 优化器