main
text 83 lines 4.68 KB
Raw
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)"