Clangを使ってLinuxカーネルをコンパイルする方法は? [閉鎖]

Clangを使ってLinuxカーネルをコンパイルする方法は? [閉鎖]

好奇心が強いので、次の2つの方法を使用してLinuxカーネルをコンパイルすることに興味があります。その音そしてジャフケ一度に1つずつコンパイラ。

フォローするガイドが見つかりません。 LinuxカーネルのコンパイルにはGCCのみが使用されます。

別のコンパイラを使用してLinuxカーネルをコンパイルする方法は?

答え1

カーネルビルドでは、使用するツールを指定できます。たとえば、Cコンパイラを指定し、CC変数HOSTCCを設定します。

make CC=clang HOSTCC=clang

このビルドはGCCでのみ成功すると予想されますが、興味のある人がいます。代わりにClangを使用してください、場合によっては動作することが知られています(一部のAndroidカーネルはClangで構築されています)。

答え2

答えてくれたStephen Kittに感謝します。 Clangを使用してLinuxカーネルをコンパイルできます。しかし、Clang v9.0が必要です。

構成

Arch Linuxを使用している場合は、v9.0を直接コンパイルせずにclangするのに最適な方法があります。

# 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はまだこれを行うことができません。 zapccバージョン7.0とclangバージョン8.0.1(私が試した)によると:

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

役に立ったことを願っています!

関連情報