aboutsummaryrefslogtreecommitdiff
path: root/snag/gen.sh
diff options
context:
space:
mode:
authorRiley Beckett <rbeckettvt@gmail.com>2026-07-21 22:14:36 -0400
committerRiley Beckett <rbeckettvt@gmail.com>2026-07-21 22:14:36 -0400
commit2d1c5db52be9cde9e013a724c149d7a84fe057ba (patch)
treeb613b945ce27e467132c689bd065871652db03f0 /snag/gen.sh
parentfeef592b397f6ec6b8b848d93b0cea9b9800f955 (diff)
add gen.sh and some better logging
Diffstat (limited to 'snag/gen.sh')
-rwxr-xr-xsnag/gen.sh57
1 files changed, 57 insertions, 0 deletions
diff --git a/snag/gen.sh b/snag/gen.sh
new file mode 100755
index 0000000..3e420f1
--- /dev/null
+++ b/snag/gen.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+bin="snag"
+libs=""
+builddir="objs"
+PREFIX="/usr"
+
+while [ "$1" ]; do
+ case "$1" in
+ -*) exit 1 ;;
+ esac
+ shift
+done
+
+CFLAGS=${CFLAGS:-""}
+
+CFLAGS_RELEASE="$CFLAGS -O2"
+CFLAGS_DEBUG="$CFLAGS -Wall -g -DDEBUG=1"
+
+write() {
+ echo "$@" >> build.ninja
+}
+
+echo "$CFLAGS_DEBUG $(pkg-config --cflags $libs 2>/dev/null)" | tr ' ' '\n' > compile_flags.txt
+rm -f build.ninja
+
+write "builddir = $builddir"
+write "libs = $(pkg-config --libs $libs 2>/dev/null)"
+
+write 'rule link'
+write ' description = LD $out'
+write ' command = gcc $libs $in -o $out'
+for target in $(echo "debug release"); do
+ eval write "cflags_$target = \$CFLAGS_${target^^} $(pkg-config --cflags $libs 2>/dev/null)"
+
+ write "rule cc-$target"
+ write ' deps = gcc'
+ write ' depfile = $out.d'
+ write ' description = CC $out'
+ write " command = gcc -MD -MF \$out.d \$cflags_$target -c \$in -o \$out"
+
+
+ files="$(find . -name '*.c')"
+ sedstr=$(printf 's,^\./\(.*\)\.c$,%s\/%s\/\\1.o,g' ${builddir} ${target})
+ ofiles=$(echo "$files" | sed ${sedstr})
+
+ for f in $files; do
+ of=$(echo $f | sed ${sedstr})
+ write "build $of: cc-$target $f"
+ done
+ write "build $builddir/$target/$bin: link $(echo $ofiles)"
+ write "build $target: phony $builddir/$target/$bin"
+done
+
+write "default release"
+
+echo "Wrote ./build.ninja file"