gpt4 book ai didi

将项目(比如 Emacs)编译为 LLVM 字节码

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:12 25 4
gpt4 key购买 nike

我克隆了 Emacs 源代码,目的是编译成 LLVM 字节码。几个小时以来,我一直在摆弄 Makefile 标志,但没有运气。每当我用谷歌搜索时,我都会得到与编译 .el 文件完全无关的结果。

所以我问你这个问题:我怎样才能将像 Emacs 这样的项目编译成 LLVM 字节码?

我使用的是 OS X 10.9 Mavericks。

编辑:我运行了这些命令:CC=clang CFLAGS=-emit-llvm ./configure --with-jpeg=no --with-gif=no --with-tiff=no然后CC=clang CFLAGS=-emit-llvm make

然后我得到这个错误:

xml.c:23:10: fatal error: 'libxml/tree.h' file not found
#include <libxml/tree.h>
^
1 error generated.

实际上 libxml2 已经安装。

最佳答案

-emit-llvm 只告诉 clang 您希望任何发出的程序集都在 LLVM IR 中。但是,您仍然需要通知 clang 您希望它首先发出程序集。这是通过使用 -S 标志完成的。此外,要编译为 LLVM 字节码,您需要使用 llvm-as。最后,您必须对每个文件都执行此操作,因为据我所知,您无法将 LLVM 字节码文件链接在一起,这意味着您将拥有很多很多 LLVM 字节码文件。

废话已经够多了,这里是你将如何为给定的文件做这件事(请注意,在 shell 中,而不是在 makefile 中):

$ clang -c foo.c -S -emit-llvm # additional options as necessary
$ llvm-as foo.s
$ ls
foo.bc foo.c foo.s

说明:

$ clang -c foo.c

在不链接的情况下自行编译foo.c

$ clang -c foo.c -S

生成程序集,如果未指定输出文件,则将结果保存在 foo.s 中。

$ clang -c foo.c -S -emit-llvm

生成 LLVM IR 而不是 native 程序集。

$ llvm-as foo.s

汇编 foo.s,如果没有指定输出文件,将结果保存在 foo.bc 中。

编辑:

显然,这也有效:

$ clang -c foo.c -emit-llvm -o foo.bc

上面的-o foo.bc是因为否则clang会输出一个.o文件。

关于将项目(比如 Emacs)编译为 LLVM 字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com