Kernel
如何使用 Clang 編譯 Linux 核心?
只是出於好奇,我對使用clang和zapcc編譯器編譯 Linux 核心很感興趣;一次一個。
我找不到要遵循的指南。只有 GCC 習慣於編譯 Linux 核心。
如何使用其他編譯器編譯 Linux 核心?
核心建構允許您指定要使用的工具;例如,要指定 C 編譯器,請設置
CC
和HOSTCC
變數: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.
希望這可以幫助!