| 1 | SHELL := /bin/sh |
| 2 | |
| 3 | SWIFT_REPO := $(CURDIR) |
| 4 | ED_REPO ?= $(abspath ../onde-ed) |
| 5 | MANIFEST := $(ED_REPO)/crates/ed-agent-ffi/Cargo.toml |
| 6 | BINDGEN_MANIFEST := $(ED_REPO)/uniffi-bindgen/Cargo.toml |
| 7 | BINDGEN := $(ED_REPO)/target/release/uniffi-bindgen |
| 8 | APPLE_TARGET_DIR := $(ED_REPO)/target/apple |
| 9 | |
| 10 | IOS_DEPLOYMENT_TARGET ?= 16.0 |
| 11 | MACOS_DEPLOYMENT_TARGET ?= 14.0 |
| 12 | TVOS_DEPLOYMENT_TARGET ?= 16.0 |
| 13 | VISIONOS_DEPLOYMENT_TARGET ?= 1.0 |
| 14 | WATCHOS_DEPLOYMENT_TARGET ?= 9.0 |
| 15 | |
| 16 | LOCAL_DIR := $(SWIFT_REPO)/.local |
| 17 | GENERATED_DIR := $(LOCAL_DIR)/generated/Ed |
| 18 | HEADERS_DIR := $(LOCAL_DIR)/Headers |
| 19 | FRAMEWORK_DIR := $(SWIFT_REPO)/EdFramework.xcframework |
| 20 | SWIFT_GLUE := $(SWIFT_REPO)/Sources/Ed/ed_agent_ffi.swift |
| 21 | |
| 22 | .PHONY: help ios macos tvos visionos watchos build-bindgen prepare generate-swift clean |
| 23 | |
| 24 | help: |
| 25 | @printf '%s\n' \ |
| 26 | 'Ed Swift local builds' \ |
| 27 | '' \ |
| 28 | 'make ios | macos | tvos | visionos | watchos' \ |
| 29 | 'Set ED_REPO=/path/to/onde-ed when the repositories are not siblings.' |
| 30 | |
| 31 | validate: |
| 32 | @test -f "$(MANIFEST)" || { echo "Could not find onde-ed at $(ED_REPO)"; exit 1; } |
| 33 | |
| 34 | build-bindgen: validate |
| 35 | cargo build --manifest-path "$(BINDGEN_MANIFEST)" --release |
| 36 | |
| 37 | prepare: |
| 38 | @rm -rf "$(FRAMEWORK_DIR)" "$(GENERATED_DIR)" "$(HEADERS_DIR)" |
| 39 | @mkdir -p "$(GENERATED_DIR)" "$(HEADERS_DIR)" |
| 40 | |
| 41 | generate-swift: |
| 42 | @test -n "$(BINDGEN_INPUT)" || { echo "BINDGEN_INPUT is required"; exit 1; } |
| 43 | cd "$(ED_REPO)" && "$(BINDGEN)" generate "$(BINDGEN_INPUT)" --crate ed_agent_ffi --language swift --out-dir "$(GENERATED_DIR)" |
| 44 | cp "$(GENERATED_DIR)/ed_agent_ffi.swift" "$(SWIFT_GLUE)" |
| 45 | cp "$(GENERATED_DIR)/ed_agent_ffiFFI.h" "$(HEADERS_DIR)/ed_agent_ffiFFI.h" |
| 46 | cp "$(GENERATED_DIR)/ed_agent_ffiFFI.modulemap" "$(HEADERS_DIR)/module.modulemap" |
| 47 | |
| 48 | ios: build-bindgen prepare |
| 49 | IPHONEOS_DEPLOYMENT_TARGET=$(IOS_DEPLOYMENT_TARGET) cargo rustc --target-dir "$(APPLE_TARGET_DIR)" --manifest-path "$(MANIFEST)" --target aarch64-apple-ios --release --lib --crate-type staticlib |
| 50 | IPHONEOS_DEPLOYMENT_TARGET=$(IOS_DEPLOYMENT_TARGET) cargo rustc --target-dir "$(APPLE_TARGET_DIR)" --manifest-path "$(MANIFEST)" --target aarch64-apple-ios-sim --release --lib --crate-type staticlib |
| 51 | $(MAKE) generate-swift BINDGEN_INPUT="$(APPLE_TARGET_DIR)/aarch64-apple-ios/release/libed_agent_ffi.a" |
| 52 | xcodebuild -create-xcframework \ |
| 53 | -library "$(APPLE_TARGET_DIR)/aarch64-apple-ios/release/libed_agent_ffi.a" -headers "$(HEADERS_DIR)" \ |
| 54 | -library "$(APPLE_TARGET_DIR)/aarch64-apple-ios-sim/release/libed_agent_ffi.a" -headers "$(HEADERS_DIR)" \ |
| 55 | -output "$(FRAMEWORK_DIR)" |
| 56 | |
| 57 | macos: build-bindgen prepare |
| 58 | MACOSX_DEPLOYMENT_TARGET=$(MACOS_DEPLOYMENT_TARGET) cargo rustc --target-dir "$(APPLE_TARGET_DIR)" --manifest-path "$(MANIFEST)" --target aarch64-apple-darwin --release --lib --crate-type staticlib |
| 59 | $(MAKE) generate-swift BINDGEN_INPUT="$(APPLE_TARGET_DIR)/aarch64-apple-darwin/release/libed_agent_ffi.a" |
| 60 | xcodebuild -create-xcframework \ |
| 61 | -library "$(APPLE_TARGET_DIR)/aarch64-apple-darwin/release/libed_agent_ffi.a" -headers "$(HEADERS_DIR)" \ |
| 62 | -output "$(FRAMEWORK_DIR)" |
| 63 | |
| 64 | tvos: build-bindgen prepare |
| 65 | TVOS_DEPLOYMENT_TARGET=$(TVOS_DEPLOYMENT_TARGET) cargo +nightly rustc -Z build-std --target-dir "$(APPLE_TARGET_DIR)" --manifest-path "$(MANIFEST)" --target aarch64-apple-tvos --release --lib --crate-type staticlib |
| 66 | TVOS_DEPLOYMENT_TARGET=$(TVOS_DEPLOYMENT_TARGET) cargo +nightly rustc -Z build-std --target-dir "$(APPLE_TARGET_DIR)" --manifest-path "$(MANIFEST)" --target aarch64-apple-tvos-sim --release --lib --crate-type staticlib |
| 67 | $(MAKE) generate-swift BINDGEN_INPUT="$(APPLE_TARGET_DIR)/aarch64-apple-tvos/release/libed_agent_ffi.a" |
| 68 | xcodebuild -create-xcframework \ |
| 69 | -library "$(APPLE_TARGET_DIR)/aarch64-apple-tvos/release/libed_agent_ffi.a" -headers "$(HEADERS_DIR)" \ |
| 70 | -library "$(APPLE_TARGET_DIR)/aarch64-apple-tvos-sim/release/libed_agent_ffi.a" -headers "$(HEADERS_DIR)" \ |
| 71 | -output "$(FRAMEWORK_DIR)" |
| 72 | |
| 73 | visionos: build-bindgen prepare |
| 74 | XROS_DEPLOYMENT_TARGET=$(VISIONOS_DEPLOYMENT_TARGET) cargo +nightly rustc -Z build-std --target-dir "$(APPLE_TARGET_DIR)" --manifest-path "$(MANIFEST)" --target aarch64-apple-visionos --release --lib --crate-type staticlib |
| 75 | XROS_DEPLOYMENT_TARGET=$(VISIONOS_DEPLOYMENT_TARGET) cargo +nightly rustc -Z build-std --target-dir "$(APPLE_TARGET_DIR)" --manifest-path "$(MANIFEST)" --target aarch64-apple-visionos-sim --release --lib --crate-type staticlib |
| 76 | $(MAKE) generate-swift BINDGEN_INPUT="$(APPLE_TARGET_DIR)/aarch64-apple-visionos/release/libed_agent_ffi.a" |
| 77 | xcodebuild -create-xcframework \ |
| 78 | -library "$(APPLE_TARGET_DIR)/aarch64-apple-visionos/release/libed_agent_ffi.a" -headers "$(HEADERS_DIR)" \ |
| 79 | -library "$(APPLE_TARGET_DIR)/aarch64-apple-visionos-sim/release/libed_agent_ffi.a" -headers "$(HEADERS_DIR)" \ |
| 80 | -output "$(FRAMEWORK_DIR)" |
| 81 | |
| 82 | clean: |
| 83 | rm -rf "$(FRAMEWORK_DIR)" "$(LOCAL_DIR)" |