linuxカーネルのビルドが謎の失敗 ~ こんにちは、そしてさようならkbuild cache

linuxカーネルのmake実行時に、途中で呼ばれるshellコマンドをキャッシュしておくkbuild cacheという機能がlinux v4.15に追加されました。

github.com

しかしこの機能は色々なコーナーケースに対処しきれておらず、原因不明のビルドエラーが発生することがわかったためにlinux v4.18では早くも削除される見込みです。

github.com

キャッシュした結果はソースディレクトリの直下、.cache.mkファイルに保存されているため、これまで起きなかった謎のビルドエラーが発生した場合は当該ファイルを削除すると問題が起きなくなる可能性があります。

なぜ私がこんなことを知っているかというと、自分がまさにkbuild cacheが原因のビルドエラーに遭遇したからです。具体的にはlinux v4.17.4においてmakeコマンドを実行したら" Compiler lacks asm-goto support."というメッセージと共に失敗しました*1。手持ちのコンパイラは"asm-gcc"機能をサポートしているにも関わらず、です。この事象は上記の通り.cache.mkを削除すると起きなくなりました。

このトラブルシューティングによって30分溶けました。みなさんもお気を付けください。以上

*1:make helpやmake cleanでさえも動かない