GCCのビルド
GCCは、GNUプロジェクトによる各種プログラミング言語用のコンパイラ群です。
当初はC言語用のコンパイラでしたが、現在は、C++、Java、Fortranなど多くの言語に対応しています。
/tools以下の開発ツールでコンパイル・リンクされるため、Fedoraに依存しないGCCがビルド・インストールされます。
ソースファイルの展開
ソースファイルを展開します。
cd $MYLINUX/sources
tar xvf gcc-4.9.2.tar.bz2
cd gcc-4.9.2
cd $MYLINUX/sources

tar xvf gcc-4.9.2.tar.bz2

cd gcc-4.9.2

ソースファイルの修正
展開したソースファイルを修正します。
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > `dirname $($MYLINUX_TARGET-gcc -print-libgcc-file-name)`/include-fixed/limits.h
for file in $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h) ; do
sed -i -e 's,/lib\(64\)\?\(32\)\?/ld,/tools&,g' -e 's,/usr,/tools,g' $file
echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
done
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > `dirname $($MYLINUX_TARGET-gcc -print-libgcc-file-name)`/include-fixed/limits.h

for file in $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h) ; do

sed -i -e 's,/lib\(64\)\?\(32\)\?/ld,/tools&,g' -e 's,/usr,/tools,g' $file

echo '

#undef STANDARD_STARTFILE_PREFIX_1

#undef STANDARD_STARTFILE_PREFIX_2

#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"

#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file

done

他のソフトウェアのソースファイルの追加
展開したソースファイルに他のソフトウェアのソースファイルを追加します。
tar xvf ../gmp-5.1.3.tar.xz
mv gmp-5.1.3 gmp
tar xvf ../mpfr-3.1.2.tar.xz
mv mpfr-3.1.2 mpfr
tar xvf ../mpc-1.0.3.tar.gz
mv mpc-1.0.3 mpc
tar xvf ../gmp-5.1.3.tar.xz

mv gmp-5.1.3 gmp

tar xvf ../mpfr-3.1.2.tar.xz

mv mpfr-3.1.2 mpfr

tar xvf ../mpc-1.0.3.tar.gz

mv mpc-1.0.3 mpc

GMP(GNU Multi-Precision Library)は、高精度演算のライブラリです。
MPFR(Multi-Precision Floating-Point)は、高精度浮動小数点演算のライブラリです。
MPC(Multi-Precision Complex)は、高精度複素数のライブラリです。
GCCをビルドするには上記のライブラリが必要になります。
ビルド用ディレクトリの準備
ビルド用ディレクトリを準備します。
mkdir -vp ../gcc-build
cd ../gcc-build
mkdir -vp ../gcc-build

cd ../gcc-build

GCCでは、ソースファイルが置かれているディレクトリでのビルドは推奨されていません。
別にビルド用のディレクトリを用意し、そこでビルドを行うことが推奨されています。
configure
configureを実行します。
CC=$MYLINUX_TARGET-gcc CXX=$MYLINUX_TARGET-g++ AR=$MYLINUX_TARGET-ar RANLIB=$MYLINUX_TARGET-ranlib ../gcc-4.9.2/configure \
--prefix=/tools \
--enable-languages=c,c++ \
--disable-multilib \
--disable-libgomp \
--disable-libstdcxx-pch \
--disable-bootstrap \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include > ../../logs/configurelog.gcc 2>&1
CC=$MYLINUX_TARGET-gcc CXX=$MYLINUX_TARGET-g++ AR=$MYLINUX_TARGET-ar RANLIB=$MYLINUX_TARGET-ranlib ../gcc-4.9.2/configure \

--prefix=/tools \

--enable-languages=c,c++ \

--disable-multilib \

--disable-libgomp \

--disable-libstdcxx-pch \

--disable-bootstrap \

--with-local-prefix=/tools \

--with-native-system-header-dir=/tools/include > ../../logs/configurelog.gcc 2>&1

1回目のGCCのビルドでは、ターゲットプラットフォーム(--target=)を指定しましたが、今回は指定しません。
configureコマンドの前に、CC=$MYLINUX_TARGET-gcc CXX=$MYLINUX_TARGET-g++ AR=$MYLINUX_TARGET-ar RANLIB=$MYLINUX_TARGET-ranlibと記述しています。
上記の記述は、/tools/binディレクトリにある i686-mylinux-linux-gnu-gcc、i686-mylinux-linux-gnu-g++、i686-mylinux-linux-gnu-ar、i686-mylinux-linux-gnu-ranlibを使用するように設定するための記述です。
それらの実行ファイルは、Binutilsの1回目のビルドとGCCの1回目のビルドでインストールされた実行ファイル、つまり、クロス開発用の開発ツールです。
configureが終了したら、ログファイルに出力された内容を参照し、正常に終了したことを確認します。
cat ../../logs/configurelog.gcc
cat ../../logs/configurelog.gcc

ビルド
ビルドを実行します。
make
make

ビルドが終了したら、画面に出力された内容を参照し、正常に終了したことを確認します。
インストール
インストールを行います。
make install
make install

インストールが終了したら、画面に出力された内容を参照し、正常に終了したことを確認します。
インストール後の追加作業
インストール後の追加作業を行います。
gcc に cc という名称のシンボリックリンクを与えます。
ln -vsf gcc /tools/bin/cc
ln -vsf gcc /tools/bin/cc

今後の作業でビルドするソフトウェアの中にはコンパイラを cc で呼び出すものもあるかもしれません。
そこで、gcc に cc という名称のシンボリックリンクを与えています。
後始末
ディスクを圧迫しないよう、ビルド用のディレクトリを削除します。
cd ..
rm -fr gcc-4.9.2
rm -fr gcc-build
cd ..

rm -fr gcc-4.9.2

rm -fr gcc-build
