llvm 和安装时间优化
Posted
技术标签:
【中文标题】llvm 和安装时间优化【英文标题】:llvm and install time optimization 【发布时间】:2014-03-22 11:25:23 【问题描述】:基于LLVM official page,可以进行安装时优化,根据我的理解,它首先在分发之前在构建机器上编译成字节码,然后在目标机器上编译,安装时将字节码转换为本机代码。
是否有关于此功能的真实示例?更具体地说,我想知道是否可以采用使用 autoconf 的任意开源 C/C++ 项目(即通常由 ./configure && make && make install
构建和安装),并且
-
在构建机器上,通过运行
./configure && make
在一个特殊的
方式(例如设置一些环境变量,甚至修改
configure.ac 或其他一些 autoconf 文件),以便它生成
可执行文件和库作为字节码;
我将构建树转移到目标机器,然后运行make install
以一种特殊的方式,使其像往常一样安装所有文件,
但将字节码转换为可执行文件和库的本机代码。
【问题讨论】:
这甚至无法开始工作,除非构建机器和目标机器是相同的操作系统、操作系统版本、ABI、库、头文件等,原因在其他问题以及一些 LLVMdev 中有详细说明邮件列表线程。 @delnan,我没有找到您提到的其他问题或 LLVMdev 邮件列表线程。您能否将链接粘贴到此处,以便我可以关注它?谢谢。 邮件列表:thread.gmane.org/gmane.comp.compilers.llvm.devel/43769 堆栈溢出:***.com/q/14258194/395760 PNaCl 怎么样? developers.google.com/native-client/pnacl-preview - 它发送llvm bitcode到用户的浏览器,它会将bitcode重新编译为当前CPU的机器码? 我不知道使用 C++ 和 LLVM 的例子,但这就是 android 的 ART 虚拟机的工作方式。当应用程序安装在手机上时,Java 字节码被编译为本机代码。相同的想法,但使用 Java / ART 而不是 C++ / LLVM。 【参考方案1】:正如@delnan 所指出的,这通常是不可能的。 LLVM 是一个目标独立 IR,但它不是可移植。
已经有一些尝试构建便携式 IR,其中包括 PNaCl,但这些与 LLVM 不同。
【讨论】:
【参考方案2】:LLVM IR 是独立于目标的,这意味着它可以在一台机器上生成(编译时)并在另一台机器上转换为字节码(链接时),并且它仍然会生成与第一台机器上相同的字节码,前提是您正在使用具有相同选项的相同版本的 LLVM。这并不意味着生成的 IR 会在所有机器上生成有效的二进制文件。
问题在于 ABI 在不同系统之间的差异。
这篇文章更详细地解决了这些差异: LLVM bitcode cross-platform
【讨论】:
以上是关于llvm 和安装时间优化的主要内容,如果未能解决你的问题,请参考以下文章