Files

60 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Rebuilds hotreload_live_plugin every time LivePlugin.cpp's mtime
# changes, so you can just edit-and-save instead of switching to a
# terminal to rebuild by hand. Run this in one terminal; run
# hotreload_live_demo_host (built once) in another; edit
# Plugin/src/LivePlugin.cpp in your editor. Matches this project's
# other scripts/*.sh conventions (see scripts/run.sh) even though it
# lives here rather than in scripts/, since it's specific to this one
# example rather than general project tooling.
#
# Usage (from anywhere):
# source/examples/HotReloadLiveDemo/watch.sh [build-dir]
#
# build-dir defaults to out/build (relative to the project root, same
# default as scripts/build.sh); pass your own if you configured
# somewhere else, e.g.:
# source/examples/HotReloadLiveDemo/watch.sh out/build-clang
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR/../../.."
BUILD_DIR="${1:-out/build}"
SOURCE_FILE="$SCRIPT_DIR/Plugin/src/LivePlugin.cpp"
TARGET="hotreload_live_plugin"
if [ ! -d "$BUILD_DIR" ]; then
echo "error: build directory '$BUILD_DIR' not found." >&2
echo "Configure it first, e.g.:" >&2
echo " cmake -S . -B $BUILD_DIR -DBUILD_EXAMPLES=ON" >&2
exit 1
fi
file_mtime() {
# GNU stat (Linux) and BSD/macOS stat use incompatible flags --
# try one, fall back to the other.
stat -c %Y "$SOURCE_FILE" 2>/dev/null || stat -f %m "$SOURCE_FILE"
}
echo "Watching: $SOURCE_FILE"
echo "Rebuilds into: $BUILD_DIR (target: $TARGET)"
echo "Edit and save that file -- Ctrl+C here to stop watching (the running Host keeps going either way)."
echo ""
last="$(file_mtime)"
while true; do
current="$(file_mtime)"
if [ "$current" != "$last" ]; then
last="$current"
echo "---- rebuilding ($(date '+%H:%M:%S')) ----"
if cmake --build "$BUILD_DIR" --target "$TARGET"; then
echo "---- done -- the running Host should pick this up within about a second ----"
else
echo "---- build failed -- fix the error above and save again ----"
fi
echo ""
fi
sleep 0.5
done