Gentoo Advent Calendar 4日目 「portageで使うコンパイラとかそんな感じの話」

http://www.adventar.org/calendars/1493
この記事は,Gentoo Advent Calendar 2016 4日目の記事です.


記事のあらまし:Gentoo/Linuxでは,portageのCC/CXXにgcc/g++以外も利用できるよ!でも一部のパッケージはgcc/g++以外のコンパイラだとビルドに失敗するから注意な!*1


Gentoo/Linuxを利用している皆さんは,その仕組み上,他の人よりも多くのコンパイルを行うでしょう.Gentoo/Linuxは,以下に示すように複数のC/C++コンパイラをパッケージとして提供しています.

  • sys-devel/gcc
  • sys-devel/clang
  • dev-lang/icc

Gentoo/LinuxのデフォルトのCC/CXXはgcc/g++です.しかし,ビルド速度や実行速度の面から別のコンパイラを試してみたいと思うこともあるでしょう.

Gentoo/Linuxでは,gcc/g++以外をデフォルトのコンパイラとして利用できます.設定はわずか3ステップです.

  • make.confに環境変数CC/CXXをセットする(下2つビルド失敗時のフォールバック用の作業)
  • 環境変数CC/CXXをgcc/g++とする記述を /etc/portage/env/compiler-gcc という名前で保存
  • ビルドに失敗したパッケージに対して,compiler-gccを参照してCC/CXXをgcc/g++にするよう /etc/portage/package.env に記述

具体的な記述方法は,以下のURLを参照してください.
https://wiki.gentoo.org/wiki/Clang#Setting_up_GCC_fallback_environments

暫くシステムのCC/CXXをclang/clang++にして生活した結果,体感ではだいたいのパッケージが問題なくビルドできています.しかし,一部のパッケージはビルドに失敗しました.以下,package.envを眺めながら「ビルドに失敗したパッケージとその原因」を列挙します.

  • sys-devel/gcc

gccをclangでビルドしようとすると盛大に失敗します.仕方ないね.
追記:追試したらclang-3.7.1でgcc-4.9.3のビルドに成功した.

単純にコンパイラのバージョンチェックで失敗しました.clangのバージョン数が上がっていけば解決するのだろうか.

Sorry, but gcc-4.4 and earlier won't work for libreoffice-bin package (see bug #387515).

  • app-text/aspell

何も言わずにこける.clang側で非対応なGCC拡張でも利用しているのだろうか.

OpenMP compatible compilerを使え」と怒られてabortしてしまった.何も考えずにgccにフォールバックしたが,OpenMP対応を追加してビルドしなおせばclangでも通りそう.




特に山もオチも無い記事でしたが,あなたもコンパイラを変えて装い新たなGentoo/Linuxを使ってみませんか?*2

*1: 走り書きを検証する元気と時間がない

*2: 特にICC