【问题标题】:Writing an LLVM Pass - failing编写 LLVM 通行证 - 失败
【发布时间】:2012-07-24 12:08:26
【问题描述】:

我正在通过http://llvm.org/docs/WritingAnLLVMPass.html 工作,试图编写一个非常简单的通行证。 (假设我使用的是 'Joe' 而不是 'hello',因为相关目录中已经有一个 'hello')

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

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

make: *** 没有制定目标的规则 /Users/joXXXXX/llvm/llvm/lib/Transforms/joe/Makefile', needed byMakefile'。停下来。

这完全令人困惑。我注意到与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

【问题讨论】:

  • 你的 Makefile 中有没有类似Makefile: ... 的指令。这就是错误消息的内容。
  • 已编辑以提供完整的 makefile :)

标签: compilation llvm clang


【解决方案1】:

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

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

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

  • 在 $LLVM/lib/Transforms/ 中创建一个新文件夹,比如 MyHello,并按照教程中的方法创建一个通过所需的文件。

  • $cd $LLVM

  • $./configure

  • $make

  • $cd lib/Transforms/MyHello

  • $make

【讨论】:

    【解决方案2】:

    事实证明,当帮助文件显示“lib/Transforms/Hello”时,它的意思是“somestuff/llvm/lib/Transforms/Hello”而不是“/somestuff/build/lib/Transforms/Hello”。事后看来,这并不像它可能的那样不透明,但我想留下这个答案来帮助其他可能在文档中错过这个的人......

    【讨论】:

    • 也供将来参考:您可以使用单独的构建目录,但您必须进入 /lib/Transform 目录,为您的通行证创建一个子目录,然后复制您的Makefile在那里。然后,如果您在同一目录中执行make,它将从源代码树中的正常位置获取您的源代码。此外,您的通行证的LIBRARYNAME(在Makefile 中)必须以“LLVM”开头,例如“LLVMFooPass”;否则链接器会忽略它,你不会得到.so 文件。
    • @Bryon 你确定吗?没有任何地方声明库名称必须以“LLVM”开头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2014-12-14
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多