run_sparc.sh 4.29 KB
#!/bin/bash

BU_NAME=binutils
BU_VERSION=2.37
BU_SERVER=https://ftp.gnu.org/gnu

TGT_TRIPLE=sparc-daiteq-elf
HOST_TRIPLE=x86_64-linux-gnu

CURDIR="$(pwd)"
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

BU_PACKAGE=${BU_NAME}-${BU_VERSION}.tar.bz2

DIR_SRCS=${CURDIR}/source
DIR_UPCK=${CURDIR}/unpacked
DIR_BLD=${CURDIR}/build-sparc
DIR_INST=${CURDIR}/install-sparc
DIR_PTCH=${SCRIPTDIR}/patches

GENDIRS="${DIR_SRCS} ${DIR_UPCK} ${DIR_BLD} ${DIR_INST}"

FN_BUPKG=${DIR_SRCS}/${BU_PACKAGE}
DN_BUUNP=${DIR_UPCK}/${BU_NAME}-${BU_VERSION}

CFG_ARGS="--prefix=${DIR_INST} --build=${HOST_TRIPLE} --host=${HOST_TRIPLE} \
          --target=${TGT_TRIPLE} --enable-targets=${TGT_TRIPLE} \
          --disable-nls --disable-multilib"

prepare_dirs() {
  for d in ${GENDIRS}
  do
    echo "Create directory ${d}"
    mkdir -p ${d}
  done
}

download_source() {
  mkdir -p ${DIR_SRCS}
  DOWN=1
  if [ -f ${FN_BUPKG} ]
  then
    echo "Original package is already downloaded ... check consistency"
    bzip2 -t ${FN_BUPKG} 2>/dev/null
    if [ $? -ne 0 ]
    then
      echo "  The package is invalid."
    else
      echo "  Package is usable"
      DOWN=0
    fi
  fi
  if [ ${DOWN} -eq 1 ]
  then
    echo "Download original package"
    wget ${BU_SERVER}/binutils/${BU_PACKAGE} -O ${FN_BUPKG}
  fi
}

unpack_source() {
  mkdir -p ${DIR_UPCK}
  UNP=1
  if [ ! -f ${FN_BUPKG} ]
  then
    echo "Original package isn't downloaded"
    UNP=0
  fi
  if [ -e ${DN_BUUNP} ]
  then
    echo "Package is already unpacked"
    UNP=0
  fi
  if [ ${UNP} -eq 1 ]
  then
    echo "Unpack original package"
    tar -C ${DIR_UPCK} -xjf ${FN_BUPKG}
  fi
}

apply_patches() {
  if [ ! -e ${DIR_PTCH} ]
  then
    echo "There is not a directory with patches"
    exit 1
  fi
  for p in `ls -v ${DIR_PTCH}/*.patch`
  do
    echo "Use patch ${p}"
    patch -d ${DN_BUUNP} -p1 < ${p}
  done
}

build_source() {
  if [ ! -e ${DN_BUUNP} ]
  then
    echo "There is no unpacked files with source codes"
    exit 1
  fi

  mkdir -p ${DIR_BLD}
  cd ${DIR_BLD}
  CONF=1
  if [ -f Makefile ]
  then
    echo "Compilation is already configured - skip."
    CONF=0
  fi
  if [ ${CONF} -eq 1 ]
  then
    ${DN_BUUNP}/configure ${CFG_ARGS}
    if [ $? -ne 0 ]
    then
      echo "E: configure failed"
      exit 1
    fi
  fi

  make
  if [ $? -ne 0 ]
  then
    echo "E: make failed"
    exit 1
  fi
  cd ${CURDIR}
}

install_pkg() {
  mkdir -p ${DIR_INST}
  cd ${DIR_BLD}
  make install
  cd ${CURDIR}
}

clean_build() {
  echo "Removing build and install directories."
  rm -rf ${DIR_BLD} ${DIR_INST}
}

clean_unpacked() {
  echo "Removing unpacked directory."
  rm -rf ${DIR_UPCK}
}

distclean_all() {
  echo "Removing all generated files and directories."
  rm -rf ${GENDIRS}
}
# ##############################################################################
print_help() {
  echo "The script needs one argument - required operation:"
  echo "  all       - do all steps"
  echo "  get       - download source package if it doesn't exist"
  echo "  unpack    - unpack downloaded package only"
  echo "  patch     - patch original package"
  echo "  build     - build binutils package"
  echo "  install   - install binutils to the output directory"
  echo "  clean     - remove generated files (build and install dirs.)"
  echo "  packclean - remove unpacked files (unpack dir.)"
  echo "  distclean - remove all generated files and directories"
}


# ##############################################################################
# main ...

echo "Script for preparing package of patched binutils for LEON IP core extensions."

if [ "$#" -ne 1 ]
then
  print_help
  exit 0
fi

case $1 in
  "all" )
    #echo "do all"
    download_source
    clean_unpacked
    unpack_source
    apply_patches
    build_source
    install_pkg
    ;;
  "get" )
    #echo "do download"
    download_source
    ;;
  "unpack" )
    #echo "do unpack"
    unpack_source
    ;;
  "patch" )
    #echo "do patch"
    apply_patches
    ;;
  "build" )
    #echo "do build"
    build_source
    ;;
  "install" )
    #echo "do install"
    install_pkg
    ;;
  "clean" )
    #echo "do clean"
    clean_build
    ;;
  "packclean" )
    #echo "do packclean"
    clean_unpacked
    ;;
  "distclean" )
    #echo "do distclean"
    distclean_all
    ;;
  * )
    echo "E: Unsupported operation"
    print_help
    exit 1
    ;;
esac