我想对clang做些事情,现在我写了一个通行证,可以检测源代码(在源代码中插入一些函数调用),就像:
int main(){
...
func1(para1, para2 ...);//func1 is inserted by pass, which is defined in my runtime library.
...
return 0;
}
我已经完成了以上所有操作,通常,如果我们想运行通行证, 我们只需执行以下操作:
clang++ -S -emit-llvm xx.cpp -o xx.ll
opt -load xx.so -xx xx.ll -o xx.ll
... -o xx.o
... xx.o -L/runtime_library_path -lxx(.a or .so) -o xxx
但是现在,我想通过将 flag 传递给clang来完成上述所有步骤。
例如:clang++ -useMypassAndrtlib xx.cpp
,然后它将在编译期间运行我的过程,并在链接期间链接我的运行时库。
到目前为止,我已经实现了一半的目标。
我可以通过将标志传递到clang
来运行通行证,但是我仍然需要对我的rt-lib
进行隐式链接。
例如:clang++ -useMyPass xx.cpp -L/runtime_library_path -lmyrtlib -o xxx
那我应该怎么做才能将我的pass(包括rt-lib部分)完全集成到LLVM中?
我应该修改哪个源文件?修改什么? 我只想使用“ clang ++ -useMyPassAndrtlib xx.cpp ”来运行我的密码并自动使用我的rt-lib。