【问题标题】:llvm and install time optimizationllvm 和安装时间优化
【发布时间】:2014-03-22 11:25:23
【问题描述】:

基于LLVM official page,可以进行安装时优化,根据我的理解,它首先在分发之前在构建机器上编译成字节码,然后在目标机器上编译,安装时将字节码转换为本机代码。

是否有关于此功能的真实示例?更具体地说,我想知道是否可以采用使用 autoconf 的任意开源 C/C++ 项目(即通常由 ./configure && make && make install 构建和安装),并且

  1. 在构建机器上,通过运行./configure && make 在一个特殊的 方式(例如设置一些环境变量,甚至修改 configure.ac 或其他一些 autoconf 文件),以便它生成 可执行文件和库作为字节码;
  2. 我将构建树转移到目标机器,然后运行make install 以一种特殊的方式,使其像往常一样安装所有文件, 但将字节码转换为可执行文件和库的本机代码。

【问题讨论】:

  • 这甚至无法开始工作,除非构建机器和目标机器是相同的操作系统、操作系统版本、ABI、库、头文件等,原因在其他问题以及一些 LLVMdev 中有详细说明邮件列表线程。
  • @delnan,我没有找到您提到的其他问题或 LLVMdev 邮件列表线程。您能否将链接粘贴到此处,以便我可以关注它?谢谢。
  • PNaCl 怎么样? developers.google.com/native-client/pnacl-preview - 它发送llvm bitcode到用户的浏览器,它会将bitcode重新编译为当前CPU的机器码?
  • 我不知道使用 C++ 和 LLVM 的例子,但这就是 Android 的 ART 虚拟机的工作方式。当应用程序安装在手机上时,Java 字节码被编译为本机代码。相同的想法,但使用 Java / ART 而不是 C++ / LLVM。

标签: c++ llvm llvm-clang


【解决方案1】:

正如@delnan 所指出的,这通常是不可能的。 LLVM 是一个目标独立 IR,但它不是可移植。

已经有一些尝试构建便携式 IR,其中包括 PNaCl,但这些与 LLVM 不同。

【讨论】:

    【解决方案2】:

    LLVM IR 是独立于目标的,这意味着它可以在一台机器上生成(编译时)并在另一台机器上转换为字节码(链接时),并且它仍然会生成与第一台机器上相同的字节码,前提是您正在使用具有相同选项的相同版本的 LLVM。这并不意味着生成的 IR 会在所有机器上生成有效的二进制文件。

    问题在于 ABI 在不同系统之间的差异。

    这篇文章更详细地解决了这些差异: LLVM bitcode cross-platform

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多