【发布时间】:2016-05-13 12:57:58
【问题描述】:
我正在尝试使用 llvm 3.8 在 OSX 上构建和应用通行证。
我使用 brew 使用以下公式安装了 llvm 3.8:$brew install llvm38
在通行证内,我有以下内容:
static RegisterPass<SwiftPass> X("pass", "My Pass");
我用来构建 pass 的 Makefile 如下所示:
LIB_NAME = pass$(SUFIX)
LDFLAGS = $(shell $(LLVM_PATH)llvm-config --ldflags)
CXXFLAGS = -g -Wall -fno-rtti -fPIC -std=c++11 -shared -dynamiclib $(shell $(LLVM_PATH)llvm-config --cxxflags --system-libs --libs core executionengine interpreter mc support nativecodegen)
COMPILER = clang++
all: $(LIB_NAME)
$(LIB_NAME): $(OBJ)
$(COMPILER) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
如果给我几个clang: warning: -l[some lib]: 'linker' input unused。它也给了我:
clang: warning: argument unused during compilation: '-shared'
clang: warning: argument unused during compilation: '-dynamiclib'
但它会输出 .dylib 和 .o,所以我继续尝试。 所以现在我有了一个通行证,我可以将它应用到我的 .bc 文件中,为此我使用这样的 Makefile(为简洁起见,我省略了定义):
$(LLVM_OPT) -load $(PASSFILE) $(PASSNAME) $(NAME).bc -o $(NAME).afterMyPass.bc
这转化为:
opt -load pass.dylib -pass int.bc -o int.afterMyPass.bc
然后把这个还给我:
opt: Unknown command line argument '-pass'. Try: '/usr/local/Cellar/llvm38/3.8.0/lib/llvm-3.8/bin/opt -help'
opt: Did you mean '-slsr'?
make: *** [pass] Error 1
我的猜测是这是由编译期间未使用的参数引起的,但我不知道为什么它们首先未被使用,因为它们是构建共享库所必需的。
我做错了什么,我该如何解决?
【问题讨论】:
-
opt -load pass.dylib -help 有什么作用?
-
$opt -load pass.dylib -help 概述:llvm .bc -> .bc 模块化优化器和分析打印机用法:opt [options] OPTIONS: ...
-
我想知道帮助中是否显示'-pass'?
-
不,没有。最佳匹配是 -run-pass=
- 只为一个特定的 pass 运行编译器。我会试试这个,看看会发生什么。 -
你能分享完整的makefile吗?我想我可以解决这个问题。或者除了后缀和llvm_path之外,您的makefile与问题中给出的几乎相同?
标签: c++ macos makefile llvm llvm-ir