如何使用 Clang 编译 Linux 内核?

如何使用 Clang 编译 Linux 内核?

出于好奇,我有兴趣使用以下两种方法来编译 Linux 内核:扎普克编译器;一次一个。

我找不到可遵循的指南。只有 GCC 正在被用来编译 Linux 内核。

如何使用其他编译器编译Linux内核?

答案1

内核构建允许您指定要使用的工具;例如,要指定 C 编译器,请设置CCHOSTCC变量:

make CC=clang HOSTCC=clang

该构建预计仅能在 GCC 上成功,但有人对此感兴趣使用 Clang 代替,并且已知它可以在某些情况下工作(某些 Android 内核是使用 Clang 构建的)。

答案2

感谢斯蒂芬·基特的回答。可以使用 Clang 编译 Linux 内核。但你需要 Clang v9.0。

配置

如果您使用 Arch Linux,有一个很好的方法来 clang v9.0,而无需自己编译:

# Enable the testing repository (if not already enabled):
echo -e "[testing]\nInclude = /etc/pacman.d/mirrorlist" | sudo tee -a /etc/pacman.conf

# Update the database and install clang, llvm, llvm-libs
sudo pacman -Sy testing/clang testing/llvm testing/llvm-libs

# Check if you have clang-9:
clang --version

注意:将来,如果额外的存储库添加了 clang 版本 9,您可以安装它

获得 clang-9.0 后,从以下位置下载您选择的内核这里

只需使用别名 make 编译内核即可:

alias make="make CC=clang HOSTCC=clang -j `nproc`"

继续安装过程。

完成后,重新启动系统。然后输入:

cat /proc/version

上面的代码将向您显示内核版本以及一些额外的详细信息。例如,我的 /proc/version 文件如下所示:

Linux version 5.4.0-rc1 (sourav@archlinux-pc) (clang version 9.0.0 (tags/RELEASE_900/final)) #1 SMP PREEMPT Sun Oct 6 18:02:41 IST 2019

表现

我不知道这是否是真正的安慰剂,但它的运行速度比 GCC 编译版本要快一些。我还用 clang9 和 zapcc 编译了 Xonotic 等游戏,其中 clang-9 的性能优于 zapcc-7.0 和 gcc 9.1.0。

结论

我认为用 clang 9 编译内核是个好主意。但 zapcc 现在还不能这样做。根据 zapcc 7.0 版和 clang 8.0.1 版(我已经尝试过):

scripts/kconfig/conf  --syncconfig Kconfig
Compiler lacks asm-goto support.

希望这可以帮助!

相关内容