gcc の HEAD をビルドするときの備忘録
Hyper-V 上の仮想環境を消して WSL2 に移行しようとしたら色々環境構築を忘れていたのでメモ。
Wandbox のビルドスクリプト を非常に参考にしている (というかほぼ丸パクリ)。備忘録なので許して。
環境は Ubuntu on WSL2 だが、apt を適当なパッケージマネージャに置き換えれば他のディストリでも問題ない気がする。
前準備
適当なディレクトリを作って移動する。今回は~/gcc-head/
。
mkdir gcc-head cd gcc-head
ソースを持ってくる
github のミラーからsource
ディレクトリにソースを持ってくる。
このとき--depth 1
をつけると最新コミットだけ持ってくるので clone が速くなる。
git clone --depth 1 https://github.com/gcc-mirror/gcc.git source
必要なもののインストール
gcc にはビルドに必要なツールを一括で入れる方法が用意されている…と思いきや、なぜか flex だけインストールされなかったので追加で apt install する。
cd source ./contrib/download_prerequisites sudo apt install flex cd ..
contrib/download_prerequisites
が (名前の通り) 必要なものを一括で入れてくれるものなのだが、最初にcd source
しておかないと動いてくれないので注意。
終わったらsource
から出ている。
スクリプトを書く
後はほぼビルドするだけなのだが、コマンドが長いので適当なスクリプトファイルに書いてから実行したほうが良いと思う。上記の wandbox のスクリプトを参考にしつつ以下のようなスクリプトを書いてbuilder.sh
として保存。
PREFIX="$HOME/bin" mkdir build cd build ../source/configure \ --prefix=$PREFIX \ --enable-languages=c,c++ \ --disable-multilib \ --without-ppl \ --without-cloog-ppl \ --enable-checking=release \ --disable-nls \ --enable-lto \ LDFLAGS="-Wl,-rpath,$PREFIX/lib,-rpath,$PREFIX/lib64,-rpath,$PREFIx/lib32" make -j2 make install
環境変数 PREFIX
で指定したディレクトリ以下にインストールされるので/usr/local
なりに適当に変えると良さそう。オプションの雑な意味としては以下。gcc のページ を見るとちゃんとした解説があるのでそちらを見たほうが良い。
オプション | 説明 |
---|---|
--enable-languages=c,c++ | C と C++ のみ有効にする |
--disable-multilib | 64bit 向けのバイナリのみを吐けるようにする *1 |
--without-ppl | PPL という古の幾何計算ライブラリっぽいのを使わなくなる |
--without-cloog-ppl | ほぼ同上 |
--enable-checking=release | ビルドしたバイナリに余計なデバッグ機能を含めない |
--disable-nls | 診断メッセージの言語としてアメリカ英語以外を使えなくなる |
--enable-lto | リンク時の最適化を有効化する |
LDFLAGS=... | リンク用のディレクトリを指定する。-Wl は以降の , を半角スペースに置換してくれる |
インストールする
. builder.sh
としていっぱい待つと$PREFIX/bin
以下にバイナリができている。
*1:32bit 環境をターゲットに開発したいならそれ用の libc などを入れておく必要がある