diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/gen-bits-internal.sh | 9 | ||||
-rwxr-xr-x | tools/gen-bits.sh | 34 | ||||
-rwxr-xr-x | tools/gen-types-internal.sh | 8 | ||||
-rwxr-xr-x | tools/gen-types.sh | 29 |
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 |