你如何为自己组建一个交叉编译器?

3

我有点惊讶地发现,找不到关于如何使用llvm从头开始构建跨架构或跨操作系统编译器的信息。 llvm本身可以立即使用。 然后您只需要从目标系统中收集sysroot,然后以某种方式生成并集成跨平台binutils?

虽然我有很多随意的用例,但我最近的烦恼是针对arm / linux的CodeSourcery基本上已经消失了,而在Windows上构建时。


我认为这是一个好问题(尽管您在正文中并没有真正陈述一个问题)。在旧版的Stack Overflow上,它可能会受到欢迎。但在当前版本的Stack Overflow上,它很可能会被关闭,因为太过宽泛。 - jww
是的,有点这个意思。但我想说的是,没有太多的开放性讨论,这可能是烂堆栈溢出问题的主要烦恼。我真的想了解LLVM/clang的具体情况。我注意到你编辑了我的主题,把它拿掉了。 - Peter M
关于编辑,请参见问题标题是否应包含“标签”?。必须清理像*Tag:Tag -*这样的标题。 - jww
嘿,酷,谢谢你指出来,我不会与社区争论(但我不同意,因为它强迫人类像计算机一样行事,并集成不阅读英语的不同信息)。有趣的是你建议我不要重复标签,而应该重复问题......(抱歉,无法抵制)。 - Peter M
实际上,我想我的问题应该是“你如何组装一些东西。”然后你可以查看标签并弄清楚! - Peter M
显示剩余2条评论
1个回答

4
我正在开发一个基于clang/LLVM的交叉编译工具链。目前它可以在不同的Linux平台(ARM、Mips、PowerPC、x86)和Windows x86上运行。我尽力始终跟随最新的LLVM源码树,并在发布时引入最新版本的binutils、GDB等(参见http://ellcc.org/blog/?page_id=467)。
对于该项目,我有几个主要设计目标,但其中两个是首要的。我希望整个工具链能够构建自身,对于所有的Linux目标,它都能做到这一点;而在clang的精神中,我希望尽可能少地使用支持二进制文件。为此,我使用binutils选项来构建大多数可支持所有目标的可执行文件。每个处理器都有自己的< strong >as< /strong >(随着更多的内部汇编器支持变得可用,LLVM正在消除对其的需求),但我只构建一个< strong >ld< /strong >、< strong >objdump< /strong >、< strong >gdb< /strong >等,它们可以处理所有不同的目标。
从干净的源代码安装开始,我首先使用gcc构建clang/LLVM和binutils/GDB,然后为所有目标构建所有库(C/C++、编译器-rt等)。第二个可选的构建使用新构建的工具来编译自己。之后,后续的构建都是自托管的。
我在我的x86 Linux桌面上为各个主机构建所有工具,但理论上每个工具链都应该能够在其他Linux主机或Windows上重新创建自身。
如果您有兴趣获取预构建的二进制文件,则可以访问http://ellcc.org/blog/?page_id=20295

哇,我猜想考虑到你的项目,你没有其他选择,只能从头开始构建库?我只是假设有一些工具可以根据目标收集系统根目录(无论是完整的还是基于规范的子集)。 - Peter M
我刚刚收集了构建clang/LLVM、binutils和gdb所需的库。我想从源代码构建,而不是为所有目标处理器拉取预编译的库。 - Richard Pennington

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