osg*_*sgx 6 linux compiler-construction llvm clang linux-kernel
Linux内核是为使用gcc进行编译而编写的,并使用了许多小而丑陋的gcc-hacks.哪个编译器可以编译linux内核除了gcc?
其中一个可以是英特尔编译器.内核编译需要什么样的最小版本?
还有一个Tiny C编译器,但它只能编译内核的简化和特殊编辑版本.
还有其他编译器能够构建内核吗?
将 LLVMLinux 补丁提交到普通内核的过程正在进行中(2013-2014 年)。
LLVMLinux 是 Linux 基金会的项目: http: //llvm.linuxfoundation.org/,旨在使用 LLVM 构建普通内核。许多补丁是由 LLVMLinux 项目负责人 Behan Webster 准备的。
2013 年 5 月有关于该项目的 LWN 文章 https://lwn.net/Articles/549203/项目”
LLVMLinux 项目的当前状态可在页面http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues进行跟踪
已经从内核中消除的东西(基本上是 gcc-isms): * 显式寄存器变量(非 C99) * VLAIS(不符合 C99 的未记录的 GCC 功能“结构中的可变长度数组”)类似或什struct S { int array[N];}至struct S { int array[N]; int array_usb_gadget[M]; }和 M 是非常数的情况函数参数 * 嵌套函数(GCC/Gnat 开发人员将 Ada 功能移植到 C 中;C99 中不允许) * 一些 gcc/gas 魔法,例如特殊段或宏
要做的事情: * 使用__builtin_constant_p内置函数来实现可怕的魔法,例如BUILD_BUG_ON(!__builtin_constant_p(offset));
关于 LLVMLinux 的好消息是,在其补丁之后,内核不仅可以使用 LLVM+clang 构建,而且还可以更容易地由其他非 GCC 编译器构建,因为该项目杀死的不是像 VLAIS 这样的 C99 代码,由 usb gadget 作者创建,由netfilter 黑客以及加密子系统黑客;嵌套函数也被杀死。