106 lines
3.5 KiB
Bash
106 lines
3.5 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# run-qt.sh — Build and run the HCIE Qt6 image editor.
|
||
|
|
#
|
||
|
|
# Usage:
|
||
|
|
# ./run-qt.sh — build + run
|
||
|
|
# ./run-qt.sh build — build only
|
||
|
|
# ./run-qt.sh run — run only (skip build)
|
||
|
|
# ./run-qt.sh clean — clean build directory
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
QT_DIR="$SCRIPT_DIR/hcie-qt-app"
|
||
|
|
BUILD_DIR="$QT_DIR/build"
|
||
|
|
|
||
|
|
# ── Colors ────────────────────────────────────────────────────────────────
|
||
|
|
RED='\033[0;31m'
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
CYAN='\033[0;36m'
|
||
|
|
NC='\033[0m'
|
||
|
|
|
||
|
|
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
|
||
|
|
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
|
||
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||
|
|
err() { echo -e "${RED}[ERROR]${NC} $*"; }
|
||
|
|
|
||
|
|
# ── Engine static library check ───────────────────────────────────────────
|
||
|
|
ENGINE_LIB="$SCRIPT_DIR/target/debug/libhcie_engine_api.a"
|
||
|
|
|
||
|
|
ensure_engine_lib() {
|
||
|
|
if [ ! -f "$ENGINE_LIB" ]; then
|
||
|
|
warn "Engine static library not found at $ENGINE_LIB"
|
||
|
|
info "Building engine with cargo..."
|
||
|
|
cargo build -p hcie-engine-api 2>&1
|
||
|
|
if [ ! -f "$ENGINE_LIB" ]; then
|
||
|
|
err "Failed to build engine library. Aborting."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
ok "Engine library built."
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# ── Build ─────────────────────────────────────────────────────────────────
|
||
|
|
do_build() {
|
||
|
|
info "Ensuring engine static library exists..."
|
||
|
|
ensure_engine_lib
|
||
|
|
|
||
|
|
info "Configuring CMake..."
|
||
|
|
mkdir -p "$BUILD_DIR"
|
||
|
|
cmake -S "$QT_DIR" -B "$BUILD_DIR" \
|
||
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
||
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
||
|
|
|
||
|
|
info "Building hcie-qt..."
|
||
|
|
cmake --build "$BUILD_DIR" -j"$(nproc 2>/dev/null || echo 4)"
|
||
|
|
|
||
|
|
ok "Build complete: $BUILD_DIR/hcie-qt"
|
||
|
|
}
|
||
|
|
|
||
|
|
# ── Run ───────────────────────────────────────────────────────────────────
|
||
|
|
do_run() {
|
||
|
|
BINARY="$BUILD_DIR/hcie-qt"
|
||
|
|
if [ ! -f "$BINARY" ]; then
|
||
|
|
err "Binary not found at $BINARY. Run './run-qt.sh build' first."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Detect display server
|
||
|
|
if [ -n "$DISPLAY" ] || [ -n "$WAYLAND_DISPLAY" ]; then
|
||
|
|
info "Launching hcie-qt (windowed mode)..."
|
||
|
|
exec "$BINARY" "$@"
|
||
|
|
else
|
||
|
|
info "No display detected. Launching in offscreen mode..."
|
||
|
|
info "Press Ctrl+C to quit."
|
||
|
|
QT_QPA_PLATFORM=offscreen exec "$BINARY" "$@"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# ── Clean ─────────────────────────────────────────────────────────────────
|
||
|
|
do_clean() {
|
||
|
|
info "Removing build directory..."
|
||
|
|
rm -rf "$BUILD_DIR"
|
||
|
|
ok "Clean complete."
|
||
|
|
}
|
||
|
|
|
||
|
|
# ── Main ──────────────────────────────────────────────────────────────────
|
||
|
|
ACTION="${1:-all}"
|
||
|
|
|
||
|
|
case "$ACTION" in
|
||
|
|
build)
|
||
|
|
do_build
|
||
|
|
;;
|
||
|
|
run)
|
||
|
|
do_run
|
||
|
|
;;
|
||
|
|
clean)
|
||
|
|
do_clean
|
||
|
|
;;
|
||
|
|
all|*)
|
||
|
|
do_build
|
||
|
|
echo ""
|
||
|
|
do_run
|
||
|
|
;;
|
||
|
|
esac
|