Hello,

Ibrahim Khalife schrieb:
> I am having trouble getting msp430-gcc working on my MAC OS X. Thank you
> very much for your help!!
> 
> The message after running ./build-mspgcc install is:
> [...]

you can try out the attached version of the script. It has been copied
and modified serveral times by several people so I cannot exactly tell
you what it does differently than the original version. All I can tell
you is that it installed the msp430-stuff just fine on my MacBook (OSX
10.4, TinyOS 2 from CVS).

Regards,
Damian Philipp
#!/bin/bash
#$Id: build-mspgcc,v 1.9 2006/08/23 20:48:17 cssharp Exp $
[EMAIL PROTECTED] Cory Sharp <[EMAIL PROTECTED]>
#
# Copied from TinyOS 1.x, " build-mspgcc,v 1.9 2006/08/23 20:48:17 cssharp Exp"

OPT="$1"
if [ x$OPT = x ]
then
  cat <<"EOF"
usage: build-mspgcc install
$Id: build-mspgcc,v 1.9 2006/08/23 20:48:17 cssharp Exp $

build-mspgcc downloads, extracts, builds, and installs binutils, gcc,
and libc for the TI MSP430 microcontroller.  As root, run:

  ./build-mspgcc install

The default installation directory is $SOSTOOLDIR.  Change this by
setting the environment variable INSTALL_DIR before compiling and
installing:

  INSTALL_DIR=/usr/local/msp430 ./build-mspgcc install

All other build options are unsupported.

Unsupported usage: build-mspgcc [command] (package)
commands: get, extract, build, install
packages: MSPGCC_CVS, BINUTILS, GCC, LIBC
environment variables:
  INSTALL_DIR
  USE_GCC=3.2 or 3.3
    - currently 3.3 does not include msp430 1611 support
EOF
  exit 0
fi

[ $OPT = get ] && OPT_NUM=1
[ $OPT = extract ] && OPT_NUM=2
[ $OPT = build ] && OPT_NUM=3
[ $OPT = install ] && OPT_NUM=4
[ x$OPT_NUM = x ] && echo "invalid option" && exit 1

PACKAGE="$2"

START_DIR=$PWD
: ${ARCHIVE_DIR:=archive}
: ${BUILD_DIR:=build}
: ${INSTALL_DIR:=$SOSTOOLDIR}

# {package}_URL will by default derive
#   {package}_ARCHIVE for the tarball, and
#   {package}_DIR for the source directory extracted from the tarball
# which can be overridden just by specifying the variable.

# Each package can specify following Bash functions 
#   {package}_get
#   {package}_extact
#   {package}_build
#   {package}_install
# which take on defaults defined below if unspecified.

if [ ! -z "`echo \`uname\` | grep Darwin`" ]
then
        if [ ! -z "`echo \`uname -m\` | grep Power`" ]
        then
                INSTALL_PLATFORM=PowerPCMac
        else
                INSTALL_PLATFORM=IntelMac
        fi
else
        if [ ! -z "`echo \`uname\` | grep CYGWIN`" ]
        then
                INSTALL_PLATFORM=Cygwin
        else
                INSTALL_PLATFORM=Unix
        fi
fi

if [[ $INSTALL_PLATFORM == IntelMac ]]
then
        echo "Installing toolchain on an Intel Mac"
        echo "Installation directory is $INSTALL_DIR"
        echo "Make sure that $INSTALL_DIR/msp430/bin is added to the system 
PATH variable!"
        cd $INSTALL_DIR
        wget 
http://userfs.cec.wustl.edu/%7Ekak1/tinyos2_mac_install/msp430_tools-i686-apple-darwin.tar.gz
        tar -zxvf msp430_tools-i686-apple-darwin.tar.gz
        echo "Cleaning tarball"
        rm msp430_tools-i686-apple-darwin.tar.gz
        cd $START_DIR
else

BINUTILS_URL="ftp://ftp.gnu.org/gnu/binutils/binutils-2.17.tar.bz2";
GCC32_URL="ftp://ftp.gnu.org/gnu/gcc/gcc-3.2.3/gcc-core-3.2.3.tar.bz2";

# Tried to use gcc-3.3.6 for Intel Mac but couldn't get it to compile
# So, using a pre-compiled tarball from another source above
# GCC33_URL="ftp://ftp.gnu.org/gnu/gcc/gcc-3.3.6/gcc-core-3.3.6.tar.bz2";

GCC34_URL="http://ftp.gnu.org/gnu/gcc/gcc-3.4.6/gcc-core-3.4.6.tar.bz2";
MSPGCC_CVS_ARCHIVE=mspgcc-cvs.tar.gz
MSPGCC_CVS_DATE="1 Aug 2006"   # "now" is an option, see 1 Jun 2005 discussion 
thread "[tinyos-msp430] msp430 compiler tools"
LIBC_ARCHIVE="$MSPGCC_CVS_ARCHIVE"
LIBC_DIR="mspgcc-cvs/msp430-libc/src"

GCC_URL="$GCC32_URL"
[ x$USE_GCC = x3.3 ] && GCC_URL="$GCC33_URL"


### --- binutils

BINUTILS_build() {
  perl -i.orig -pe 's/define (LEX_DOLLAR) 0/undef $1/' gas/config/tc-msp430.h 
|| exit 1
  ./configure --target=msp430 --prefix=$INSTALL_DIR || exit 1
  make || exit 1
}

### --- gcc

GCC_build() {
  builtin pushd $START_DIR || exit 1
  builtin pushd $BUILD_DIR || exit 1
  BUILD_BASE=$PWD
  builtin popd
  builtin popd
  if [ x$USE_GCC = x3.3 ]
  then
    cp -r "$BUILD_BASE"/mspgcc-cvs/gcc/gcc-3.4/* . || exit 1
  else
    cp -r "$BUILD_BASE"/mspgcc-cvs/gcc/gcc-3.3/* . || exit 1
  fi
  GCC_SRCDIR="$PWD"
  GCC_OBJDIR="$PWD-obj"
  [ -d "$GCC_OBJDIR" ] || mkdir -p "$GCC_OBJDIR"
  cd "$GCC_OBJDIR"
  "$GCC_SRCDIR"/configure --target=msp430 --prefix="$INSTALL_DIR" || exit 1
  make || exit 1
  cd "$GCC_SRCDIR"
}

GCC_install() {
  GCC_SRCDIR="$PWD"
  GCC_OBJDIR="$PWD-obj"
  cd "$GCC_OBJDIR"
  make install || exit 1
  cd "$GCC_SRCDIR"
}

### --- mspgcc cvs

MSPGCC_CVS_get() {
  cd $ARCHIVE_DIR
  mkdir -p mspgcc-cvs
  cd mspgcc-cvs
  SF_CVS_SERVER=":pserver:[EMAIL PROTECTED]"
  if [ -f $HOME/.cvspass ] && grep -q -F "$SF_CVS_SERVER:" $HOME/.cvspass
  then
    :
  else
    echo
    echo "***  Logging into SourceForge for anonymous CVS access."
    echo "***  Press ENTER when prompted for a password."
    echo
    cvs -d$SF_CVS_SERVER:/cvsroot/mspgcc login
  fi
  cvs -z3 -d$SF_CVS_SERVER:/cvsroot/mspgcc export -D "$MSPGCC_CVS_DATE" gcc 
msp430-libc
  patch -p1 <<EOF
diff -N -r -u mspgcc-cvs/gcc/gcc-3.3/gcc/config/msp430/msp430.c 
mspgcc-cvs-moteiv/gcc/gcc-3.3/gcc/config/msp430/msp430.c
--- mspgcc-cvs/gcc/gcc-3.3/gcc/config/msp430/msp430.c   2006-04-23 
09:18:20.000000000 -0700
+++ mspgcc-cvs-moteiv/gcc/gcc-3.3/gcc/config/msp430/msp430.c    2006-08-02 
13:47:05.953125000 -0700
@@ -6157,7 +6157,7 @@
       rtx pat = PATTERN (next);
       rtx src, t;

-      if (GET_CODE (pat) == RETURN)
+      if ((GET_CODE (pat) == RETURN) || (GET_CODE (pat) == PARALLEL))
        return UNKNOWN;

       src = SET_SRC (pat);
EOF
  cd $START_DIR
  cd $ARCHIVE_DIR
  tar cfvz $MSPGCC_CVS_ARCHIVE mspgcc-cvs
  rm -rf mspgcc-cvs
  cd $START_DIR
}
MSPGCC_CVS_build() {
  true
}
MSPGCC_CVS_install() {
  true
}

### --- libc cvs

LIBC_get() {
  MSPGCC_CVS_get
}

LIBC_build() {
  [ -d msp1 ] || mkdir msp1
  [ -d msp2 ] || mkdir msp2
  perl -i.orig -pe 's{^(prefix\s*=\s*)(.*)}{${1}'"$INSTALL_DIR"'}' Makefile
  make || exit 1
}

### --- defaults for get, extract, build, install

default_get() {
  get_url "$1" "$2" || exit 1
}

default_extract() {
  extract_tarx "$1" "$2" || exit 1
}

default_build() {
  make || exit 1
}

default_install() {
  make install || exit 1
}

### ---
### ---
### ---

is_dir_in_path() {
  perl -e '@p=split /:/, $ENV{PATH}; @g=grep { $_ eq "'"$1"'" } @p; exit 
(@g?0:1);'
}

get_url() {
  wget --passive-ftp "$1" -O "$2"
}

tar_compress_opt() {
  [ ${1##*gz}x == x ] && echo z && return
  [ ${1##*bz2}x == x ] && echo j && return
}

tar_topdir() {
  tar -tv`tar_compress_opt $1`f "$1" 2>/dev/null \
    | perl -e 'print $1 if <> =~ /^(?:\S+\s+){5}([^\/\n]+)/'
}

extract_tarx() {
  [ -d "$2" ] || mkdir -p "$2"
  tar -xv`tar_compress_opt $1`f "$1" -C "$2"
}

get_pkg_function() {
  type "${1}_$2" >/dev/null 2>/dev/null && echo "${1}_$2" && return
  echo "default_$2"
}

process_package() {
  PKG="$1"

  echo
  echo "processing $PKG"

  ###  get
  if [ $OPT_NUM -ge 1 ]
  then
    eval PKG_URL="\$${PKG}_URL"
    eval PKG_ARCHIVE="\$${PKG}_ARCHIVE"
    [ x"$PKG_ARCHIVE" = x ] && PKG_ARCHIVE="${PKG_URL##*/}"
    [ -d "$ARCHIVE_DIR" ] || mkdir -p "$ARCHIVE_DIR" || exit 1
    WORK_FILE="$ARCHIVE_DIR/$PKG_ARCHIVE"
    if [ -f "$WORK_FILE" ]
    then
      echo "download $PKG: found $WORK_FILE, skipping download"
    else
      echo "download $PKG: downloading $WORK_FILE"
      eval `get_pkg_function $PKG get` "$PKG_URL" "$WORK_FILE"
    fi
  fi

  ###  extract
  if [ $OPT_NUM -ge 2 ]
  then
    eval PKG_DIR="\$${PKG}_DIR"
    [ x"$PKG_DIR" = x ] && PKG_DIR=`tar_topdir "$WORK_FILE"`
    [ -d "$BUILD_DIR" ] || mkdir -p "$BUILD_DIR" || exit 1
    WORK_DIR="$BUILD_DIR/$PKG_DIR"
    if [ -d "$WORK_DIR" ]
    then
      echo "found $WORK_DIR, skipping decompress"
    else
      echo "decompressing $WORK_FILE to $WORK_DIR"
      eval `get_pkg_function $PKG extract` "$WORK_FILE" "$BUILD_DIR"
    fi
  fi

  ###  build
  if [ $OPT_NUM -ge 3 ]
  then
    BUILD_COMPLETE="$WORK_DIR/build-complete"
    if [ -f "$BUILD_COMPLETE" ]
    then
      echo "found $BUILD_COMPLETE, skipping build"
    else
      echo "building $PKG"
      cd "$WORK_DIR"
      eval `get_pkg_function $PKG build`
      cd "$START_DIR"
      touch "$BUILD_COMPLETE"
    fi
  fi

  ###  install
  if [ $OPT_NUM -ge 4 ]
  then
    echo "installing $PKG"
    cd "$WORK_DIR"
    eval `get_pkg_function $PKG install`
    cd "$START_DIR"
  fi
}

### ---

# Force path to something explicit to avoid seriously weird errors
export PATH="$INSTALL_DIR/bin:$PATH"
if [ x$PACKAGE = x ]
then
  process_package MSPGCC_CVS
  process_package BINUTILS
  process_package GCC
  process_package LIBC
else
  process_package $PACKAGE
fi

#The machine was either a PowerPC Mac or Unix
fi
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to