forked from go-drift/drift
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
102 lines (92 loc) · 4.61 KB
/
Makefile
File metadata and controls
102 lines (92 loc) · 4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
GO ?= go
ANDROID_SDK_ROOT ?= $(ANDROID_HOME)
ANDROID_NDK_HOME ?= $(ANDROID_NDK_ROOT)
HOST_TAG ?= linux-x86_64
.PHONY: all cli skia-release clean bridge-ios bridge-ios-sim bridge-android bridge-xtool
# Build the drift CLI tool
cli:
$(GO) build -o bin/drift ./cmd/drift
# Build and package Skia release artifacts
skia-release:
./scripts/build_skia_release.sh
# Clean build artifacts
clean:
rm -rf bin/
# --------------------------------------------------------------------------
# Fast Bridge Iteration Targets
# These rebuild only the bridge code without rebuilding Skia.
# Requires Skia to be already built (libskia.a must exist).
# --------------------------------------------------------------------------
SKIA_DIR := third_party/skia
DRIFT_SKIA_DIR := third_party/drift_skia
BRIDGE_DIR := pkg/skia/bridge
# iOS device bridge rebuild (macOS only)
bridge-ios:
@echo "Rebuilding iOS device bridge..."
@test -f "$(SKIA_DIR)/out/ios/arm64/libskia.a" || (echo "libskia.a not found. Run scripts/build_skia_ios.sh first."; exit 1)
cd $(SKIA_DIR) && xcrun clang++ -arch arm64 \
-isysroot "$$(xcrun --sdk iphoneos --show-sdk-path)" \
-miphoneos-version-min=16.0 \
-std=c++17 -fPIC -DSKIA_METAL \
-I. -I./include \
-c ../../$(BRIDGE_DIR)/skia_metal.mm \
-o out/ios/arm64/skia_bridge.o
cd $(SKIA_DIR) && libtool -static -o out/ios/arm64/libdrift_skia.a \
out/ios/arm64/libskia.a out/ios/arm64/skia_bridge.o
rm -f $(SKIA_DIR)/out/ios/arm64/skia_bridge.o
@mkdir -p $(DRIFT_SKIA_DIR)/ios/arm64
@cp $(SKIA_DIR)/out/ios/arm64/libdrift_skia.a $(DRIFT_SKIA_DIR)/ios/arm64/libdrift_skia.a
@echo "Created $(DRIFT_SKIA_DIR)/ios/arm64/libdrift_skia.a"
# iOS simulator bridge rebuild (macOS only)
bridge-ios-sim:
@echo "Rebuilding iOS simulator bridge (arm64)..."
@test -f "$(SKIA_DIR)/out/ios-simulator/arm64/libskia.a" || (echo "libskia.a not found. Run scripts/build_skia_ios.sh first."; exit 1)
cd $(SKIA_DIR) && xcrun clang++ -arch arm64 \
-isysroot "$$(xcrun --sdk iphonesimulator --show-sdk-path)" \
-mios-simulator-version-min=16.0 \
-std=c++17 -fPIC -DSKIA_METAL \
-I. -I./include \
-c ../../$(BRIDGE_DIR)/skia_metal.mm \
-o out/ios-simulator/arm64/skia_bridge.o
cd $(SKIA_DIR) && libtool -static -o out/ios-simulator/arm64/libdrift_skia.a \
out/ios-simulator/arm64/libskia.a out/ios-simulator/arm64/skia_bridge.o
rm -f $(SKIA_DIR)/out/ios-simulator/arm64/skia_bridge.o
@mkdir -p $(DRIFT_SKIA_DIR)/ios-simulator/arm64
@cp $(SKIA_DIR)/out/ios-simulator/arm64/libdrift_skia.a $(DRIFT_SKIA_DIR)/ios-simulator/arm64/libdrift_skia.a
@echo "Created $(DRIFT_SKIA_DIR)/ios-simulator/arm64/libdrift_skia.a"
# Android bridge rebuild (requires NDK)
bridge-android:
@echo "Rebuilding Android bridge (arm64)..."
@test -n "$(ANDROID_NDK_HOME)" || (echo "ANDROID_NDK_HOME not set"; exit 1)
@test -f "$(SKIA_DIR)/out/android/arm64/libskia.a" || (echo "libskia.a not found. Run scripts/build_skia_android.sh first."; exit 1)
$(eval NDK_CLANG := $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/$(HOST_TAG)/bin/clang++)
cd $(SKIA_DIR) && $(NDK_CLANG) --target=aarch64-linux-android21 \
-std=c++17 -fPIC -DSKIA_GL \
-I. -I./include \
-c ../../$(BRIDGE_DIR)/skia_gl.cc \
-o out/android/arm64/skia_bridge.o
cd $(SKIA_DIR)/out/android/arm64 && mkdir -p tmp && cd tmp && \
ar x ../libskia.a && ar rcs ../libdrift_skia.a *.o ../skia_bridge.o && \
cd .. && rm -rf tmp skia_bridge.o
@mkdir -p $(DRIFT_SKIA_DIR)/android/arm64
@cp $(SKIA_DIR)/out/android/arm64/libdrift_skia.a $(DRIFT_SKIA_DIR)/android/arm64/libdrift_skia.a
@echo "Created $(DRIFT_SKIA_DIR)/android/arm64/libdrift_skia.a"
# xtool bridge rebuild (Linux cross-compile for iOS)
bridge-xtool:
@echo "Rebuilding xtool bridge (iOS arm64)..."
@test -f "$(SKIA_DIR)/out/ios/arm64/libskia.a" || (echo "libskia.a not found. Run scripts/build_skia_ios_xtool.sh first."; exit 1)
$(eval XTOOL_CLANG := $(shell which clang++ 2>/dev/null || echo /opt/swift/usr/bin/clang++))
$(eval XTOOL_SDK := $(shell ls -d ~/.xtool/sdk/iPhoneOS*.sdk 2>/dev/null | head -1))
@test -n "$(XTOOL_SDK)" || (echo "iOS SDK not found in ~/.xtool/sdk/"; exit 1)
cd $(SKIA_DIR) && $(XTOOL_CLANG) -target arm64-apple-ios16.0 \
-isysroot $(XTOOL_SDK) \
-std=c++17 -fPIC -DSKIA_METAL \
-I. -I./include \
-c ../../$(BRIDGE_DIR)/skia_metal.mm \
-o out/ios/arm64/skia_bridge.o
cd $(SKIA_DIR)/out/ios/arm64 && mkdir -p tmp && cd tmp && \
llvm-ar x ../libskia.a && llvm-ar rcs ../libdrift_skia.a *.o ../skia_bridge.o && \
cd .. && rm -rf tmp skia_bridge.o
@mkdir -p $(DRIFT_SKIA_DIR)/ios/arm64
@cp $(SKIA_DIR)/out/ios/arm64/libdrift_skia.a $(DRIFT_SKIA_DIR)/ios/arm64/libdrift_skia.a
@echo "Created $(DRIFT_SKIA_DIR)/ios/arm64/libdrift_skia.a"