
dockerでcontainerイメージを作成する際に、内部のプログラムを使用するときは基本的にgnu gcc/g++を使用すると思います。
基本中の基本だと思うので、特別な要件が無ければ他のコンパイラを使用することはないと思います
が、最近の流れからどうなんだろうなぁということで、clangを使用するようにしてみました。
clangを使用するうえでよく言われているのは、コンパイルの速度が速いことが挙げられます(エラー内容が分かりやすいというのもありますが、今回はbuildが対象なので挙げません)。
とはいえ、自分が良く使用する環境はAArch64なArm SBCばかりなので、大きな恩恵を受けるわけではありませんが。
それでも体感的に速くなったと思います(UnboundやNSDなんかはだいぶ向上しました。ただ、timeなどでデータを取るのを忘れていました)。
他にもこの際だからということで、リンカ/linkerをgnu.ldからlldに変更してみました。
LDFLAGS="-fuse-ld=lld"
これについてはさすがにArm SBC上で大きなプログラムをbuildすることがないので、お約束程度ですね。
今回は最適化を”-O4
“でしていますが、Dockerなどのcontainerを使用する意味では、サイズを優先した方がいいんですかね・・・? この辺りは性能とのトレードオフだと思うので、私はパフォーマンスに振るようにしましたが。
この辺りのお作法はいまだによく分かっていないので、引き続き勉強が必要な感じです。
科学計算のプログラムを弄ることがあればこの辺りの知識は必須なんでしょうが、勉強する機会に恵まれず・・・
ちなみに自分のレポジトリは以下にあります。
kometchtech/docker-build: personal docker build for armhf and aarch64
makeの他にcmakeがあるのは知っていたのですが、他にもninjaという名のものもあるんですね。この辺り本当に知りませんでした。