Wednesday, October 5, 2011

Building gcc 2.95.3 on a modern x86_64 system

General build instructions:

http://www.linuxfromscratch.org/blfs/view/5.1/general/gcc2.html

Then, follow instructions as generally outlined in:
http://www.trevorpounds.com/blog/?p=111

With a few modifications:

tar xzf glibc-2.10.1.tar.gz
mkdir -p gcc-2.95.3/glibc-workaround/include/bits
cp glibc-2.10.1/bits/stdio-lock.h gcc-2.95.3/glibc-workaround/include/bits
cp glibc-2.10.1/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h gcc-2.95.3/glibc-workaround/include/bits
sed -i -n '1h;1!H;${;g;s/\(__pthread_slist_t __list;\n[ \t]*}\)/\1 __gcc_295_workaround__/g;p;}' gcc-2.95.3/glibc-workaround/include/bits/pthreadtypes.h
tar xzf gcc-2.95.3.tar.gz
cd gcc-2.95.3
patch -p0 < gcc-v2.95.x.debian.x86_64.diff
mkdir ../gcc-2.95.3-objdir
cd ../gcc-2.95.3-objdir
CFLAGS=-D_FORTIFY_SOURCE=0 ../gcc-2.95.3/configure --prefix=/opt/x86_64/gcc/gcc-2.95.3 --enable-languages=c,c++ --enable-threads=posix --enable-shared --host i386-pc-linux-gnu
make
make install

L=`find /opt/x86_64/gcc/gcc-2.95.3/lib -name "*libstdc++*.so" -type f` &&
IL=`basename $L`

for i in /opt/x86_64/gcc/gcc-2.95.3/lib/*.so*; do mv -f $i /usr/lib;
ln -sf /usr/lib/`basename $i` /opt/x86_64/gcc/gcc-2.95.3/lib; done

ln -sf $IL /usr/lib/libstdc++-libc6.1-1.so.2 &&
ln -sf $IL /usr/lib/libstdc++-libc6.2-2.so.3 &&
ln -sf $IL /usr/lib/libstdc++-libc6.3-2.so.3