summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-01-25 15:52:18 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-01-25 15:52:18 +0000
commit00c9cb1b22cc17c4db573e0e613a5f116ff0092e (patch)
tree53178b2c52c6e97c6193f73378f3c5e5a781a914 /tools
parent2746b131aa482ac17c94bc6b82e58dbcc1b752cf (diff)
downloadskalibs-00c9cb1b22cc17c4db573e0e613a5f116ff0092e.tar.xz
More work on the types. This commit builds but has errors.
Rework src/headers entirely: build skalibs/types.h Convert skalibs/fmtscan.h types. Propagate changes until it builds. There are a lot of incompatible pointer issues remaining, those will be fixed with the buffer overhaul.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/gen-bits-internal.sh9
-rwxr-xr-xtools/gen-bits.sh34
-rwxr-xr-xtools/gen-types-internal.sh8
-rwxr-xr-xtools/gen-types.sh29
4 files changed, 80 insertions, 0 deletions
diff --git a/tools/gen-bits-internal.sh b/tools/gen-bits-internal.sh
new file mode 100755
index 0000000..93e64ab
--- /dev/null
+++ b/tools/gen-bits-internal.sh
@@ -0,0 +1,9 @@
+#!/bin/sh -e
+
+bits="$1"
+dfmt="$2"
+ofmt="$3"
+xfmt="$4"
+bfmt="$5"
+
+exec sed -e "s/@BITS@/$bits/g; s/@DFMT@/$dfmt/g; s/@OFMT@/$ofmt/g; s/@XFMT@/$xfmt/g; s/@BFMT@/$bfmt/g;" < src/headers/bits-template
diff --git a/tools/gen-bits.sh b/tools/gen-bits.sh
new file mode 100755
index 0000000..973562d
--- /dev/null
+++ b/tools/gen-bits.sh
@@ -0,0 +1,34 @@
+#!/bin/sh -e
+
+#!/bin/sh -e
+
+sysdeps="$1"
+bits="$2"
+dfmt="$3"
+ofmt="$4"
+xfmt="$5"
+bfmt="$6"
+
+tools/gen-types-internal.sh "" "" "$bits" < src/headers/bits-header
+
+if test "$bits" = 64 && grep -qF 'uint64t: no' "$sysdeps" ; then
+ if grep -qF 'sizeofulong: 8' "$sysdeps" ; then
+ cat src/headers/uint64-ulong64
+ else
+ cat src/headers/uint64-noulong64
+ fi
+else
+ tools/gen-types-internal.sh "" "" "$bits" < src/headers/bits-stdint
+fi
+
+if grep -qF 'endianness: little' < "$sysdeps" ; then
+ endian=l
+elif grep -qF 'endianness: big' < "$sysdeps" ; then
+ endian=b
+else
+ echo 'Error ! Unsupported endianness' 1>&2
+ ./crash
+fi
+tools/gen-types-internal.sh "" "" "$bits" < src/headers/bits-${endian}endian
+tools/gen-bits-internal.sh "$bits" "$dfmt" "$ofmt" "$xfmt" "$bfmt"
+exec tools/gen-types-internal.sh "" "" "$bits" < src/headers/bits-footer
diff --git a/tools/gen-types-internal.sh b/tools/gen-types-internal.sh
new file mode 100755
index 0000000..e95c314
--- /dev/null
+++ b/tools/gen-types-internal.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -e
+
+type="$1"
+typecaps="$2"
+bits="$3"
+bytes=$(expr "$bits" / 8)
+
+exec sed -e "s/@type@/$type/g; s/@TYPE@/$typecaps/g; s/@BITS@/$bits/g; s/@BYTES@/$bytes/g;"
diff --git a/tools/gen-types.sh b/tools/gen-types.sh
new file mode 100755
index 0000000..acc9dab
--- /dev/null
+++ b/tools/gen-types.sh
@@ -0,0 +1,29 @@
+#!/bin/sh -e
+
+sysdeps="$1"
+shift
+
+getbits() {
+ expr 8 '*' `grep -F sizeof$2: < "$1" | cut -f2 -d' ')`
+}
+
+cat < src/headers/types-header
+
+for i in short int long ; do
+ I=$(echo "$i" | tr a-z A-Z)
+ bits=$(getbits "$sysdeps" u$i)
+ tools/gen-types-internal.sh u$i U$I $bits < src/headers/unsigned-template
+ tools/gen-types-internal.sh $i $I $bits < src/headers/signed-template
+done
+
+for i in "$@" ; do
+ un=un
+ I=$(echo "$i" | tr a-z A-Z)
+ bits=$(getbits "$sysdeps" $i)
+ if grep -qF "signed$i: yes" < "$sysdeps" ; then
+ un=
+ fi
+ tools/gen-types-internal.sh $i $I $bits < src/headers/"$un"signed-template
+done
+
+exec cat < src/headers/types-footer