Kernel

如何使用 Clang 編譯 Linux 核心?

  • October 8, 2019

只是出於好奇,我對使用clangzapcc編譯器編譯 Linux 核心很感興趣;一次一個。

我找不到要遵循的指南。只有 GCC 習慣於編譯 Linux 核心。

如何使用其他編譯器編譯 Linux 核心?

核心建構允許您指定要使用的工具;例如,要指定 C 編譯器,請設置CCHOSTCC變數:

make CC=clang HOSTCC=clang

該建構預計只能使用 GCC 成功,但有人對使用 Clang感興趣,並且已知它在某些情況下可以工作(某些 Android 核心是使用 Clang 建構的)。

感謝斯蒂芬基特的回答。可以使用 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.

希望這可以幫助!

引用自:https://unix.stackexchange.com/questions/544690