【发布时间】:2014-12-30 04:12:03
【问题描述】:
有人告诉我,clang 是一个像 gcc 一样工作的驱动程序,可以进行预处理、编译和链接工作。在编译和链接过程中,据我所知,实际上是 llvm 进行了优化("-O1", "-O2", "-O3", "-Os", "-flto")。
但我就是无法理解llvm 是如何参与的。
似乎编译源代码甚至不需要libLLVMCore.a之类的静态库,而是debian clang包依赖于另一个名为libllvm-3.4的包(clang版本为3.4),其中包含libLLVM-3.4.so(.1),确实clang 使用这个共享库进行优化?
查了一下clang源码,发现include/clang/Driver/Options.td包含了相关选项,可惜没找到include那个文件的源文件,所以还是不了解机制。
希望有人能给我一些提示。
【问题讨论】:
-
这可能是另一个 XY 问题。如果你得到这个问题的答案,你打算解决什么问题?
-
@MSalters 我只是想知道 clang 如何驱动 llvm 进行优化工作。我正在从事一个似乎需要 clang sanitizer 和 llvm IR pass 分析的项目,所以我想知道有关 clang 工作原理的详细信息。基本上,我们希望实现一个(非常轻量级的)驱动程序,其工作方式类似于 clang,但针对端到端代码漏洞检查。
-
好吧,我已经觉得某处确实存在问题。为 LLVM 编写目标语言描述并对其进行编译不是更好吗? LLVM 编译器不限于针对 x86 或 ARM,它是可扩展的。定义合适的目标语言后,您的漏洞将在最终输出中脱颖而出。
-
@MSalters 我认为为目标语言编写前端对我来说仍然很困难,我们目前只对 x86(32/64) 作为架构的 c/c++ 代码感兴趣。所以希望有关于llvm转换和分析pass的驱动接口的详细解答。
标签: c++ gcc compilation clang llvm