出于好奇,我有兴趣使用以下两种方法来编译 Linux 内核:铛和扎普克编译器;一次一个。
我找不到可遵循的指南。只有 GCC 正在被用来编译 Linux 内核。
如何使用其他编译器编译Linux内核?
答案1
内核构建允许您指定要使用的工具;例如,要指定 C 编译器,请设置CC
和HOSTCC
变量:
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.
希望这可以帮助!