Clang4.0をUbuntuでビルドした話

Clang4.0をUbuntuでビルドしようとしたが、やたら時間がかかる。原因は・・・?
2

Clang4.0がでた

Akira Takahashi @cpp_akira

LLVM 4.0.0 Release Notes releases.llvm.org/4.0.0/docs/Rel… LLVM Coroutineというのができたらしい

2017-03-14 12:59:21

これはビルドせざるを得ない!(謎の使命感)

clangのビルドは伝統的なautoconfとGNUmakeでやるやり方は非推奨となっていて、cmakeを使うことが推奨されている。

cmake+GNUmakeでもよかったのだが、前からビルドが速いと噂のninjaを使ってみたかったので試してみることにした。

今回はmsys2上ではなくクロスコンパイルでもなく普通にUbuntuでビルドするので、

sudo apt install build-essential git cmake ninja-build golang-go libncurses5-dev swig libxml2-dev doxygen graphviz

あたりを入れておけば大丈夫でしょう(なんか抜けている気はするが)。

注意点としてclangのビルドにはC++11をコンパイルできる(MSVCは可)コンパイラが必要です。CentOSとか使ってるとgccのビルドからしないといけないかもね。

cmakeは自分はGUIでやりました。

cmakeのオプションはGUIでやっちゃったので
https://gist.githubusercontent.com/yumetodo/3667315003256630c24daa6ec83a7f6c/raw/74131e22529593c1e8b7755a3095f809b4dbbb5f/CMakeCache.txt
この辺見てください。

yumetodo @yumetodo

llvm4.0がらしいので、早速ビルドしている。cmake+ninjaでやったらninjaのデフォルトのスレッド数が8で快適にニコニコ動画を見れなくなったので慌てて-j3した。 pic.twitter.com/MjMHqoFm0A

2017-03-14 17:16:55
拡大
Theolizer @TheorideTech

@yumetodo うわっ、もう4.0なのか。速い。

2017-03-14 17:26:45

この頃は普通に動画見ながらビルドできた。

異変

yumetodo @yumetodo

メモリーがやばい。すべての操作が重い pic.twitter.com/JBq44l55uI

2017-03-14 17:40:13
拡大
リンク Twitter yumetodo-C++erだけど化学科 on Twitter “おいld自重しろ”

・・・4GB!?

yumetodo @yumetodo

-j2したらどっちともldが動いてああああってなったので驚きの-j1してきた。 それでも重い pic.twitter.com/7FohwjFYgr

2017-03-14 17:48:56
拡大
Theolizer @TheorideTech

@yumetodo がんば! 4.0のビルドってどれくらいの時間かかるのだろう? ちょっとこわひ。

2017-03-14 17:53:40
yumetodo @yumetodo

C++の仕組み的に、リンカーがメモリー食うのは仕方ない感ある。module入れば少しはマシになるんですかねぇ・・・

2017-03-14 17:54:04
yumetodo @yumetodo

こんなふうにninjaのlogみつつメモリー使用量監視しつつミッカさんの動画見てる pic.twitter.com/IU4NugeW2u

2017-03-14 18:09:33
拡大
yumetodo @yumetodo

再びスーパーリンクタイム来たので-j1した pic.twitter.com/YuUmymWo5r

2017-03-14 18:15:59
拡大
yumetodo @yumetodo

clangのldのメモリー消費量が尋常じゃない。物理メモリー(8GB)使い果たした pic.twitter.com/D3Dwqa6M3q

2017-03-14 18:20:55
拡大
yumetodo @yumetodo

お風呂入ってたらClangのビルド終わってた。途中のメモリー消費やばい pic.twitter.com/MsB0AYtHnf

2017-03-14 23:10:49
拡大
リンク Twitter yumetodo-C++erだけど化学科 on Twitter “お風呂入ってたらClangのビルド終わってた。途中のメモリー消費やばい”

脅威の、実メモリ7.4GB/8.0GB、HDD上のSwap11.4GB/18GB消費である。
Swapを多めに取っていなければ即死だった。

6時間に及ぶ死闘(コンパイル&リンク)が終了した・・・?

いちおうtest走らせるか、と思ったんだ

ええ、思ったんですよ。