编写LLVM通行证 - 失败

时间:2012-07-24 12:08:27

标签: compilation llvm clang

我正在努力http://llvm.org/docs/WritingAnLLVMPass.html,尝试写一个非常简单的传球。 (假设我使用'Joe'而不是'hello',因为相关目录中已经有'hello')

我在应该创建目录'joe',我在'joe'中创建了建议的cpp文件(虽然我注意到附近的目录中没有任何cpp文件)并且我将它命名为'joe.cpp'因为我不相信我被告知不同......

我到达文档的一部分,它说'在本地目录中使用简单的“gmake”命令编译文件'但我收到错误

  

制作:***没有制定目标的规则   /Users/joXXXXX/llvm/llvm/lib/Transforms/joe/Makefile', needed by生成文件”。停止。

这完全令人困惑。我注意到与this case的相似性,但在这种情况下运行../config然后在根目录中的make解决了问题。在我的任务中,这需要20分钟,然后什么都没有改变......谁能告诉我发生了什么意义或者让我看到成功的样子?

编辑 - 本地Makefile如下所示:

# Makefile for hello pass
#
# # Path to top level of LLVM hierarchy
LEVEL = ../../..
#
# # Name of the library to build
LIBRARYNAME = joe
#
# # Make the shared library become a loadable module so the tools can 
# # dlopen/dlsym on the resulting library.
# LOADABLE_MODULE = 1
BUILD_ARCHIVE = 1
# # Include the makefile implementation stuff
include $(LEVEL)/Makefile.common

2 个答案:

答案 0 :(得分:5)

我遇到了同样的问题并通过重新阅读教程解决了这个问题:

  

首先,配置和构建LLVM。这需要直接在LLVM源代码树内完成,而不是在单独的对象目录中完成。

这意味着您不应按照LLVM入门中的建议创建“构建”文件夹。假设您在$LLVM中下载了llvm源代码,这里是我使其工作的列表:

  • 在$ LLVM / lib / Transforms /中创建一个新文件夹,让我们说MyHello,以及教程中传递的必要文件。

  • $ cd $ LLVM

  • $。/配置

  • $使

  • $ cd lib / Transforms / MyHello

  • $使

答案 1 :(得分:2)

事实证明,当帮助文件说'lib / Transforms / Hello'时,它意味着'somestuff / llvm / lib / Transforms / Hello'而不是'/ somestuff / build / lib / Transforms / Hello'。事后看来,这并不像它那样不透明,但我想留下这个答案来帮助其他可能在文档中遗漏这些内容的人......