summaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build.sh')
-rwxr-xr-xbuild.sh165
1 files changed, 7 insertions, 158 deletions
diff --git a/build.sh b/build.sh
index 034e300..de35a20 100755
--- a/build.sh
+++ b/build.sh
@@ -1,165 +1,14 @@
#!/bin/sh
+# the real build is build.c. this makes sure there is a build program and runs it with what you gave it,
+# so ./build.sh does the same as ./build. the compiler it is made with is the one it builds the engine with
set -eu
cd "$(dirname "$0")"
-platform=native
-mode=release
-objdir=obj
-modules=
-developer=0
-
-usage()
-{
- echo "usage: build.sh [-d] [-D] [-p platform] [-m module,...] [-o objdir] [target ...]"
- echo "modules: font toml tile pack ui debug assets image audio mic sound model 2d fx particles picture rm rmmap rmtile rmdraw rmfield rmplugin rmdata script battle party save stage textbox platformer rpg 3d sector world"
- echo "platforms: native linux bsd windows"
- echo "targets: all run clean tools pack examples"
- exit 1
-}
-
-while getopts dDm:o:p: opt; do
- case $opt in
- d) mode=debug ;;
- D) developer=1 ;;
- m) modules="$modules $(echo "$OPTARG" | tr ',' ' ')" ;;
- 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 -lXext -lXrandr -lm"
- DEFS="-D_POSIX_C_SOURCE=200809L"
- # the BSDs keep X11 out of the default paths
- case $(uname -s) in
- NetBSD) x11=/usr/X11R7 ;;
- OpenBSD) x11=/usr/X11R6 ;;
- FreeBSD|DragonFly) x11=/usr/local ;;
- *) x11= ;;
- esac
- if [ -n "$x11" ]; then
- DEFS="$DEFS -I$x11/include"
- LDLIBS="-L$x11/lib -Wl,-R$x11/lib $LDLIBS"
- fi
- ;;
-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 -O1 -DKON_DEBUG"
- developer=1
-else
- MODEFLAGS="-O2 -DNDEBUG"
-fi
-[ $developer = 1 ] && MODEFLAGS="$MODEFLAGS -DKON_DEVELOPER"
-
-MODOBJS=
-
-addobj()
-{
- case " $MODOBJS " in
- *" $objdir/$1.o "*) ;;
- *) MODOBJS="$MODOBJS $objdir/$1.o" ;;
- esac
-}
-
-case " $modules " in
-*" sound "*)
- case " $modules " in
- *" audio "*) ;;
- *) modules="$modules audio" ;;
- esac
- ;;
-esac
-
-for m in $modules; do
- DEFS="$DEFS -DKON_MODULE_$(echo "$m" | tr 'a-z' 'A-Z')"
- case $m in
- font|toml|tile|pack|ui|debug|2d|fx|particles|picture|sound|rm|rmmap|rmtile|rmdraw|rmfield|rmplugin|rmdata|script|battle|party|save|stage|textbox|platformer|rpg|3d|sector|world) addobj "kon$m" ;;
- assets) addobj konassets ;;
- model) addobj konmodel; addobj konassets ;;
- image) addobj stb_image ;;
- audio|mic)
- addobj miniaudio
- addobj "kon$m"
- # ogg only works when ext/stb_vorbis.c is there
- if [ "$m" = audio ] && [ -f ext/stb_vorbis.c ]; then
- DEFS="$DEFS -DKON_VORBIS"
- addobj stb_vorbis
- fi
- case $platform in
- linux) LDLIBS="$LDLIBS -lpthread -ldl" ;;
- bsd) LDLIBS="$LDLIBS -lpthread" ;;
- esac
- ;;
- *) echo "build.sh: unknown module '$m'" >&2; usage ;;
- esac
-done
-
-need()
-{
- case " $DEFS " in
- *" -DKON_MODULE_$(echo "$1" | tr 'a-z' 'A-Z') "*) ;;
- *) DEFS="$DEFS -DKON_MODULE_$(echo "$1" | tr 'a-z' 'A-Z')" ;;
- esac
- addobj "kon$1"
-}
-
-# modules that use other modules
-case " $modules " in *" debug "*) need font; need assets ;; esac
-case " $modules " in *" ui "*) need font ;; esac
-case " $modules " in *" world "*) need 3d; need sector; need tile ;; esac
-case " $modules " in *" platformer "*|*" rpg "*) need tile ;; esac
-case " $modules " in *" stage "*|*" fx "*|*" picture "*) need 2d ;; esac
-case " $modules " in *" textbox "*) need 2d; need font ;; esac
-case " $modules " in *" 3d "*) need tile ;; esac
-case " $modules " in *" model "*) need assets ;; esac
-case " $modules " in *" party "*) need battle; need save ;; esac
-case " $modules " in *" rmdraw "*) need rmmap; need rmtile ;; esac
-case " $modules " in *" rmfield "*) need rmmap ;; esac
-case " $modules " in *" rmdata "*) need battle; need party; need save ;; esac
-case " $DEFS " in *" -DKON_MODULE_ASSETS "*) need pack ;; esac
-
-# the 3D renderer is only compiled when a module that draws in 3D is picked
-case " $DEFS " in
-*" -DKON_MODULE_3D "*|*" -DKON_MODULE_MODEL "*|*" -DKON_MODULE_SECTOR "*) DEFS="$DEFS -DKONSOFREN_3D" ;;
-esac
-
-case " $modules " in
-*" debug "*) [ $developer = 1 ] || echo "note: debug module does nothing without -d or -D" ;;
-esac
-
-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"
+cc=${CC:-cc}
+if [ ! -x build ]; then
+ echo "build.sh: making the build program with $cc"
+ $cc -DKON_CC="\"$cc\"" -o build build.c
fi
-echo "===> platform $platform, $mode build, modules:${modules:- none}"
-exec ${MAKE:-make} ${*:-all}
+exec ./build "$@"