#!/bin/sh # # Please change the following macros to your paths. # GNU_TARGET_NAME=arm-linux TOP_DIR=`pwd` BUILD_DIR=$TOP_DIR/build STAGING_DIR=$TOP_DIR/$GNU_TARGET_NAME SOURCE_DIR=$TOP_DIR KERNEL=$HOME/embedded/linux-2.4.18-rmk7-ptx3 HOST= HOSTCC=gcc # ---------------------------------------------------------------------------- # There should be nothing to configure below this line # # Check if everything is there # echo -n "check if sources are available..." mkdir -p $BUILD_DIR if [ "$KERNEL" = "" -o ! -f "$KERNEL/Documentation/arm/README" ]; then echo "You haven't changed KERNEL to point at a valid kernel tree" exit 1 fi if [ ! -f $SOURCE_DIR/binutils-2.11.2.tar.gz ]; then echo Binutils 2.11.2 seems to be missing exit 1 fi if [ ! -f $SOURCE_DIR/gcc-2.95.3.tar.gz ]; then echo GCC 2.95.3 seems to be missing exit 1 fi if [ ! -f $SOURCE_DIR/gcc-2.95.3.diff.bz2 ]; then echo GCC 2.95.3 diff seems to be missing exit 1 fi echo "done" # # binutils # echo -n "binutils..." [ -d $BUILD_DIR/binutils-2.11.2 ] || { echo -n "extracting..." cd $BUILD_DIR tar zxf $SOURCE_DIR/binutils-2.11.2.tar.gz cd binutils-2.11.2 ./configure \ --disable-shared \ --target=arm-linux \ --prefix=$STAGING_DIR \ --enable-targets=arm-linux make make install } echo "done" # # Copy header files to $STAGING_DIR # echo -n "copying header files..." [ -d $STAGING_DIR/asm-arm/include ] || { mkdir -p $STAGING_DIR/asm-arm/include cp -dR $KERNEL/include/asm-arm $STAGING_DIR/asm-arm/include cp -dR $KERNEL/include/asm $STAGING_DIR/asm-arm/include cp -dR $KERNEL/include/linux $STAGING_DIR/asm-arm/include } echo "done" # # gcc # echo -n "gcc..." [ -d $BUILD_DIR/gcc-2.95.3 ] || { echo -n "extracting..." cd $BUILD_DIR tar zxf $SOURCE_DIR/gcc-2.95.3.tar.gz cd gcc-2.95.3 echo -n "patching..." bzcat $SOURCE_DIR/gcc-2.95.3.diff.bz2 | patch -p1 # hack to build gcc without glibc perl -pi -e 's/^(TARGET_LIBGCC2_CFLAGS.*)/$1 -Dinhibit_libc -D__gthr_posix_h/' gcc/config/arm/t-linux } echo "done" # gcc stage 1 echo -n "gcc-stage 1..." [ -d $BUILD_DIR/gcc-2.95.3-stage1-obj ] || { mkdir $BUILD_DIR/gcc-2.95.3-stage1-obj cd $BUILD_DIR/gcc-2.95.3-stage1-obj PATH=$PATH:$STAGING_DIR/bin \ AR=$GNU_TARGET_NAME-ar \ RANLIB=$GNU_TARGET_NAME-ranlib \ CC=$HOSTCC \ ../gcc-2.95.3/configure \ --target=$GNU_TARGET_NAME \ --prefix=$STAGING_DIR \ --enable-target-optspace \ --disable-nls \ --with-gnu-ld \ --disable-shared \ --enable-languages=c \ --with-headers=$KERNEL/include PATH=$PATH:$STAGING_DIR/bin make PATH=$PATH:$STAGING_DIR/bin make install } echo "done" # glibc-cross GLIBC=glibc-2.2.5 GLIBC_LINUXTHREADS=glibc-linuxthreads-2.2.5 echo -n "glibc..." [ -d $BUILD_DIR/$GLIBC ] || { cd $BUILD_DIR gzip -dc $SOURCE_DIR/$GLIBC.tar.gz | tar -xf - cd $BUILD_DIR/$GLIBC gzip -dc $SOURCE_DIR/$GLIBC_LINUXTHREADS.tar.gz | tar -xf - gzip -dc $SOURCE_DIR/glibc-2.2.5-ptx1.diff.gz | patch -p1 rm -f sysdeps/unix/sysv/linux/configure cd $BUILD_DIR mkdir $GLIBC-obj cd $GLIBC-obj PATH=$PATH:$STAGING_DIR/bin \ AR=$GNU_TARGET_NAME-ar \ RANLIB=$GNU_TARGET_NAME-ranlib \ CC=$GNU_TARGET_NAME-gcc \ ../$GLIBC/configure arm-linux \ --build=i686-linux \ --target=arm-linux \ --prefix=$STAGING_DIR \ --sysconfdir=/etc \ --enable-add-ons \ --disable-sanity-checks PATH=$PATH:$STAGING_DIR/bin make PATH=$PATH:$STAGING_DIR/bin make install } echo "done" # gcc stage 2 echo -n "gcc-stage 2..." [ -d $BUILD_DIR/gcc-2.95.3-stage2-obj ] || { mkdir $BUILD_DIR/gcc-2.95.3-stage2-obj cd $BUILD_DIR/gcc-2.95.3 # remove glibc header hack perl -pi -e 's/^(TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC).*/$1/' gcc/config/arm/t-linux # perl -pi -e 's/(^T_CFLAGS =.*)//' gcc/config/arm/t-linux cd $BUILD_DIR/gcc-2.95.3-stage2-obj PATH=$PATH:$STAGING_DIR/bin \ AR=$GNU_TARGET_NAME-ar \ RANLIB=$GNU_TARGET_NAME-ranlib \ CC=$HOSTCC \ ../gcc-2.95.3/configure \ --target=$GNU_TARGET_NAME \ --prefix=$STAGING_DIR \ --enable-target-optspace \ --disable-nls \ --with-gnu-ld \ --disable-shared \ --enable-languages="c,c++" \ --with-headers=$KERNEL/include \ --with-headers=$STAGING_DIR/include \ --with-libs=$STAGING_DIR/lib PATH=$PATH:$STAGING_DIR/bin make PATH=$PATH:$STAGING_DIR/bin make install } echo "done"