# Pervius Apple Build System
#
# iOS Targets:
#   make ios              - Full pipeline: Rust → Xcode → build iOS for simulator
#   make ios-device       - Full pipeline: Rust → Xcode → build iOS for device
#
# macOS Targets:
#   make macos            - Full pipeline: Rust → Xcode → build macOS
#
# Rust Only:
#   make build-rust-ios   - Cross-compile Rust for iOS (device + simulator)
#   make build-rust-macos - Compile Rust for macOS (native arch)
#   make build-rust-all   - Compile Rust for all Apple platforms
#
# Other:
#   make generate-xcode   - Generate Xcode project via xcodegen
#   make test-rust        - Run Rust FFI unit tests
#   make clean            - Clean build artifacts

SHELL := /bin/bash
.PHONY: all ios ios-device macos build-rust-ios build-rust-macos build-rust-all \
        generate-xcode clean test-rust

PROJECT_ROOT := $(shell dirname $(CURDIR))
XCODE_PROJECT := Pervius.xcodeproj

all: ios

# ── Rust cross-compilation ──────────────────────────────────────────────

build-rust-ios:
	@bash build-rust.sh ios

build-rust-ios-sim:
	@bash build-rust.sh ios-sim

build-rust-ios-device:
	@bash build-rust.sh ios-device

build-rust-macos:
	@bash build-rust.sh macos

build-rust-all:
	@bash build-rust.sh all

# ── Xcode project generation ───────────────────────────────────────────

generate-xcode:
	@command -v xcodegen >/dev/null 2>&1 || { echo "Error: xcodegen not found. Install with: brew install xcodegen"; exit 1; }
	xcodegen generate

# ── iOS builds ──────────────────────────────────────────────────────────

ios: build-rust-ios-sim generate-xcode
	@echo "Building Pervius for iOS Simulator..."
	xcodebuild build \
		-project $(XCODE_PROJECT) \
		-scheme Pervius-iOS \
		-destination 'platform=iOS Simulator,name=iPhone 16,OS=latest' \
		-configuration Debug \
		CODE_SIGNING_ALLOWED=NO \
		| xcpretty || xcodebuild build \
			-project $(XCODE_PROJECT) \
			-scheme Pervius-iOS \
			-destination 'platform=iOS Simulator,name=iPhone 16,OS=latest' \
			-configuration Debug \
			CODE_SIGNING_ALLOWED=NO

ios-device: build-rust-ios-device generate-xcode
	@echo "Building Pervius for iOS Device..."
	xcodebuild build \
		-project $(XCODE_PROJECT) \
		-scheme Pervius-iOS \
		-destination 'generic/platform=iOS' \
		-configuration Release \
		| xcpretty || xcodebuild build \
			-project $(XCODE_PROJECT) \
			-scheme Pervius-iOS \
			-destination 'generic/platform=iOS' \
			-configuration Release

# ── macOS builds ────────────────────────────────────────────────────────

macos: build-rust-macos generate-xcode
	@echo "Building Pervius for macOS..."
	xcodebuild build \
		-project $(XCODE_PROJECT) \
		-scheme Pervius-macOS \
		-configuration Debug \
		CODE_SIGNING_ALLOWED=NO \
		| xcpretty || xcodebuild build \
			-project $(XCODE_PROJECT) \
			-scheme Pervius-macOS \
			-configuration Debug \
			CODE_SIGNING_ALLOWED=NO

# ── Rust tests ──────────────────────────────────────────────────────────

test-rust:
	@echo "Running Rust FFI tests..."
	cd $(PROJECT_ROOT) && cargo test --features apple-ffi

# ── Clean ───────────────────────────────────────────────────────────────

clean:
	rm -rf $(XCODE_PROJECT)
	rm -rf build/
	cd $(PROJECT_ROOT) && cargo clean
