aboutsummaryrefslogtreecommitdiff
path: root/src/build-utils.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/build-utils.sh')
-rwxr-xr-xsrc/build-utils.sh69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/build-utils.sh b/src/build-utils.sh
new file mode 100755
index 0000000..77ca1e0
--- /dev/null
+++ b/src/build-utils.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+cmd_align-size () {
+ local aligned
+
+ if [ $# -lt 2 ]; then
+ echo "Usage: $0 <alignment> <size>" >&2
+ return 2
+ fi
+
+ let "aligned = $2 % $1"
+ if [ $aligned -eq 0 ]; then
+ aligned=$2
+ else
+ let "aligned = ($2 / $1 + 1) * $1"
+ fi
+
+ echo $aligned
+
+ return 0
+}
+
+cmd_align-file () {
+ if [ $# -lt 2 ]; then
+ echo "Usage: $0 <alignment> <file>" >&2
+ return 2
+ fi
+
+ truncate -s $("$SELF" align-size "$1" $(stat -c "%s" $2)) "$2"
+}
+
+cmd_append-uint32 () {
+ local a b c d
+
+ if [ $# -lt 2 ]; then
+ echo "Usage: $0 <value> <file>" >&2
+ return 2
+ fi
+
+ let "a = ($1 & 0xFF000000) >> 24"
+ let "b = ($1 & 0x00FF0000) >> 16"
+ let "c = ($1 & 0x0000FF00) >> 8"
+ let "d = ($1 & 0x000000FF) >> 0"
+ a=$(printf "%X" $a)
+ b=$(printf "%X" $b)
+ c=$(printf "%X" $c)
+ d=$(printf "%X" $d)
+ printf "\\x$a\\x$b\\x$c\\x$d" >> "$2"
+}
+
+cmd_append-uint16 () {
+ local a b
+
+ if [ $# -lt 2 ]; then
+ echo "Usage: $0 <value> <file>" >&2
+ return 2
+ fi
+
+ let "a = ($1 & 0xFF00) >> 8"
+ let "b = ($1 & 0x00FF) >> 0"
+ a=$(printf "%X" $a)
+ b=$(printf "%X" $b)
+ printf "\\x$a\\x$b" >> "$2"
+}
+
+SELF="$0"
+cmd="$1"
+shift 1
+
+"cmd_$cmd" $@