binutils-gdb/sim/common/cgen.sh
Tom Tromey fd669f71ea Simplify definition of GUILE
This patch sets GUILE to just plain 'guile'.

In the distant ("devo") past, the top-level build did support building
Guile in-tree.  However, I don't think this really works any more.
For one thing, there are no build dependencies on it, so there's no
guarantee it would actually be built before the uses.

This patch also removes the use of "-s" as an option to cgen scheme
scripts.  With my latest patch upstream, this is no longer needed.

After the upstream changes, either Guile 2 or Guile 3 will work, with
or without the compiler enabled.

2023-08-24  Tom Tromey  <tom@tromey.com>

	* cgen.sh: Don't pass "-s" to cgen.
	* Makefile.in: Rebuild.
	* Makefile.am (GUILE): Simplify.
2023-08-26 13:09:38 -06:00

232 lines
5.8 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 \
${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 \
${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 \
${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 \
${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