diff options
Diffstat (limited to 'sim/common/gentvals.sh')
-rw-r--r-- | sim/common/gentvals.sh | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/sim/common/gentvals.sh b/sim/common/gentvals.sh new file mode 100644 index 00000000000..6dd7315f30a --- /dev/null +++ b/sim/common/gentvals.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# Usage: gentvals.sh target type dir files pattern cpp + +target=$1 +type=$2 +dir=$3 +# FIXME: Would be nice to process #include's in these files. +files=$4 +pattern=$5 +cpp=$6 + +# FIXME: need trap to remove tmp files. + +rm -f tmpvals.list tmpvals.uniq +for f in $files +do + if test -f $dir/$f ; then + grep "#define[ ]$pattern" $dir/$f | sed -e "s/^.*#define[ ]\($pattern\)[ ]*\([^ ][^ ]*\).*$/\1/" >> tmpvals.list + fi +done + +sort <tmpvals.list | uniq >tmpvals.uniq + +rm -f tmpvals.h +for f in $files +do + if test -f $dir/$f ; then + echo "#include <$f>" >>tmpvals.h + fi +done + +cat tmpvals.uniq | +while read sym +do + echo "#ifdef $sym" >>tmpvals.h + echo 'DEFVAL { "'$sym'", '$sym ' },' >>tmpvals.h + echo "#endif" >>tmpvals.h +done + +if test -z "$target" +then + echo "#ifdef ${type}_defs" +else + echo "#ifdef NL_TARGET_$target" + echo "#ifdef ${type}_defs" +fi + +for f in $files +do + if test -f $dir/$f ; then + echo "/* from $f */" + fi +done + +if test -z "$target" +then + echo "/* begin $type target macros */" +else + echo "/* begin $target $type target macros */" +fi + +$cpp -I$dir tmpvals.h | grep DEFVAL | sed -e 's/DEFVAL//' -e 's/ / /' + +if test -z "$target" +then + echo "/* end $type target macros */" + echo "#endif" +else + echo "/* end $target $type target macros */" + echo "#endif" + echo "#endif" +fi + +rm -f tmpvals.list tmpvals.uniq tmpvals.h |