安定人哦诶的mktoolchain制作

来源:互联网 发布:淘宝店激活页面在哪 编辑:程序博客网 时间:2024/06/06 06:45

----------------------- srcipt: mktoolchain ----------------------------------
#!/bin/sh
#
#
# Create GNU toolchain from scratch (with GPL 2.0).
#
# http://AndroidSprite.spaces.live.com
#
# Authors: 
# Kongfu   <conke.hu@gmail.com>
#  Linke    <linke.wang@gmail.com>
#

date > /tmp/period.txt
TOP_PATH=`pwd`
KERN_PATH=
UCLIBC_PATH=
BINUTILS_PATH=
GCC_PATH=
SRC_PATH=${TOP_PATH}/src
BUILD_PATH=${TOP_PATH}/build
UCLIBC_LOCALE=uClibc-locale-030818.tgz
TARGET_CPU=arm926ej-s
TOOLCHAIN_SYSROOT=`echo ${TARGET_CPU} | sed 's/-//g'`
if [ x"${TOOLCHAIN_SYSROOT}" = x"" ]; then
 echo "/nNo correct TARGET_CPU was assigned (${TARGET_CPU})!"
 exit
fi
TOOLCHAIN_SYSROOT=/opt/${TOOLCHAIN_SYSROOT}_eabi
if [ x"${OS}" != x"" ]; then
 TARGET_PLATFORM=arm-${OS}-linux-uclibcgnueabi
else
 TARGET_PLATFORM=arm-linux-uclibcgnueabi
fi
BUILD_PLATFORM=`gcc -dumpmachine`
if [ x"${BUILD_PLATFORM}" = x"" ]; then
 echo "Please install gcc for host:)"
 exit
fi
HOSTCC_PATH=`which gcc`
if [ -d ${TOOLCHAIN_SYSROOT} ]; then
 echo "Removing the old toolchain (${TOOLCHAIN_SYSROOT}) ..."
 rm -rf ${TOOLCHAIN_SYSROOT} || exit
fi
mkdir -p ${TOOLCHAIN_SYSROOT} || exit

if [ -d ${BUILD_PATH} ]; then
 echo "Removing the tmp build dir (${BUILD_PATH}) ..."
 rm -rf ${BUILD_PATH} || exit
fi
mkdir -p ${BUILD_PATH} || exit
cd ${BUILD_PATH}
BUILD_PATH=`pwd`

cd ${SRC_PATH}
FOUND=0
KERN_LIST="kernel-android kernel linux-2.6 linux-2.6.26 linux-2.6.25 linux-2.6.24 linux-2.6.23 linux-2.6.22.1"
for KERN_PATH in $KERN_LIST
do 
 if [ -d ${KERN_PATH} ]; then
  echo "Using existing kernel source dir /"${KERN_PATH}/"."
#  make -C ${KERN_PATH} ARCH=arm clean || exit
  FOUND=1
  break;
 elif [ -e ${KERN_PATH}.tar.bz2 ]; then
  echo "Extracting kernel source dir /"${KERN_PATH}/"."
  tar jxvf ${KERN_PATH}.tar.bz2 || exit
  FOUND=1
  break;
 fi
done

if [ $FOUND = "0" ]; then
 echo "/nNo kernel source package found!"
 echo "Please copy the kernel source package to subdir /"src/"."
 exit
fi
KERN_PATH=${SRC_PATH}/${KERN_PATH}

FOUND=0
BINUTILS_LIST="binutils binutils-2.18 binutils-2.17 binutils-2.16"
for BINUTILS_PATH in $BINUTILS_LIST
do
 if [ -d ${BINUTILS_PATH} ]; then
  echo "Using existing binutils source dir /"${BINUTILS_PATH}/"."
  FOUND=1
  break;
 elif [ -e ${BINUTILS_PATH}.tar.bz2 ]; then
  echo "Extracting binutils source dir /"${BINUTILS_PATH}/"."
  tar jxvf ${BINUTILS_PATH}.tar.bz2
  FOUND=1
  break;
 fi
done
if [ $FOUND = "0" ]; then
 echo "/nNo binutils source package found!"
 echo "Please copy the binutils source package to subdir /"src/"."
 exit
fi
BINUTILS_PATH=${SRC_PATH}/${BINUTILS_PATH}

FOUND=0
UCLIBC_LIST="uClibc uClibc-0.9.30 uClibc-0.9.29"
for UCLIBC_PATH in $UCLIBC_LIST
do
 if [ -d ${UCLIBC_PATH} ]; then
  echo "Using existing uClibc source dir /"${UCLIBC_PATH}/"."
  make HOSTCC=${HOSTCC_PATH} -C ${UCLIBC_PATH} clean > /dev/null 2>&1 || exit
  FOUND=1
  break;
 elif [ -e ${UCLIBC_PATH}.tar.bz2 ]; then
  echo "Extracting uClibc source dir /"${UCLIBC_PATH}/"."
  tar jxvf ${UCLIBC_PATH}.tar.bz2 || exit
  FOUND=1
  break;
 fi
done
if [ $FOUND = "0" ]; then
 echo "/nNo uClibc source package found!"
 echo "Please copy the uClibc source package to subdir /"src/"."
 exit
fi
UCLIBC_PATH=${SRC_PATH}/${UCLIBC_PATH}

if [ ! -f ${UCLIBC_LOCALE} ]; then
 echo "/nNo uClibc-locale package was fond, try downloading ..."
 wget http://www.uclibc.org/downloads/${UCLIBC_LOCALE}
fi
if [ ! -f ${UCLIBC_PATH}/extra/locale/${UCLIBC_LOCALE} ]; then
 cp ${UCLIBC_LOCALE} ${UCLIBC_PATH}/extra/locale/ || exit
fi

FOUND=0
GCC_LIST="gcc gcc-4.3.0 gcc-4.2.3 gcc-4.2.1"
for GCC_PATH in $GCC_LIST
do
 if [ -d ${GCC_PATH} ]; then
  echo "Using existing gcc source dir /"${GCC_PATH}/"."
  FOUND=1
  break;
 elif [ -e ${GCC_PATH}.tar.bz2 ]; then
  echo "Extracting gcc source dir /"${GCC_PATH}/"."
  tar jxvf ${GCC_PATH}.tar.bz2 || exit
  FOUND=1
  break;
 fi
done
if [ $FOUND = "0" ]; then
 echo "/nNo gcc source package found!"
 echo "Please copy the gcc source package to subdir /"src/"."
 exit
fi
GCC_PATH=${SRC_PATH}/${GCC_PATH}

make -C ${KERN_PATH} /
 ARCH=arm /
 INSTALL_HDR_PATH=${TOOLCHAIN_SYSROOT}/usr /
 headers_install || exit

cd ${UCLIBC_PATH}
cp -f ${TOP_PATH}/config-uclibc .config
make CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- oldconfig
make /
 PREFIX=${TOOLCHAIN_SYSROOT} /
 DEVEL_PREFIX=/usr/ /
 RUNTIME_PREFIX=/ /
 KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include /
 CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- /
 HOSTCC=${HOSTCC_PATH} /
 pregen || exit
make /
 PREFIX=${TOOLCHAIN_SYSROOT} /
 DEVEL_PREFIX=/usr/ /
 RUNTIME_PREFIX=/ /
 KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include /
 CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- /
 HOSTCC=${HOSTCC_PATH} /
 install_headers  || exit

mkdir -p ${BUILD_PATH}/build_binutils || exit
cd ${BUILD_PATH}/build_binutils
${BINUTILS_PATH}/configure /
 --prefix=/usr /
 --build=${BUILD_PLATFORM} /
 --host=${BUILD_PLATFORM} /
 --target=${TARGET_PLATFORM} /
 --with-sysroot=${TOOLCHAIN_SYSROOT}/ /
 --with-float=soft /
 --disable-multilib /
 --disable-werror
make || exit
make DESTDIR=${TOOLCHAIN_SYSROOT} install || exit

mkdir -p ${BUILD_PATH}/gcc_pass_1 || exit
cd ${BUILD_PATH}/gcc_pass_1
${GCC_PATH}/configure /
 --prefix=${TOOLCHAIN_SYSROOT}/usr /
 --build=${BUILD_PLATFORM} /
 --host=${BUILD_PLATFORM} /
 --target=${TARGET_PLATFORM} /
 --enable-languages=c /
 --with-sysroot=${TOOLCHAIN_SYSROOT} /
 --disable-__cxa_atexit /
 --enable-target-optspace /
 --with-gnu-ld /
 --disable-shared /
 --enable-threads /
 --enable-tls /
 --enable-long-long /
 --disable-multilib /
 --with-float=soft /
 --with-cpu=${TARGET_CPU} /
 --with-tune=${TARGET_CPU}
make all-gcc || exit
make install-gcc || exit

cd ${UCLIBC_PATH}
make /
 PREFIX=/ /
 DEVEL_PREFIX=/ /
 RUNTIME_PREFIX=/ /
 KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include /
 CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- /
 all || exit
make /
  PREFIX=${TOOLCHAIN_SYSROOT} /
 DEVEL_PREFIX=/usr/ /
 RUNTIME_PREFIX=/ /
 KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include /
 CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- /
 install_runtime || exit
make /
  PREFIX=${TOOLCHAIN_SYSROOT} /
 DEVEL_PREFIX=/usr/ /
 RUNTIME_PREFIX=/ /
 KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include /
 CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- /
 install_dev || exit

#make  -C utils /
# PREFIX=${TOOLCHAIN_SYSROOT} /
# KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include /
# CROSS=${TARGET_PLATFORM}- /
# hostutils

mkdir -p ${BUILD_PATH}/gcc_pass_2 || exit
cd ${BUILD_PATH}/gcc_pass_2
${GCC_PATH}/configure /
 --prefix=/usr /
 --build=${BUILD_PLATFORM} /
 --host=${BUILD_PLATFORM} /
 --target=${TARGET_PLATFORM} /
 --enable-languages=c,c++ /
 --with-sysroot=${TOOLCHAIN_SYSROOT} /
 --with-build-time-tools=${TOOLCHAIN_SYSROOT}/usr/${TARGET_PLATFORM}/bin /
 --disable-__cxa_atexit /
 --enable-target-optspace /
 --with-gnu-ld /
 --enable-shared /
 --enable-threads /
 --with-tls /
 --disable-multilib /
 --enable-long-long /
 --with-float=soft /
 --with-cpu=${TARGET_CPU} /
 --with-tune=${TARGET_CPU}
make all || exit
make DESTDIR=${TOOLCHAIN_SYSROOT} install || exit

echo
cd ${TOOLCHAIN_SYSROOT}/usr/bin
for file in `ls ${TARGET_PLATFORM}*`
do
 ln -vs ${file} arm-linux-${file##*-}
# ln -vs ${file} arm-linux-gnueabi-${file##*-}
done
grep arm ~/.bashrc || echo "/nexport PATH=/${PATH}:${TOOLCHAIN_SYSROOT}/usr/bin" >> ~/.bashrc
echo
echo "XBuild completed successfully!"
echo "Toolchain has been installed to ${TOOLCHAIN_SYSROOT}/usr/bin/ !"

date >> /tmp/period.txt
echo
echo "If any question, please contact the authors:"
echo "  Kongfu  <conke.hu@gmail.com>"
echo "  Linke   <linke.wang@gmail.com>"
echo "Or visit the website:"
echo "  http://AndroidSprite.spaces.live.com"
echo

原创粉丝点击