2012-07-24 65 views
1

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

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

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

化妆:***没有规则,使目标 /Users/joXXXXX/llvm/llvm/lib/Transforms/joe/Makefile', needed by Makefile'。停止。

这是完全混淆。我注意到与this case的相似性,但是在那种情况下运行../config然后在根目录中解决了问题。在我的任务中,这需要20分钟,然后什么都没有改变......任何人都可以告诉我发生了什么,或者给我一些成功的样子?

编辑 - 本地生成文件看起来是这样的:

# 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 
+0

你有像Makefile这样的指令:... '在你的Makefile中。这就是错误信息所说的。 – 2012-07-24 23:21:23

+0

编辑为makefile提供全部内容:) – Joe 2012-07-24 23:42:36

回答

2

所以,事实证明,在帮助文件中说: 'LIB /变换/你好' 这意味着 'somestuff/LLVM/lib中/变换/你好' 而不是'/somestuff /编译/ lib中/变换/你好”。事后看来,这不是不透明的,但我想离开这个答案来帮助其他人可能已经错过了这个文档...

+2

同样供以后参考:你可以使用一个单独的编译目录,但是你必须进入/lib/Transform目录,为你的pass创建一个子目录,并复制你的'Makefile'在那里。然后,如果在同一个目录中执行'make',它将从源树中的正常位置拾取源。另外,你的pass('Makefile')中的'LIBRARYNAME'必须以“LLVM”开头,比如“LLVMFooPass”。否则链接器会忽略它,你不会得到'.so'文件。 – 2014-01-21 08:32:26

+0

@Bryon你确定吗?有人曾经说过,图书馆名称必须以“LLVM”开头。 – zell 2015-04-13 03:16:30

5

我面临同样的问题,并通过解决这个问题 - 阅读教程:

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

这意味着您不应该按照LLVM入门中的建议创建“构建”文件夹。假设你在$LLVM下载的LLVM源,这里是名单,我把它的工作原理:

  • 了一通,如创建一个新的文件夹,让创建MyHello说,在$ LLVM/lib中/变换/和必要的文件教程。

  • $ CD $ LLVM

  • $。/配置

  • $使

  • $ CD的lib /变换/创建MyHello

  • $使