diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 index e1f0398..75bad80 --- a/build.sh +++ b/build.sh @@ -4,6 +4,7 @@ set -e # Find the odin binary export PATH="$HOME/.odin:$PATH" + SRC_DIR="src" OUT_DIR="out" OUT_NAME="pong" @@ -16,91 +17,88 @@ DEBUGGER=0 VALGRIND=0 usage() { - echo "Usage: $0 [-b] [-o] [-w] [-d] [-v] [-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 " -v build then run under Valgrind" - echo " -c clean build artifacts" - echo " -h show this help" - exit 1 + echo "Usage: $0 [-b] [-o] [-w] [-d] [-v] [-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 " -v build then run under Valgrind" + echo " -c clean build artifacts" + echo " -h show this help" + exit 1 } while getopts "bowdvch" opt; do - case $opt in - b) BUILD_ONLY=1 ;; - o) OPTIMIZED=1 ;; - w) WEB=1 ;; - d) DEBUGGER=1 ;; - v) VALGRIND=1 ;; - c) CLEAN=1 ;; - h) usage ;; - *) usage ;; - esac + case $opt in + b) BUILD_ONLY=1 ;; + o) OPTIMIZED=1 ;; + w) WEB=1 ;; + d) DEBUGGER=1 ;; + v) VALGRIND=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 + 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" ) + 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 HTML shell if one exists - if [ -f "web/index_template.html" ]; then - cp web/index_template.html "$OUT_DIR/index.html" - fi + # Copy the HTML shell if one exists + 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 + 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 + echo "Building optimized ($SRC_DIR -> $OUT_DIR/$OUT_NAME)..." + odin build "$SRC_DIR" \ + -out:"$OUT_DIR/$OUT_NAME" \ + -o:speed u + -no-bounds-check else - echo "Building debug ($SRC_DIR -> $OUT_DIR/$OUT_NAME)..." - odin build "$SRC_DIR" \ - -out:"$OUT_DIR/$OUT_NAME" \ - -define:DEBUG_MODE=true + echo "Building debug ($SRC_DIR -> $OUT_DIR/$OUT_NAME)..." + odin build "$SRC_DIR" \ + -out:"$OUT_DIR/$OUT_NAME" \ + -define:DEBUG_MODE=true fi echo "Build complete." if [ "$BUILD_ONLY" -eq 0 ]; then - echo "----------------------------------------" + echo "----------------------------------------" - if [ "$DEBUGGER" -eq 1 ]; then - lldb "$OUT_DIR/$OUT_NAME" + if [ "$DEBUGGER" -eq 1 ]; then + lldb "$OUT_DIR/$OUT_NAME" - elif [ "$VALGRIND" -eq 1 ]; then - # --show-leak-kinds=definite,possible reduces tons of noise - # still shows the leaks you actually need to fix. - # to audit whole process, temporarily switch back to --show-leak-kinds=all - valgrind \ + elif [ "$VALGRIND" -eq 1 ]; then + valgrind \ --leak-check=full \ --show-leak-kinds=definite,possible \ --track-origins=yes \ --errors-for-leak-kinds=definite,possible \ --error-exitcode=1 \ - --log-file="$OUT_DIR/valgrind.log" \ - "./$OUT_DIR/$OUT_NAME" + --log-file="$OUT_DIR/valgrind.log" \ + "./$OUT_DIR/$OUT_NAME" - echo - echo "Valgrind report written to $OUT_DIR/valgrind.log" - else - "./$OUT_DIR/$OUT_NAME" - fi -fi \ No newline at end of file + echo + echo "Valgrind report written to $OUT_DIR/valgrind.log" + else + "./$OUT_DIR/$OUT_NAME" + fi +fi