248d23e82b
Since newlib no longer shares the same repo as binutils/gdb, we have to go searching further afield to locate the sources. We still look at the top level for newlib, but if that is not found, we also try up one dir outside of this source tree. It sucks, but better than the status quo (no workie).
236 lines
5.9 KiB
Bash
Executable File
236 lines
5.9 KiB
Bash
Executable File
#! /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 opcfile
|
|
#
|
|
# 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
|
|
shift ; opcfile=$9
|
|
|
|
rootdir=${srcdir}/../..
|
|
|
|
test -z "${opcfile}" && opcfile=/dev/null
|
|
|
|
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"
|
|
|
|
# avoid collisions in parallel makes
|
|
tmp=tmp-$$
|
|
|
|
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} ${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"
|
|
;;
|
|
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"
|
|
;;
|
|
esac
|
|
|
|
case "$extrafiles" in
|
|
*/extr/*) fileopts="${fileopts} -E ${tmp}-ext.c1" ;;
|
|
esac
|
|
case "$extrafiles" in
|
|
*/read/*) fileopts="${fileopts} -R ${tmp}-read.c1" ;;
|
|
esac
|
|
case "$extrafiles" in
|
|
*/write/*) fileopts="${fileopts} -W ${tmp}-write.c1" ;;
|
|
esac
|
|
case "$extrafiles" in
|
|
*/sem/*) fileopts="${fileopts} -S ${tmp}-sem.c1" ;;
|
|
esac
|
|
case "$extrafiles" in
|
|
*/semsw/*) fileopts="${fileopts} -X ${tmp}-semsw.c1" ;;
|
|
esac
|
|
|
|
${cgen} ${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
|
|
rm -f ${tmp}-cpu.h1 ${tmp}-cpu.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
|
|
rm -f ${tmp}-dec.h1 ${tmp}-dec.c1
|
|
;;
|
|
esac
|
|
|
|
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 ; \
|
|
rm -f ${tmp}-ext.c1
|
|
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 ; \
|
|
rm -f ${tmp}-read.c1
|
|
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 ; \
|
|
rm -f ${tmp}-write.c1
|
|
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 ; \
|
|
rm -f ${tmp}-sem.c1
|
|
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 ; \
|
|
rm -f ${tmp}-semsw.c1
|
|
fi
|
|
|
|
;;
|
|
|
|
defs)
|
|
rm -f ${tmp}-defs.h1 ${tmp}-defs.h
|
|
|
|
${cgen} ${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
|
|
rm -f ${tmp}-defs.h1
|
|
;;
|
|
|
|
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} ${cgendir}/cgen-opc.scm \
|
|
-s ${cgendir} \
|
|
${cgenflags} \
|
|
-OPC ${opcfile} \
|
|
-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
|