好奇心から、Linuxカーネルをclangとzapccの両方のコンパイラでコンパイルすることに興味があります。一つずつ。
フォローするガイドが見つかりません。 Linuxカーネルのコンパイルに使用されているのはGCCだけです。
Linuxカーネルを他のコンパイラーでコンパイルするにはどうすればよいですか?
カーネルビルドでは、使用するツールを指定できます。たとえば、Cコンパイラを指定するには、CC
およびHOSTCC
変数を設定します。
make CC=clang HOSTCC=clang
ビルドはGCCでのみ成功すると予想されますが、 代わりにClangを使用 に関心がある人々がいて、状況によっては動作することが知られています(一部のAndroidカーネルはClangで構築された)。
スティーブン・キットの答えに感謝します。 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.
お役に立てれば!