diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..aa3b227 --- /dev/null +++ b/build.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +set -e + +SRC_DIR="src" +OUT_DIR="build" +OUT_NAME="game" + +BUILD_ONLY=0 +OPTIMIZED=0 +WEB=0 +CLEAN=0 +DEBUGGER=0 + +usage() { + echo "Usage: $0 [-b] [-o] [-w] [-d] [-c] [-h]" + echo " -b build only, don't run" + echo " -o optimized release build (-o:speed, no debug info)" + echo " -w web/WASM build (js_wasm32 target)" + echo " -d build then launch in debugger instead of running" + echo " -c clean build artifacts" + echo " -h show this help" + exit 1 +} + +while getopts "bowdch" opt; do + case $opt in + b) BUILD_ONLY=1 ;; + o) OPTIMIZED=1 ;; + w) WEB=1 ;; + d) DEBUGGER=1 ;; + c) CLEAN=1 ;; + h) usage ;; + *) usage ;; + esac +done + +mkdir -p "$OUT_DIR" + +if [ "$CLEAN" -eq 1 ]; then + echo "Cleaning..." + rm -rf "${OUT_DIR:?}"/* + exit 0 +fi + +if [ "$WEB" -eq 1 ]; then + echo "Building web (WASM)..." + odin build "$SRC_DIR" \ + -target:js_wasm32 \ + -out:"$OUT_DIR/$OUT_NAME.wasm" \ + $( [ "$OPTIMIZED" -eq 1 ] && echo "-o:speed" || echo "-debug" ) + + # copy the JS glue/html shell if you keep one alongside the script + if [ -f "web/index_template.html" ]; then + cp web/index_template.html "$OUT_DIR/index.html" + fi + + echo "Web build complete -> $OUT_DIR/$OUT_NAME.wasm" + exit 0 +fi + +if [ "$OPTIMIZED" -eq 1 ]; then + echo "Building optimized ($SRC_DIR -> $OUT_DIR/$OUT_NAME)..." + odin build "$SRC_DIR" -out:"$OUT_DIR/$OUT_NAME" -o:speed -no-bounds-check +else + echo "Building debug ($SRC_DIR -> $OUT_DIR/$OUT_NAME)..." + odin build "$SRC_DIR" -out:"$OUT_DIR/$OUT_NAME" -debug +fi + +echo "Build complete." + +if [ "$BUILD_ONLY" -eq 0 ]; then + echo "----------------------------------------" + if [ "$DEBUGGER" -eq 1 ]; then + lldb "$OUT_DIR/$OUT_NAME" + else + "./$OUT_DIR/$OUT_NAME" + fi +fi