(その1)からの続き
p39 5.8. Adjusting the Toolchain
ここまでで一時的な環境は整った。ここからのツールのコンパイルはこの環境に対してリンクする。
1 2 3 4 5 6 7 8 9 |
$ SPECS=`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/specs $ $LFS_TGT-gcc -dumpspecs | sed \ > -e 's@/lib\(64\)\?/ld@/tools&@g' \ > -e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS $ echo "New specs file is: $SPECS" New specs file is: /mnt/lfs/tools/bin/../lib/gcc/i686-lfs-linux-gnu/4.6.2/specs $ unset SPECS $ cat /mnt/lfs/tools/lib/gcc/i686-lfs-linux-gnu/4.6.2/specs |less ... |
ここまでちゃんとできているかチェックする。
1 2 3 4 5 6 |
$ cd $ echo 'main(){}' > dummy.c $ $LFS_TGT-gcc -B/tools/lib dummy.c $ readelf -l a.out | grep ': /tools' [Requesting program interpreter: /tools/lib/ld-linux.so.2] $ |
上のように表示されていれば無問題
5.9. Binutils-2.22 – Pass 2
1 2 3 4 5 6 7 8 9 |
$ cd /mnt/lfs/sources/ $ rm -rf binutils-2.22 binutils-build/ $ tar xfjv binutils-2.22.tar.bz2 $ mkdir binutils-build $ cd binutils-build/ $ CC="$LFS_TGT-gcc -B/tools/lib/" \ > AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \ > ../binutils-2.22/configure --prefix=/tools \ > --disable-nls --with-lib-path=/tools/lib |
今回はホストのGCCとツールを使わずに、今までつくったやつでやる。
1 2 |
$ make $ make install |
よく分からん
1 2 3 |
$ make -C ld clean $ make -C ld LIB_PATH=/usr/lib:/lib $ cp -v ld/ld-new /tools/bin |
5.10. GCC-4.6.2 – Pass 2
1 2 3 |
$ cd /mnt/lfs/sources/ $ rm -rf gcc-4.6.2 gcc-build/ $ tar xfvj gcc-4.6.2.tar.bz2 |
パッチを当てる。
1 2 3 4 5 |
$ cd gcc-4.6.2 $ patch -Np1 -i ../gcc-4.6.2-startfiles_fix-1.patch patching file gcc/gcc.c Hunk #1 succeeded at 6390 with fuzz 1 (offset 20 lines). $ |
fixincludesスクリプトを実行しないようにする。
1 2 3 4 5 6 7 8 9 |
$ cp -v gcc/Makefile.in{,.orig} `gcc/Makefile.in' -> `gcc/Makefile.in.orig' $ sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in $ diff gcc/Makefile.in.orig gcc/Makefile.in 4171c4171 < $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \ --- > $(SHELL) -c true "$${gcc_dir}/$${fix_dir}" \ $ |
-fomit-frame-pointerをつける
1 2 3 4 5 6 7 8 9 10 |
$ cp -v gcc/Makefile.in{,.tmp} `gcc/Makefile.in' -> `gcc/Makefile.in.tmp' $ sed 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \ > > gcc/Makefile.in $ diff gcc/Makefile.in.tmp gcc/Makefile.in 134c134 < T_CFLAGS = --- > T_CFLAGS = -fomit-frame-pointer $ |
これからビルドするGCCが/libや/usr/includeを見ないようにする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
$ 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/config/m32r/linux.h' -> `gcc/config/m32r/linux.h.orig' `gcc/config/cris/linux.h' -> `gcc/config/cris/linux.h.orig' `gcc/config/bfin/linux.h' -> `gcc/config/bfin/linux.h.orig' `gcc/config/sh/linux.h' -> `gcc/config/sh/linux.h.orig' `gcc/config/ia64/sysv4.h' -> `gcc/config/ia64/sysv4.h.orig' `gcc/config/ia64/linux.h' -> `gcc/config/ia64/linux.h.orig' `gcc/config/m68k/linux.h' -> `gcc/config/m68k/linux.h.orig' `gcc/config/mips/linux64.h' -> `gcc/config/mips/linux64.h.orig' `gcc/config/mips/linux.h' -> `gcc/config/mips/linux.h.orig' `gcc/config/sparc/linux64.h' -> `gcc/config/sparc/linux64.h.orig' `gcc/config/sparc/sysv4.h' -> `gcc/config/sparc/sysv4.h.orig' `gcc/config/sparc/linux.h' -> `gcc/config/sparc/linux.h.orig' `gcc/config/microblaze/linux.h' -> `gcc/config/microblaze/linux.h.orig' `gcc/config/rs6000/linux64.h' -> `gcc/config/rs6000/linux64.h.orig' `gcc/config/rs6000/sysv4.h' -> `gcc/config/rs6000/sysv4.h.orig' `gcc/config/rs6000/linux.h' -> `gcc/config/rs6000/linux.h.orig' `gcc/config/mn10300/linux.h' -> `gcc/config/mn10300/linux.h.orig' `gcc/config/vax/linux.h' -> `gcc/config/vax/linux.h.orig' `gcc/config/alpha/linux.h' -> `gcc/config/alpha/linux.h.orig' `gcc/config/i386/linux64.h' -> `gcc/config/i386/linux64.h.orig' `gcc/config/i386/sysv4.h' -> `gcc/config/i386/sysv4.h.orig' `gcc/config/i386/linux.h' -> `gcc/config/i386/linux.h.orig' `gcc/config/xtensa/linux.h' -> `gcc/config/xtensa/linux.h.orig' `gcc/config/frv/linux.h' -> `gcc/config/frv/linux.h.orig' `gcc/config/linux.h' -> `gcc/config/linux.h.orig' `gcc/config/s390/linux.h' -> `gcc/config/s390/linux.h.orig' $ |
1 2 3 4 5 6 7 8 9 10 |
$ tar -jxf ../mpfr-3.1.0.tar.bz2 $ mv -v mpfr-3.1.0 mpfr `mpfr-3.1.0' -> `mpfr' $ tar -Jxf ../gmp-5.0.4.tar.xz $ mv -v gmp-5.0.4 gmp `gmp-5.0.4' -> `gmp' $ tar -zxf ../mpc-0.9.tar.gz $ mv -v mpc-0.9 mpc `mpc-0.9' -> `mpc' $ |
1 2 3 4 |
$ mkdir -v ../gcc-build mkdir: created directory `../gcc-build' $ cd ../gcc-build $ |
コンフィグする。
1 2 3 4 5 6 7 8 9 10 11 |
$ CC="$LFS_TGT-gcc -B/tools/lib/" \ > AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \ > ../gcc-4.6.2/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 --disable-libgomp \ > --without-ppl --without-cloog \ > --with-mpfr-include=$(pwd)/../gcc-4.6.2/mpfr/src \ > --with-mpfr-lib=$(pwd)/mpfr/src/.libs |
–enable-clocale=gnu
ただしいgnuロカールモデルを選択する。
–enable-__cxa_atexit
スタティックなインスタンスのデストラクタのための関数らしい。
–disable-bootstrap
デフォルトでは3回コンパイルするらしいのをしないようにする。
1 2 |
$ make $ make install |
1 |
$ ln -vs gcc /tools/bin/cc |
1 2 3 4 5 |
$ echo 'main(){}' > dummy.c $ cc dummy.c $ readelf -l a.out | grep ': /tools' [Requesting program interpreter: /tools/lib/ld-linux.so.2] $ |
ダイナミックリンカが/tools/lib/ld-linux.so.2を読み込むようになった。
5.11. Tcl-8.5.11
TclとこれからインストールするExpect, DejaGNU, Checkはテストツールで使われるのでインストールする。
1 2 3 4 5 |
$ cd /mnt/lfs/sources/ $ tar xfvz tcl8.5.11-src.tar.gz $ cd tcl8.5.11/unix/ $ ./configure --prefix=/tools $ make |
テストしてインストール
1 2 |
$ TZ=UTC make test $ make install |
後でデバッグシンボルを削除するから書き込めるようにするらしい
1 |
$ chmod -v u+w /tools/lib/libtcl8.5.so |
TCLのヘッダをインストールする。Expectが使う。
1 |
$ make install-private-headers |
シンボリックリンクを張る。
1 2 3 |
$ ln -sv tclsh8.5 /tools/bin/tclsh `/tools/bin/tclsh' -> `tclsh8.5' $ |
5.12. Expect-5.45
対話型インタプリタと会話するツール
1 2 3 |
$ cd /mnt/lfs/sources/ $ tar xfvz expect5.45.tar.gz $ cd expect5.45 |
configureが/usr/local/bin/sttyを見ないで/bin/sttyを見るようにする。
1 2 3 4 5 6 7 8 9 |
$ sed 's:/usr/local/bin:/bin:' configure.orig > configure $ diff configure.orig configure 13411,13412c13411,13412 < if test -r /usr/local/bin/stty ; then < STTY_BIN=/usr/local/bin/stty --- > if test -r /bin/stty ; then > STTY_BIN=/bin/stty $ |
configureする。
1 |
$ ./configure --prefix=/tools --with-tcl=/tools/lib --with-tclinclude=/tools/include |
1 2 |
$ make $ make test |
インストールする。
1 |
$ make SCRIPTS="" install |
補助的なスクリプトはインストールしない。
5.13. DejaGNU-1.5
1 2 3 4 5 6 |
$ cd /mnt/lfs/sources/ $ tar xfvz dejagnu-1.5.tar.gz $ cd dejagnu-1.5 $ ./configure --prefix=/tools $ make install $ make check |
5.14. Check-0.9.8
make checkに時間がかかる。
1 2 3 4 5 6 7 |
$ cd /mnt/lfs/sources/ $ tar xfvz check-0.9.8.tar.gz $ cd check-0.9.8 $ ./configure --prefix=/tools $ make $ make check $ make install |
まだ続く。