153 lines
3.9 KiB
Bash
153 lines
3.9 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
print_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
|
print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
|
|
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
|
|
TARGET="release"
|
|
PLATFORM=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-t|--target)
|
|
TARGET="$2"
|
|
shift 2
|
|
;;
|
|
-p|--platform)
|
|
PLATFORM="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
echo "GURT Godot Extension Build Script"
|
|
echo ""
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -t, --target TARGET Build target (debug|release) [default: release]"
|
|
echo " -p, --platform PLATFORM Target platform (windows|linux|macos|current)"
|
|
echo " -h, --help Show this help message"
|
|
echo ""
|
|
exit 0
|
|
;;
|
|
*)
|
|
print_error "Unknown option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ "$TARGET" != "debug" && "$TARGET" != "release" ]]; then
|
|
print_error "Invalid target: $TARGET. Must be 'debug' or 'release'"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$PLATFORM" ]]; then
|
|
case "$(uname -s)" in
|
|
Linux*) PLATFORM="linux";;
|
|
Darwin*) PLATFORM="macos";;
|
|
CYGWIN*|MINGW*|MSYS*) PLATFORM="windows";;
|
|
*) PLATFORM="current";;
|
|
esac
|
|
fi
|
|
|
|
print_info "GURT Godot Extension Build Script"
|
|
print_info "Target: $TARGET"
|
|
print_info "Platform: $PLATFORM"
|
|
|
|
print_info "Checking prerequisites..."
|
|
|
|
if ! command -v cargo >/dev/null 2>&1; then
|
|
print_error "Rust/Cargo not found. Please install Rust: https://rustup.rs/"
|
|
exit 1
|
|
fi
|
|
|
|
print_success "Prerequisites found"
|
|
|
|
case $PLATFORM in
|
|
windows)
|
|
RUST_TARGET="x86_64-pc-windows-msvc"
|
|
LIB_NAME="gurt_godot.dll"
|
|
;;
|
|
linux)
|
|
RUST_TARGET="x86_64-unknown-linux-gnu"
|
|
LIB_NAME="libgurt_godot.so"
|
|
;;
|
|
macos)
|
|
RUST_TARGET="x86_64-apple-darwin"
|
|
LIB_NAME="libgurt_godot.dylib"
|
|
;;
|
|
current)
|
|
RUST_TARGET=""
|
|
case "$(uname -s)" in
|
|
Linux*) LIB_NAME="libgurt_godot.so";;
|
|
Darwin*) LIB_NAME="libgurt_godot.dylib";;
|
|
CYGWIN*|MINGW*|MSYS*) LIB_NAME="gurt_godot.dll";;
|
|
*) print_error "Unsupported platform"; exit 1;;
|
|
esac
|
|
;;
|
|
*)
|
|
print_error "Unknown platform: $PLATFORM"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Create addon directory structure
|
|
ADDON_DIR="addon/gurt-protocol"
|
|
OUTPUT_DIR="$ADDON_DIR/bin/$PLATFORM"
|
|
mkdir -p "$OUTPUT_DIR"
|
|
|
|
BUILD_CMD="cargo build"
|
|
if [[ "$TARGET" == "release" ]]; then
|
|
BUILD_CMD="$BUILD_CMD --release"
|
|
fi
|
|
|
|
if [[ -n "$RUST_TARGET" ]]; then
|
|
print_info "Installing Rust target: $RUST_TARGET"
|
|
rustup target add "$RUST_TARGET"
|
|
BUILD_CMD="$BUILD_CMD --target $RUST_TARGET"
|
|
fi
|
|
|
|
print_info "Building with Cargo..."
|
|
$BUILD_CMD
|
|
|
|
if [[ -n "$RUST_TARGET" ]]; then
|
|
if [[ "$TARGET" == "release" ]]; then
|
|
BUILT_LIB="target/$RUST_TARGET/release/$LIB_NAME"
|
|
else
|
|
BUILT_LIB="target/$RUST_TARGET/debug/$LIB_NAME"
|
|
fi
|
|
else
|
|
if [[ "$TARGET" == "release" ]]; then
|
|
BUILT_LIB="target/release/$LIB_NAME"
|
|
else
|
|
BUILT_LIB="target/debug/$LIB_NAME"
|
|
fi
|
|
fi
|
|
|
|
if [[ -f "$BUILT_LIB" ]]; then
|
|
cp "$BUILT_LIB" "$OUTPUT_DIR/$LIB_NAME"
|
|
|
|
# Copy addon files
|
|
cp gurt_godot.gdextension "$ADDON_DIR/"
|
|
cp plugin.cfg "$ADDON_DIR/"
|
|
cp plugin.gd "$ADDON_DIR/"
|
|
|
|
print_success "Build completed: $OUTPUT_DIR/$LIB_NAME"
|
|
SIZE=$(du -h "$OUTPUT_DIR/$LIB_NAME" | cut -f1)
|
|
print_info "Library size: $SIZE"
|
|
else
|
|
print_error "Built library not found at: $BUILT_LIB"
|
|
exit 1
|
|
fi
|
|
|
|
print_success "Build process completed!"
|
|
print_info "Copy the 'addon/gurt-protocol' folder to your project's 'addons/' directory" |