LLVM有对应的binutils吗?

7
LLVM编译器工具链中有一个与常规gcc兼容的gcc。使用llvm-gcc的优点在于它可以转换到任意目标,这意味着当您尝试编译到一个随机架构,如mips-apple-darwin时,普通的gcc会显示“无此目标”的错误,而llvm-gcc则会实际为mips处理器上的Mac OS X构建编译器。
但是需要注意的是:为了构建到一个随机目标,您需要已经为该目标构建好binutils。因此,如果您有一个llvm可以编译但binutils不能支持的目标,那么您将无法创建该编译器,因为GNU Binutils不支持该目标。
那么问题来了:是否有类似于llvm-gcc的等效项 llvm-binutils,与GNU Binutils兼容?(指构建到任意目标的编译器,而不是从列表中选择一个。)
编辑说明:
当我运行llvm-gcc时,我的目标不是我选择的,而是在编译llvm-gcc时选择的。也就是说,如果我尝试为mips-apple-darwin编译GCC,则会显示“不支持的目标”。但是,如果我为mips-apple-darwin构建llvm-gcc,并且拥有mips-apple-darwin-as和mips-apple-darwin-ld,则它可以正常工作。

注意:LLVM 2.9正在进行中,它应该是最后一个支持llvm-gcc的版本。从3.0开始,LLVM将使用CLang或Dragon Egg。 - Matthieu M.
2个回答

4
据我所知,LLVM不支持任意目标的编译。您必须拥有所有包含和定义以适应您的目标,并且通常,LLVM具有用于为您的目标生成代码的后端。请从http://llvm.org/docs/FAQ.html阅读“我可以将C或C++代码编译为平台无关的LLVM位代码吗?”来回答这个问题。
回答这个问题,LLVM不使用GNU binutils,LLVM有自己的“binutils”来生成代码(称为LLVM核心项目)。反汇编器和调试器是LLDB项目的一部分。
在语言层面上,LLVM带来了一些独立性。您的项目可以使用C/C ++,Ada,Fortran等进行编码...... llvm具有将您的代码转换为中间表示形式的能力。该IR最终将生成代码。

2

llvm-gcc不支持任意目标。llvm-gcc必须针对特定目标进行构建。clang + LLVM可以。我正在尝试使用ellcc完成这个任务:http://ellcc.org。我正在使用binutils进行汇编和链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接