#! /bin/sh
# Generate CGEN simulator files.
#
# Usage: /bin/sh cgen.sh {"arch"|"cpu"|"decode"|"defs"|"cpu-decode"} \
#	srcdir cgen cgendir cgenflags \
#	arch archflags cpu mach suffix archfile extrafiles
#
# We store the generated files in the source directory until we decide to
# ship a Scheme interpreter (or other implementation) with gdb/binutils.
# Maybe we never will.

# We want to behave like make, any error forces us to stop.
set -e

action=$1
srcdir=$2
cgen=$3
cgendir=$4
cgenflags=$5
arch=$6
archflags=$7
cpu=$8
isa=$9
# portably bring parameters beyond $9 into view
shift ; mach=$9
shift ; suffix=$9
shift ; archfile=$9
shift ; extrafiles=$9

rootdir=${srcdir}/../..

if test -z "$isa" ; then
  isa=all
  prefix=$cpu
else
  prefix=${cpu}_$isa
fi

lowercase='abcdefghijklmnopqrstuvwxyz'
uppercase='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ARCH=`echo ${arch} | tr "${lowercase}" "${uppercase}"`
CPU=`echo ${cpu} | tr "${lowercase}" "${uppercase}"`
PREFIX=`echo ${prefix} | tr "${lowercase}" "${uppercase}"`

sedscript="\
-e s/@ARCH@/${ARCH}/g -e s/@arch@/${arch}/g \
-e s/@CPU@/${CPU}/g -e s/@cpu@/${cpu}/g \
-e s/@PREFIX@/${PREFIX}/g -e s/@prefix@/${prefix}/g"

case $action in
arch)
	rm -f tmp-arch.h1 tmp-arch.h
	rm -f tmp-arch.c1 tmp-arch.c
	rm -f tmp-all.h1 tmp-all.h

	${cgen} -s ${cgendir}/cgen-sim.scm \
		-s ${cgendir} \
		${cgenflags} \
		-f "${archflags}" \
		-m ${mach} \
		-a ${archfile} \
		-i ${isa} \
		-A tmp-arch.h1 \
		-B tmp-arch.c1 \
		-N tmp-all.h1
	sed $sedscript < tmp-arch.h1 > tmp-arch.h
	${rootdir}/move-if-change tmp-arch.h ${srcdir}/arch.h
	sed $sedscript < tmp-arch.c1 > tmp-arch.c
	${rootdir}/move-if-change tmp-arch.c ${srcdir}/arch.c
	sed $sedscript < tmp-all.h1 > tmp-all.h
	${rootdir}/move-if-change tmp-all.h ${srcdir}/cpuall.h

	rm -f tmp-arch.h1 tmp-arch.c1 tmp-all.h1
	;;

cpu | decode | cpu-decode)

	fileopts=""
	case $action in
	*cpu*)
		rm -f tmp-cpu.h1 tmp-cpu.c1
		rm -f tmp-ext.c1 tmp-read.c1 tmp-write.c1
		rm -f tmp-sem.c1 tmp-semsw.c1
		rm -f tmp-mod.c1
		rm -f tmp-cpu.h tmp-cpu.c
		rm -f tmp-ext.c tmp-read.c tmp-write.c
		rm -f tmp-sem.c tmp-semsw.c tmp-mod.c
		fileopts="$fileopts \
			-C tmp-cpu.h1 \
			-U tmp-cpu.c1 \
			-M tmp-mod.c1 \
			${extrafiles}"
		;;
	esac
	case $action in
	*decode*)
		rm -f tmp-dec.h1 tmp-dec.h tmp-dec.c1 tmp-dec.c
		fileopts="$fileopts \
			-T tmp-dec.h1 \
			-D tmp-dec.c1"
		case "$extrafiles" in
		  ignored) # Do nothing.
			   ;;
		  *)       fileopts="$fileopts $extrafiles"
			   ;;
		esac
		;;
	esac

	${cgen} -s ${cgendir}/cgen-sim.scm \
		-s ${cgendir} \
		${cgenflags} \
		-f "${archflags}" \
		-m ${mach} \
		-a ${archfile} \
		-i ${isa} \
		${fileopts}

	case $action in
	*cpu*)
		sed $sedscript < tmp-cpu.h1 > tmp-cpu.h
		${rootdir}/move-if-change tmp-cpu.h ${srcdir}/cpu${suffix}.h
		sed $sedscript < tmp-cpu.c1 > tmp-cpu.c
		${rootdir}/move-if-change tmp-cpu.c ${srcdir}/cpu${suffix}.c
		sed $sedscript < tmp-mod.c1 > tmp-mod.c
		${rootdir}/move-if-change tmp-mod.c ${srcdir}/model${suffix}.c
		if test -f tmp-ext.c1 ; then \
			sed $sedscript < tmp-ext.c1 > tmp-ext.c ; \
			${rootdir}/move-if-change tmp-ext.c ${srcdir}/extract${suffix}.c ; \
		fi
		if test -f tmp-read.c1 ; then \
			sed $sedscript < tmp-read.c1 > tmp-read.c ; \
			${rootdir}/move-if-change tmp-read.c ${srcdir}/read${suffix}.c ; \
		fi
		if test -f tmp-write.c1 ; then \
			sed $sedscript < tmp-write.c1 > tmp-write.c ; \
			${rootdir}/move-if-change tmp-write.c ${srcdir}/write${suffix}.c ; \
		fi
		if test -f tmp-sem.c1 ; then \
			sed $sedscript < tmp-sem.c1 > tmp-sem.c ; \
			${rootdir}/move-if-change tmp-sem.c ${srcdir}/sem${suffix}.c ; \
		fi
		if test -f tmp-semsw.c1 ; then \
			sed $sedscript < tmp-semsw.c1 > tmp-semsw.c ; \
			${rootdir}/move-if-change tmp-semsw.c ${srcdir}/sem${suffix}-switch.c ; \
		fi

		rm -f tmp-cpu.h1 tmp-cpu.c1
		rm -f tmp-ext.c1 tmp-read.c1 tmp-write.c1
		rm -f tmp-sem.c1 tmp-semsw.c1 tmp-mod.c1
		;;
	esac

	case $action in
	*decode*)
		sed $sedscript < tmp-dec.h1 > tmp-dec.h
		${rootdir}/move-if-change tmp-dec.h ${srcdir}/decode${suffix}.h
		sed $sedscript < tmp-dec.c1 > tmp-dec.c
		${rootdir}/move-if-change tmp-dec.c ${srcdir}/decode${suffix}.c

		if test -f tmp-sem.c1 ; then \
			sed $sedscript < tmp-sem.c1 > tmp-sem.c ; \
			${rootdir}/move-if-change tmp-sem.c ${srcdir}/sem${suffix}.c ; \
		fi
		if test -f tmp-semsw.c1 ; then \
			sed $sedscript < tmp-semsw.c1 > tmp-semsw.c ; \
			${rootdir}/move-if-change tmp-semsw.c ${srcdir}/sem${suffix}-switch.c ; \
		fi

		rm -f tmp-dec.h1 tmp-dec.c1
		;;
	esac

	;;

defs)
	rm -f tmp-defs.h1 tmp-defs.h
	
	${cgen} -s ${cgendir}/cgen-sim.scm \
		-s ${cgendir} \
		${cgenflags} \
		-f "${archflags}" \
		-m ${mach} \
		-a ${archfile} \
		-i ${isa} \
		-G tmp-defs.h1
	sed $sedscript < tmp-defs.h1 > tmp-defs.h
	${rootdir}/move-if-change tmp-defs.h ${srcdir}/defs${suffix}.h
	;;

desc)
	rm -f tmp-desc.h1 tmp-desc.h
	rm -f tmp-desc.c1 tmp-desc.c
	rm -f tmp-opc.h1 tmp-opc.h

	${cgen} -s ${cgendir}/cgen-opc.scm \
		-s ${cgendir} \
		${cgenflags} \
		-f "${archflags}" \
		-m ${mach} \
		-a ${archfile} \
		-i ${isa} \
		-H tmp-desc.h1 \
		-C tmp-desc.c1 \
		-O tmp-opc.h1
	sed $sedscript < tmp-desc.h1 > tmp-desc.h
	${rootdir}/move-if-change tmp-desc.h ${srcdir}/${arch}-desc.h
	sed $sedscript < tmp-desc.c1 > tmp-desc.c
	${rootdir}/move-if-change tmp-desc.c ${srcdir}/${arch}-desc.c
	sed $sedscript < tmp-opc.h1 > tmp-opc.h
	${rootdir}/move-if-change tmp-opc.h ${srcdir}/${arch}-opc.h

	rm -f tmp-desc.h1 tmp-desc.c1 tmp-opc.h1
	;;

*)
	echo "`basename $0`: unknown action: ${action}" >&2
	exit 1
	;;

esac

exit 0
