summaryrefslogtreecommitdiff
path: root/sim/common/gentvals.sh
diff options
context:
space:
mode:
Diffstat (limited to 'sim/common/gentvals.sh')
-rw-r--r--sim/common/gentvals.sh74
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