79 lines
1.7 KiB
Bash
Executable File
79 lines
1.7 KiB
Bash
Executable File
#!/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
|