#!/bin/sh # # Paths to use for the build # # CC_SOURCE is where the tarballs for various components live. # CC_ROOT is the top level directory for the tool chain build. # CC_PREFIX is where the x86 cross build tools are created. # CC_SYSROOT is where the "fake" x86_64 system and system libraries live. # CC_SOURCE=$HOME/crosscomp CC_ROOT=$HOME/crosscomp/inst CC_SYSROOT=$CC_ROOT/x86_64 CC_PREFIX=$CC_ROOT/usr cd $CC_ROOT mkdir tmp cd tmp # Step 1: binutils tar -jxf $CC_SOURCE/binutils-2.16.1.tar.bz2 mkdir binutils cd binutils ../binutils-2.16.1/configure --target=x86_64-linux-gnu --prefix=$CC_PREFIX --with-sysroot=$CC_SYSROOT make make install PATH_BAK=$PATH PATH=$PATH:$CC_PREFIX/bin cd .. # Step 2: kernel headers tar -jxf $CC_SOURCE/linux-2.6.20.1.tar.bz2 cd linux-2.6.20.1 # Say yes to all the boring kernel config questions yes "" | make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- oldconfig # Note: Some errors as there is no cross-compiler yet make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- prepare mkdir $CC_SYSROOT mkdir $CC_SYSROOT/usr mkdir $CC_SYSROOT/usr/include cp -a include/linux include/asm-generic $CC_SYSROOT/usr/include cp -a include/asm-x86_64 $CC_SYSROOT/usr/include/asm cd .. # Step 3: glibc headers tar -jxf $CC_SOURCE/glibc-2.5.tar.bz2 tar -jxf $CC_SOURCE/glibc-linuxthreads-2.5.tar.bz2 -C glibc-2.5 mkdir glibc1 cd glibc1 ../glibc-2.5/configure --build=i686-pc-linux-gnu --host=x86_64-linux-gnu --with-headers=$CC_SYSROOT/usr/include --prefix=/usr --enable-add-ons=linuxthreads --disable-sanity-checks make install-headers install_root=$CC_SYSROOT # Fudge 1: glibc header install needs some help before this # is useable by the initial gcc build touch $CC_SYSROOT/usr/include/gnu/stubs.h cp -a bits/stdio_lim.h $CC_SYSROOT/usr/include/bits cd .. # Step 4: static only gcc tar -jxf $CC_SOURCE/gcc-core-4.2.0.tar.bz2 tar -jxf $CC_SOURCE/gcc-g++-4.2.0.tar.bz2 mkdir gcc1 cd gcc1 ../gcc-4.2.0/configure --prefix=${CC_PREFIX} --target=x86_64-linux-gnu --with-sysroot=$CC_SYSROOT --enable-languages=c --disable-shared --disable-libmudflap --disable-libssp --disable-multilib make all-host make install-host cd .. # Fudge 2: Make dummy "eh" libgcc, glibc build thinks it needs it ar rc $CC_PREFIX/lib/gcc/x86_64-linux-gnu/4.2.0/libgcc_eh.a # Step 5: glibc mkdir glibc2 cd glibc2 ../glibc-2.5/configure --build=i686-pc-linux-gnu --host=x86_64-linux-gnu --with-headers=$CC_SYSROOT/usr/include --prefix=/usr --enable-add-ons=linuxthreads --disable-sanity-checks make make install install_root=$CC_SYSROOT # Fudge 3: We're compiling gcc without multilib so that we don't have to # build a 32 bit glibc too (we're not interested), so we symlink lib to lib64 # so that gcc can find the needed glibc libraries in a non-multilib place ln -s lib64 $CC_SYSROOT/lib ln -s lib64 $CC_SYSROOT/usr/lib # Step 6: gcc full cd .. mkdir gcc2 cd gcc2 ../gcc-4.2.0/configure --prefix=${CC_PREFIX} --target=x86_64-linux-gnu --with-sysroot=$CC_SYSROOT --disable-multilib make make install