gcc をソースからビルドする1

はじめに

システムエンジニアとしては、自動化と処理速度を気にしてしまう。
GCCをソースからビルドして、今後のビルド時間を短縮させるための作業の記録を残す。

環境

i386 アーキテクト
 virtual box 4.1.10
Ubuntu 11.10( Guest OS )
gcc 4.6-base( 今回インストールするもの )

準備

ソースのダウンロード

gcc-4.6-base を使う。
mkdir -p /home/andre/work/gcc/gcc
cd /home/andre/work/gcc/gcc
apt-get source gcc-4.6-base

最適化のため、debian/rules2を編集する。
【変更前】 CONFARGS += --with-tune=generic
【変更後】 CONFARGS += --with-tune=core2

build-essential パッケージのインストール

バイナリパッケージとソースパッケージをビルドする作業をすべてやってくれるみたい。よくわからんが、コマンド1つでみんなやってくれるみたい。

andre@andre-VirtualBox:~/work/gcc/gcc$ sudo apt-get install build-essential
[sudo] password for andre:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
build-essential はすでに最新バージョンです。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 395 個。

最新だったようだ。

依存パッケージのインストール

下記にgcc-4.6に必要なパッケージを示す。
i386以外のものも含む。
今回インストールしたものは、バージョンが記載されている。すでにインストールされていたものは、バージョンが「-」だったりする

最終的に、すべてインストールすると10Gくらい容量が増えていた。

依存パッケージ名 インストールバージョン
dpkg-dev (>= 1.16.0~ubuntu4) 1.16.0.3ubuntu5.1
debhelper (>= 5.0.62) 8.9.0ubuntu1
g++-4.4 [armel] -
g++-multilib [amd64 armel armhf i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc] 4:4.6.1-2ubuntu5
g++-4.4 [kfreebsd-amd64 kfreebsd-i386] -
libc6.1-dev (>= 2.13-0ubuntu6) [alpha ia64] -
libc0.3-dev (>= 2.13-0ubuntu6) [hurd-i386] -
libc0.1-dev (>= 2.13-0ubuntu6) [kfreebsd-i386 kfreebsd-amd64] -
libc6-dev (>= 2.13-0ubuntu6) -
libc6-dev-amd64 [i386] 2.13-20ubuntu5.1
libc6-dev-sparc64 [sparc] -
libc6-dev-s390 [s390x] -
libc6-dev-s390x [s390] -
libc6-dev-i386 [amd64] -
libc6-dev-powerpc [ppc64] -
libc6-dev-ppc64 [powerpc] -
libc0.1-dev-i386 [kfreebsd-amd64] -
lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x] -
lib64gcc1 [i386 powerpc sparc s390] 1:4.6.1-9ubuntu3
libc6-dev-mips64 [mips mipsel] -
libc6-dev-mipsn32 [mips mipsel] -
libc6-dev-armhf [armel] -
m4 1.4.16-1
libtool 2.4-2ubuntu1
autoconf2.64 2.64-3
automake (>= 1:1.11) 1:1.11.1-1ubuntu1
automake (<< 1:1.12) -
libunwind7-dev (>= 0.98.5-6) [ia64] -
libatomic-ops-dev [ia64] -
zlib1g-dev 1:1.2.3.4.dfsg-3ubuntu3
gawk 1:3.1.8+dfsg-0.1build1
lzma 4.43-14ubuntu2
xz-utils 5.0.0-2
patchutils 0.3.2-1
binutils (>= 2.21.51~) 2.21.53.20110810-0ubuntu5.1
binutils-multiarch (>= 2.21.51~) -
binutils-hppa64 (>= 2.21.51~) [hppa] -
gperf (>= 3.0.1) 3.0.3-1build3
bison (>= 1:2.3) 1:2.4.1.dfsg-3
flex 2.5.35-10ubuntu1
gettext 0.18.1.1-3ubuntu1
texinfo (>= 4.3) 4.13a.dfsg.1-8ubuntu1
locales [!knetbsd-i386 !knetbsd-alpha] -
procps 1:3.2.8-10ubuntu3
sharutils 1:4.11-1
binutils-spu (>= 2.21.51~) [powerpc ppc64] -
newlib-spu (>= 1.16.0) [powerpc ppc64] -
libcloog-ppl-dev (>= 0.15.9-2~) 0.15.9-3
libmpc-dev 0.9-3
libmpfr-dev (>= 3.0.0-9~) 3.0.1-5
libgmp-dev (>= 2:5.0.1~) 2:5.0.1+dfsg-7ubuntu2
libelfg0-dev (>= 0.8.12) 0.8.13-3
dejagnu [!m68k !hurd-i386 !hurd-alpha] 1.4.4.git20080407-1.1
autogen 1:5.12-0.1ubuntu1
realpath (>= 1.9.12) 1.15build1
chrpath 0.13-2build2
lsb-release 4.0-0ubuntu11
make (>= 3.81) GNU Make 3.81
quilt 0.48-7
doxygen (>= 1.7.2) 1.7.3-6ubuntu1
graphviz (>= 2.2) 2.26.3-5ubuntu4
gsfonts-x11 0.22
texlive-latex-base 2009-13
メモ:

gpref をソースからインストールしようとしたとき、stubs-32.h がないと怒られたので、リンクを貼った。
cd /usr/include/gnu
sudo ln -s /usr/include/i386-linux-gnu/gnu/stubs-32.h stubs-32.h

[エラーメッセージ]
make[1]: ディレクトリ `/home/andre/work/gperf/gperf-3.0.3/lib' に入ります
ccache gcc -g -O2 -I. -c ./getopt.c
In file included from /usr/include/features.h:388:0,
from /usr/include/stdio.h:28,
from ./getopt.c:42:
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory
compilation terminated.
make[1]: *** [getopt.o] エラー 1
make[1]: ディレクトリ `/home/andre/work/gperf/gperf-3.0.3/lib' から出ます
make: *** [all] エラー 2

(続く)