summaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
authorKonAki <konaki@anokonaki.org>2026-10-07 19:03:04 +0800
committerKonAki <konaki@anokonaki.org>2026-10-07 19:03:04 +0800
commitdfa9a616c3d89a935a4c0bf68f7801581d8b5037 (patch)
treedbedd97ded9a227751555744fc246943af6e6c77 /build.sh
parent5eaa99c67ca44bd48d8e2eae7f906c942d565d67 (diff)
Move headers to kon/ and add per-lib implementation stubs
Diffstat (limited to 'build.sh')
-rw-r--r--build.sh83
1 files changed, 83 insertions, 0 deletions
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..3ed5bcf
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+set -eu
+
+cd "$(dirname "$0")"
+
+platform=native
+mode=release
+objdir=obj
+modules=
+
+usage()
+{
+ echo "usage: build.sh [-d] [-p platform] [-m module,...] [-o objdir] [target ...]"
+ echo "modules: font toml"
+ echo "platforms: native linux bsd windows"
+ echo "targets: all run clean"
+ exit 1
+}
+
+while getopts dm:o:p: opt; do
+ case $opt in
+ d) mode=debug ;;
+ m) modules=$OPTARG ;;
+ o) objdir=$OPTARG ;;
+ p) platform=$OPTARG ;;
+ *) usage ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+if [ "$platform" = native ]; then
+ case $(uname -s) in
+ Linux) platform=linux ;;
+ MINGW*|MSYS*|CYGWIN*) platform=windows ;;
+ *) platform=bsd ;;
+ esac
+fi
+
+EXE=
+DEFS=
+case $platform in
+linux|bsd)
+ LDLIBS="-lX11 -lXrandr -lm"
+ DEFS="-D_POSIX_C_SOURCE=200809L"
+ ;;
+windows)
+ CC=${CC:-x86_64-w64-mingw32-gcc}
+ LDLIBS="-lgdi32 -lm"
+ EXE=.exe
+ ;;
+*)
+ echo "build.sh: unknown platform '$platform'" >&2
+ usage
+ ;;
+esac
+
+if [ $mode = debug ]; then
+ MODEFLAGS="-g -O0 -DKON_DEBUG"
+else
+ MODEFLAGS="-O2 -DNDEBUG"
+fi
+
+MODOBJS=
+for m in $(echo "$modules" | tr ',' ' '); do
+ DEFS="$DEFS -DKON_MODULE_$(echo "$m" | tr 'a-z' 'A-Z')"
+ case $m in
+ font|toml) MODOBJS="$MODOBJS $objdir/kon$m.o" ;;
+ *) echo "build.sh: unknown module '$m'" >&2; usage ;;
+ esac
+done
+
+OBJDIR=$objdir
+export CC EXE LDLIBS MODEFLAGS DEFS OBJDIR MODOBJS
+
+mkdir -p "$OBJDIR"
+flags="$MODEFLAGS $DEFS $LDLIBS $MODOBJS ${CC:-cc}"
+if [ "$(cat "$OBJDIR/.flags" 2>/dev/null)" != "$flags" ]; then
+ rm -f "$OBJDIR"/*.o
+ echo "$flags" > "$OBJDIR/.flags"
+fi
+
+echo "===> platform $platform, $mode build, modules: ${modules:-none}"
+exec ${MAKE:-make} ${*:-all}