#!/bin/bash

# This script wraps around m68k-eyebot-elf-gcc or m68k-eyebot-elf-g++,
# providing a cross compiler interface similar to that provided by gcc for
# native compilations.  That is, both single-file compilations and
# multiple-file builds are supported.

# Written by Jason Foo <foo-jr@ee.uwa.edu.au>
# Modified by Stefan Schmitt <sschmitt@ee.uwa.edu.au>
# Last updated on Mon, 18 Aug 2003 12:34:37 +0800

# Define program names.
CROSS_CC=${CROSS_CC:-m68k-eyebot-elf-gcc}
OBJCOPY=m68k-eyebot-elf-objcopy
SREC2BIN=srec2bin

if test ! -z "$ROBIOS"; then
    CROSS_CPPFLAGS="$CROSS_CPPFLAGS -I$ROBIOS/include"
    CROSS_CFLAGS="$CROSS_CFLAGS"
    CROSS_LDFLAGS="$CROSS_LDFLAGS -L$ROBIOS/lib"
fi

RUN_CC="$CROSS_CC $CROSS_CPPFLAGS $CROSS_CFLAGS $*"

# Abort with an error message if no files were specified.
if test -z "$*"
then
    echo "`basename $0`: no input files."
    exit 1
fi

# Determine whether to perform linking or not.
LINK=1
for ARGUMENT in $*
do
    # No arguments after --
    if test "$ARGUMENT" = -- ; then
        break
    fi	
    # Don't link if -c option specified.
    if test "${ARGUMENT:0:2}" = -c
    then
        LINK=0
    fi
    # Don't link if -S option specified.
    if test "${ARGUMENT:0:2}" = -S
    then
        LINK=0
    fi
    # Don't link if -E option specified.
    if test "${ARGUMENT:0:2}" = -E
    then
        LINK=0
    fi
    # Don't link if -M? option specified.
    if test "${ARGUMENT:0:2}" = -M
    then
        LINK=0
    fi
done

if test $LINK = 1
then
    # Determine the output file name.
    OUTFILE=a.out
    THISTIME=0
    for ARGUMENT in $*
    do
        if test $THISTIME = 1
        then
            OUTFILE="$ARGUMENT"
            THISTIME=0
        fi
        if test "${ARGUMENT:0:2}" = -o
        then
            OUTFILE="${ARGUMENT:2}"
            if test -z "$OUTFILE"
            then
                THISTIME=1
            fi
        fi
    done

    RUN_CC="$RUN_CC $CROSS_LDFLAGS"

    # Run the compiler and convert or compress if necessary.
    case "$OUTFILE" in
    *.hx)	ELF="${OUTFILE%.hx}.elf"
		$RUN_CC || exit
		mv "$OUTFILE" "$ELF"
		$OBJCOPY -O srec --gap-fill=0 "$ELF" "$OUTFILE.tmp"
		$SREC2BIN "$OUTFILE.tmp" "$OUTFILE"	
		rm -f "$OUTFILE.tmp"
		;;
    *.hex)	ELF="${OUTFILE%.hex}.elf"
		$RUN_CC || exit
		mv "$OUTFILE" "$ELF"
		$OBJCOPY -O srec --gap-fill=0 "$ELF" "$OUTFILE"
		;;
    a.out)	ELF="$OUTFILE.elf"
		$RUN_CC || exit
		mv "$OUTFILE" "$ELF"
		$OBJCOPY -O srec --gap-fill=0 "$ELF" "$OUTFILE"
		;;
    *)		$RUN_CC || exit
    		;;
    esac

else
    # Run the compiler.
    $RUN_CC || exit
fi
