First Pass
----------
load compiletc extension

export CFLAGS="-march=i486 -mtune=i686 -Os -pipe"
export CXXFLAGS="-march=i486 -mtune=i686 -Os -pipe -fno-exceptions -fno-rtti"

sudo ln -s /mnt/sdb1/tools /

export PATH=/tools/bin:$PATH

Binutils-2.17
-------------
load texinfo extension

mkdir ../binutils-build
cd ../binutils-build
CC="gcc -B/usr/bin/" ../binutils-2.17/configure --prefix=/tools --disable-nls --disable-werror

edit Makefile
MAKEINFO = /usr/src/binutils-2.17/missing makeinfo -> MAKEINFO = makeinfo

make [real    1m 59.84s]
sudo make install

make -C ld clean
make -C ld LIB_PATH=/tools/lib
sudo cp ld/ld-new /tools/bin

GCC-4.2.2
---------
mkdir ../gcc-build
cd ../gcc-build

export CXXFLAGS="-march=i486 -mtune=i686 -Os -pipe -fno-exceptions"
[gcc make fails with -fno-rtti]

CC="gcc -B/usr/bin/" ../gcc-4.2.2/configure --prefix=/tools --with-local-prefix=/tools --disable-nls --enable-shared --enable-languages=c

make bootstrap [real    44m 26.11s]
sudo make install

sudo ln -s gcc /tools/bin/cc

linux-2.6.29.1-tinycore
-----------------------
load perl extension

make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
sudo cp -r dest/include/* /tools/include

glibc-2.9
---------
load gperf extension

unset CFLAGS
unset CXXFLAGS

mkdir ../glibc-build  
cd ../glibc-build

echo "CFLAGS += -march=i486 -mtune=i686 -pipe" > configparms
[-Os gives undefined reference to `fstatat64' error]

../glibc-2.9/configure --prefix=/tools --disable-profile --enable-add-ons --enable-kernel=2.6.16 --with-headers=/tools/include --enable-omitfp libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

make [real    20m 58.17s]
sudo touch /tools/etc/ld.so.conf 
sudo make install

adjust toolchain
----------------
$ gcc -dumpmachine
i686-pc-linux-gnu

sudo mv /tools/bin/ld /tools/bin/ld-old
sudo mv /tools/i686-pc-linux-gnu/bin/ld /tools/i686-pc-linux-gnu/bin/ld-old
sudo mv /tools/bin/ld-new /tools/bin/ld
sudo ln -s /tools/bin/ld /tools/i686-pc-linux-gnu/bin/ld

$ gcc -dumpspecs > /mnt/sda1/source/build_glib/09_04_15/gcc_specs_pass_1
$ gcc -print-libgcc-file-name
/mnt/sdb1/tools/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/libgcc.a
[i.e. /tools/lib/gcc/i686-pc-linux-gnu/4.2.2/libgcc.a]

gcc -dumpspecs | sed 's@^/lib/ld-linux.so.2@//tools&@g' > /mnt/sda1/source/build_glib/09_04_15/gcc_specs_pass_1_adjust

[doesn't work - do manually]

sudo cp /mnt/sda1/source/build_glib/09_04_15/gcc_specs_pass_1_adjust /tools/lib/gcc/i686-pc-linux-gnu/4.2.2/specs

sudo find /tools/lib/gcc/i686-pc-linux-gnu/4.2.2/include/* -maxdepth 0 -xtype d -exec rm -rf '{}' \;
rm -f `grep -l "DO NOT EDIT THIS FILE" /tools/lib/gcc/i686-pc-linux-gnu/4.2.2/include/*`

test
----
$ echo 'main(){}' > dummy.c
$ gcc -B/tools/lib dummy.c
$ readelf -l a.out | grep ': /tools'
      [Requesting program interpreter: /tools/lib/ld-linux.so.2]

second pass
-----------
-----------

export CFLAGS="-march=i486 -mtune=i686 -Os -pipe"
export CXXFLAGS="-march=i486 -mtune=i686 -Os -pipe -fno-exceptions" [gcc]

GCC-4.2.2
---------
tce-load /mnt/sda1/source/buildtc/08_12_05/gperf.tce

cp gcc/Makefile.in gcc/Makefile.in.orig
sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in

cp gcc/Makefile.in gcc/Makefile.in.tmp
sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp > gcc/Makefile.in

patch -Np1 -i ../gcc-4.1.2-specs-1.patch
[do manually]

mkdir ../gcc-build
cd ../gcc-build

../gcc-4.2.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

make [real    1h 12m 28s]
sudo make install

Binutils-2.17
-------------
export CXXFLAGS="-march=i486 -mtune=i686 -Os -pipe -fno-exceptions -fno-rtti"

mkdir ../binutils-build
cd ../binutils-build

../binutils-2.17/configure --prefix=/tools --disable-nls --with-lib-path=/tools/lib

Edit Makefile
MAKEINFO = /usr/src/binutils-2.17/missing makeinfo -> MAKEINFO = makeinfo

make [real    3m 48.74s]
sudo make install

make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
sudo cp ld/ld-new /tools/bin

Ncurses-5.6 [problem with libstdc++ in tc_1.x base]
-----------
./configure --prefix=/tools --with-shared --without-debug --without-ada --enable-overwrite

make
sudo make install

Bash-3.2
--------
patch -Np1 -i ../bash-3.2-fixes-5.patch

./configure --prefix=/tools --without-bash-malloc

make
sudo make install

sudo ln -s bash /tools/bin/sh

Bzip2-1.0.4
-----------
make

sudo make PREFIX=/tools install

Coreutils-6.12 [6.9 gives error]
-------------
load gperf and perl extensions

./configure --prefix=/tools

make
sudo make install

sudo cp src/su /tools/bin/su-tools

Diffutils-2.8.1
---------------
./configure --prefix=/tools

make
sudo make install

Findutils-4.2.31
----------------
./configure --prefix=/tools

make
sudo make install

Gawk-3.1.5
----------
./configure --prefix=/tools

$ cat >> config.h << "EOF"
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF

make
sudo make install

Gettext-0.16.1
--------------
$ cd gettext-tools
$ ./configure --prefix=/tools --disable-shared

$ make -C gnulib-lib
$ make -C src msgfmt

$ sudo cp src/msgfmt /tools/bin

Grep-2.5.1a
-----------
./configure --prefix=/tools --disable-perl-regexp

make
sudo make install

Gzip-1.3.12 
-----------
manually apply this patch

patch/patch-ac (futimens() renaming) based on
        gnulib/lib/utimens.c,v 1.15 2007/05/19
        gnulib/lib/utimens.h,v 1.4 2007/05/20
        gzip/gzip.c,v 1.19 2007/06/14
(pserver - cvs.savannah.gnu.org)

:r archivers/gzip/patches/patch-ac
--- gzip.c.orig
+++ gzip.c
@@ -1637,7 +1637,7 @@
        }
       }
 
-    if (futimens (ofd, ofname, timespec) != 0)
+    if (gl_futimens (ofd, ofname, timespec) != 0)
       {
        int e = errno;
        WARN ((stderr, "%s: ", program_name));
--- lib/utimens.c.orig
+++ lib/utimens.c
@@ -75,7 +75,7 @@
    Return 0 on success, -1 (setting errno) on failure.  */
 
 int
-futimens (int fd ATTRIBUTE_UNUSED,
+gl_futimens (int fd ATTRIBUTE_UNUSED,
          char const *file, struct timespec const timespec[2])
 {
   /* Some Linux-based NFS clients are buggy, and mishandle time stamps
@@ -185,5 +185,5 @@
 int
 utimens (char const *file, struct timespec const timespec[2])
 {
-  return futimens (-1, file, timespec);
+  return gl_futimens (-1, file, timespec);
 }
--- lib/utimens.h.orig
+++ lib/utimens.h
@@ -1,3 +1,3 @@
 #include <time.h>
-int futimens (int, char const *, struct timespec const [2]);
+int gl_futimens (int, char const *, struct timespec const [2]);
 int utimens (char const *, struct timespec const [2]);

./configure --prefix=/tools

make
sudo make install

Make-3.81 
---------
./configure --prefix=/tools

make
sudo make install

Patch-2.5.4
-----------
./configure --prefix=/tools

make
sudo make install

Perl-5.10.0 [error with perl-5.8.8]
----------

./configure.gnu --prefix=/tools -Dstatic_ext='Data/Dumper Fcntl IO POSIX'

make perl utilities

sudo cp perl pod/pod2man /tools/bin
sudo mkdir -p /tools/lib/perl5/5.10.0
sudo cp -R lib/* /tools/lib/perl5/5.10.0

Sed-4.1.5
---------
./configure --prefix=/tools

make
sudo make install

Tar-1.18 
--------
$ tce-load /mnt/sda1/source/build_glib/09_04_10/texinfo.tce

./configure --prefix=/tools

make
sudo make install

Texinfo-4.9
-----------
./configure --prefix=/tools

make
sudo make install

Util-linux-2.12r
----------------
sed -i 's@/usr/include@/tools/include@g' configure

./configure

make -C lib
make -C mount mount umount
make -C text-utils more

sudo cp mount/mount mount/umount text-utils/more /tools/bin


sudo /usr/bin/strip --strip-debug /tools/lib/*
sudo /usr/bin/strip --strip-unneeded /tools/bin/*
sudo /usr/bin/strip --strip-unneeded /tools/sbin/*

sudo rm -rf /tools/info
sudo rm -rf /tools/man

final pass
----------
----------
Boot in tiny core scatter mode, otherwise "mount --bind" doesn't work

sudo mkdir -p /mnt/sdb1/dev
sudo mkdir -p /mnt/sdb1/proc
sudo mkdir -p /mnt/sdb1/sys

sudo mknod -m 600 /mnt/sdb1/dev/console c 5 1
sudo mknod -m 666 /mnt/sdb1/dev/null c 1 3

sudo mount --bind /dev /mnt/sdb1/dev

sudo mount -t devpts devpts /mnt/sdb1/dev/pts
sudo mount -t tmpfs shm /mnt/sdb1/dev/shm
sudo mount -t proc proc /mnt/sdb1/proc
sudo mount -t sysfs sysfs /mnt/sdb1/sys

[As root]

chroot /mnt/sdb1 /tools/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash --login +h

mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}
mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv /usr/{,local/}share/man/man{1..8}

for dir in /usr /usr/local; do
  ln -sv share/{man,doc,info} $dir
done

mkdir -v /var/{lock,log,mail,run,spool}
mkdir -pv /var/{opt,cache,lib/{misc,locate},local}

ln -sv /tools/bin/{bash,cat,echo,grep,pwd,stty} /bin
ln -sv /tools/bin/perl /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
ln -sv bash /bin/sh

touch /etc/mtab

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF

cat > /etc/group << "EOF"
root:x:0:
lp:x:7:lp
nogroup:x:65534:
staff:x:50:
EOF

exec /tools/bin/bash --login +h

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp -v utmp /var/run/utmp /var/log/lastlog
chmod -v 664 /var/run/utmp /var/log/lastlog


linux-2.6.29.1-tinycore
-----------------------
make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
sudo cp -r dest/include/* /usr/include

glibc-2.9
---------
sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED

DL=$(readelf -l /bin/sh | grep interpreter | awk '{print $4}' | sed -e 's@/tools@@' -e 's@]$@@')
sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" scripts/test-installation.pl
unset DL

mkdir ../glibc-build
cd ../glibc-build

echo "CFLAGS += -march=i486 -mtune=i686 -pipe" > configparms

../glibc-2.9/configure --prefix=/usr --disable-profile --enable-add-ons --enable-kernel=2.6.16 --enable-omitfp

make
sudo touch /opt/temp/etc/ld.so.conf
sudo make install

Configure loader, etc
---------------------
cat > /etc/ld.so.conf << "EOF"
/lib/
/usr/lib
/usr/local/lib
/var/lib
EOF


mv -v /tools/bin/{ld,ld-old}
mv -v /tools/i686-pc-linux-gnu/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/i686-pc-linux-gnu/bin/ld


gcc -dumpspecs | sed -e 's@/tools@@g' -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > /tools/lib/gcc/i686-pc-linux-gnu/4.2.2/specs

echo 'main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'
      [Requesting program interpreter: /lib/ld-linux.so.2]

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
/usr/lib/crt1.o succeeded
/usr/lib/crti.o succeeded
/usr/lib/crtn.o succeeded

grep -B1 '^ /usr/include' dummy.log
#include <...> search starts here:
 /usr/include

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
SEARCH_DIR("/tools/i686-pc-linux-gnu/lib")
SEARCH_DIR("/usr/lib")
SEARCH_DIR("/lib");

grep "/lib.*/libc.so.6 " dummy.log
attempt to open /lib/libc.so.6 succeeded

grep found dummy.log
found ld-linux.so.2 at /lib/ld-linux.so.2

rm -v dummy.c a.out dummy.log


Binutils-2.17
-------------
load texinfo extension

mkdir ../binutils-build
cd ../binutils-build

../binutils-2.17/configure --prefix=/usr --enable-shared

edit Makefile
MAKEINFO = /usr/src/binutils-2.17/missing makeinfo -> MAKEINFO = makeinfo

make tooldir=/usr
make tooldir=/usr install

cp ../binutils-2.17/include/libiberty.h /usr/include

GCC-4.2.2
---------
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in
sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in

mkdir ../gcc-build
cd ../gcc-build

export CXXFLAGS="-march=i486 -mtune=i686 -Os -pipe -fno-exceptions"

../gcc-4.2.2/configure --prefix=/usr --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++

make tooldir=/usr [real    51m42.445s]
make tooldir=/usr install

ln -s ../usr/bin/cpp /lib
ln -s gcc /usr/bin/cc

