diff options
| author | KonAki <konaki@anokonaki.org> | 2026-10-07 19:03:04 +0800 |
|---|---|---|
| committer | KonAki <konaki@anokonaki.org> | 2026-10-07 19:03:04 +0800 |
| commit | dfa9a616c3d89a935a4c0bf68f7801581d8b5037 (patch) | |
| tree | dbedd97ded9a227751555744fc246943af6e6c77 /build.sh | |
| parent | 5eaa99c67ca44bd48d8e2eae7f906c942d565d67 (diff) | |
Move headers to kon/ and add per-lib implementation stubs
Diffstat (limited to 'build.sh')
| -rw-r--r-- | build.sh | 83 |
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} |
