web-dev-qa-db-ja.com

LinuxカーネルをClangでコンパイルするにはどうすればよいですか?

好奇心から、Linuxカーネルをclangzapccの両方のコンパイラでコンパイルすることに興味があります。一つずつ。

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

Linuxカーネルを他のコンパイラーでコンパイルするにはどうすればよいですか?

2
S.Goswami

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

make CC=clang HOSTCC=clang

ビルドはGCCでのみ成功すると予想されますが、 代わりにClangを使用 に関心がある人々がいて、状況によっては動作することが知られています(一部のAndroidカーネルはClangで構築された)。

8
Stephen Kitt

スティーブン・キットの答えに感謝します。 LinuxカーネルをClangでコンパイルすることは可能です。ただし、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を入手したら、 here から任意のカーネルをダウンロードします。

エイリアスされた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コンパイルバージョンよりも少し高速に動作しています。 Xonoticのようなゲームをclang9とzapccでコンパイルしました。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.

お役に立てれば!

4
S.Goswami