如何在LLVm中创建自己的传递?

时间:2014-02-24 02:16:18

标签: compiler-construction llvm

我是LLVM的新手,我正在尝试构建自己的传递。阅读有关编写LLVM Pass的文档。我试图通过在Transforms目录中添加一个目录来创建我自己的传递。但是,当我尝试创建源代码时,会出现错误“make: * 没有规则来制作目标”。

如果我想要新的传递,我是否必须重建LLVM?如果是这样,因为我在Debian VM上运行它会非常耗时,并且构建它需要大约半个小时。

如果有办法解决这个问题,请告诉我。任何建议表示赞赏。感谢。

编辑: 是的,我有makefile。我按照文档中提到的步骤操作。

# Makefile for hello pass

# Path to top level of LLVM hierarchy
LEVEL = ../../..

# Name of the library to build
LIBRARYNAME = Trial

# Make the shared library become a loadable module so the tools can
# dlopen/dlsym on the resulting library.
LOADABLE_MODULE = 1

# Include the makefile implementation stuff
include $(LEVEL)/Makefile.common

我正在尝试创建名为Trial的简单函数传递。

1 个答案:

答案 0 :(得分:4)

如果您的llvm中有$PATH的正常安装,那么您可以执行以下操作,而不是像文档中提到的那样将文件放在Transforms目录中

<create basic_block_pass.cpp with pass name myPass in any location>

$ clang++ -c basic_block_pass.cpp `llvm-config --cxxflags`
$ clang++ -shared -o pass.so basic_block_pass.o `llvm-config --ldflags`
$ opt -load ./pass.so -myPass < hello.bc > /dev/null

如果您创建Makefile来执行上述步骤,那么您就拥有了一个不错的构建系统。