LFS on Ubuntu(5) 一時的環境の構築 (GCC-4.4.3 - 2回目〜)

部分的に GCC の古い機能を復活させるパッチを適用

$ cd $LFS/sources/gcc-4.4.3
$ patch -Np1 -i ../gcc-4.4.3-startfiles_fix-1.patch

fixincludes スクリプトの実行を無効とする

$ cp -v gcc/Makefile.in{,.orig}
$ sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in

コンパイラフラグ -fomit-frame-pointer を有効化

$ cp -v gcc/Makefile.in{,.tmp}
$ sed 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
  > gcc/Makefile.in

すべての実行モジュール類を新しい Glibc に対してリンクする

$ cd gcc-4.4.3

for file in \
 $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
  cp -uv $file{,.orig}
  sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
  -e 's@/usr@/tools@g' $file.orig > $file
  echo '
#undef STANDARD_INCLUDE_DIR
#define STANDARD_INCLUDE_DIR 0
#define STANDARD_STARTFILE_PREFIX_1 ""
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
  touch $file.orig
done

GCC のインストール

$ rm -rf gcc-build
$ tar -jxf mpfr-2.4.2.tar.bz2
$ mv -v mpfr-2.4.2 ./gcc-4.4.3/mpfr
$ tar -jxf gmp-5.0.0.tar.bz2
$ mv -v gmp-5.0.0 ./gcc-4.4.3/gmp
$ mkdir -v gcc-build
$ cd gcc-build
$ CC="$LFS_TGT-gcc -B/tools/lib/" \
    AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
    ../gcc-4.4.3/configure --prefix=/tools \
    --with-local-prefix=/tools --enable-clocale=gnu \
    --enable-shared --enable-threads=posix \
    --enable-__cxa_atexit --enable-languages=c,c++ \
    --disable-libstdcxx-pch --disable-multilib \
    --disable-bootstrap
$ make
// 超長い(笑)
$ make install

シンボリックリンクの作成

$ ln -vs gcc /tools/bin/cc

健全性検査 (sanity check)

echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'

テストファイルの削除

rm -v dummy.c a.out

Tcl のインストール

$ tar zxvf tcl8.5.8-src.tar.gz
$ cd tcl8.5.8/unix
$ ./configure --prefix=/tools
$ make

// テストスイート
$ TZ=UTC make test

$ make install

インストールされたライブラリを書き込み可能にし、後でデバッグシンボルを削除できるようにする

chmod -v u+w /tools/lib/libtcl8.5.so

Tcl のヘッダファイルをインストール

make install-private-headers

必要となるシンボリックリンクを生成

ln -sv tclsh8.5 /tools/bin/tclsh