#!/usr/bin/env bash
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
BINARY="$PROJECT_ROOT/target/debug/gateway"

cargo build --package openshell-vm --bin gateway --quiet

# On macOS, codesign with the hypervisor entitlement so libkrun can use
# Apple's Hypervisor.framework. Re-sign after every build.
ENTITLEMENTS="$PROJECT_ROOT/crates/openshell-vm/entitlements.plist"
if [[ "$(uname)" == "Darwin" ]] && [[ -f "$ENTITLEMENTS" ]]; then
  codesign --entitlements "$ENTITLEMENTS" --force -s - "$BINARY" 2>/dev/null
fi

# Ensure libkrunfw is discoverable by libkrun's dlopen on macOS.
# dyld only reads DYLD_FALLBACK_LIBRARY_PATH at process startup, so we
# set it here before exec.
if [[ "$(uname)" == "Darwin" ]]; then
  HOMEBREW_LIB="$(brew --prefix 2>/dev/null || echo /opt/homebrew)/lib"
  export DYLD_FALLBACK_LIBRARY_PATH="${HOMEBREW_LIB}${DYLD_FALLBACK_LIBRARY_PATH:+:$DYLD_FALLBACK_LIBRARY_PATH}"
fi

exec "$BINARY" "$@"
