HOWTO build i386-linux toolchain for Generic i386/Linux ------------------------------------------------------- 1. Packages used: binutils-2.17.tar.gz gcc-4.2.1.tar.gz glibc-2.3.6.tar.gz 2. binutils-2.17 tar xvzf binutils-2.17.tar.gz cd binutils-2.17 mkdir i386-linux cd i386-linux ../configure --target=i386-linux make make install 3. gcc-4.2.1 tar xvjf gcc-4.2.1.tar.bz2 cd gcc-4.2.1 cp $(ATTACHED t-linux file) gcc/config/ mkdir i386-linux cd i386-linux ../configure --target=i386-linux --disable-shared --disable-threads \ --disable-libmudflap --disable-libssp --prefix=/usr/local \ --with-headers=/linux-2.6.x/include \ --enable-languages=c make [ ignore final build error ] make install 4. glibc-2.3.6 tar xvzf glibc-2.3.6.tar.gz cd glibc-2.3.6 tar xvzf glibc-linuxthreads-2.3.6.tar.gz rm -rf nptl mkdir i386-linux vi Makeconfig - remove any usage occurrances of -lgcc_eh vi sysdeps/unix/sysv/linux/bind.S - comment out line 5 "weak_alias (bind, __bind)" vi sysdeps/unix/sysv/linux/getsockname.S - comment out line 5 "weak_alias (getsockname, __getsockname)" vi sysdeps/unix/sysv/linux/listen.S - comment out line 5 "weak_alias (listen, __listen)" vi sysdeps/unix/sysv/linux/setsockopt.S - comment out line 5 "weak_alias (setsockopt, __setsockopt)" cd i386-linux CC=i386-linux-gcc \ AS=i386-linux-as \ LD=i386-linux-ld \ ../configure --host=i386-linux --build=i686-pc-linux-gnu \ --with-headers=/linux-2.6.x/include \ --enable-add-ons --with-tls --without-__thread \ --enable-shared --prefix=/usr/local/i386-linux make make install 5. gcc-4.2.1 (c++, etc) tar xvjf gcc-4.2.1.tar.bz2 cd gcc-4.2.1 cp $(ATTACHED t-linux file) gcc/config/ vi gcc/config/t-linux - remove "-Dinhibit_libc" -- all occruances perl -pi -e 's/int namelen/unsigned int namelen/' ../libjava/java/net/natInetAddressPosix.cc mkdir i386-linux cd i386-linux ../configure --target=i386-linux --disable-shared --prefix=/usr/local \ --with-headers=/linux-2.6.x/include make make install 6. packaging cd / find /usr/local/i386-linux -name CVS -type d | xargs rm -rf strip /usr/local/i386-linux/bin/* strip /usr/local/bin/i386-linux-* strip /usr/local/libexec/gcc/i386-linux/4.2.1/* tar cvzf /tmp/i386-linux-tools-xxxxxxxx.tar.gz /usr/local/i386-linux \ /usr/local/lib/gcc/i386-linux \ /usr/local/libexec/gcc/i386-linux \ /usr/local/bin/i386-linux-* \ /usr/local/bin/genext2fs ------------------------------------------------------------------------------ APPENDIX A -- modified t-linux for gcc-4.2.1 ------------------------------------------------------------------------------ # Compile crtbeginS.o and crtendS.o with pic. CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC # Compile libgcc2.a with pic. TARGET_LIBGCC2_CFLAGS = -fPIC -Dinhibit_libc -D__gthr_posix_h T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h # Override t-slibgcc-elf-ver to export some libgcc symbols with # the symbol versions that glibc used. SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver # Use unwind-dw2-fde-glibc LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c ------------------------------------------------------------------------------