-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
157 lines (130 loc) · 4.25 KB
/
Makefile
File metadata and controls
157 lines (130 loc) · 4.25 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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
CRATE := ooniprobe-ffi
UDL := ooniprobe-ffi/src/ooniprobe.udl
ANDROID_MODULE := android/ooniprobe
JNI_DIR := $(ANDROID_MODULE)/src/main/jniLibs
BINDINGS_DIR := $(ANDROID_MODULE)/src/main/java/org/ooni/ooniprobe
NDK_HOME ?= $(ANDROID_NDK_HOME)
ANDROID_TARGETS := \
aarch64-linux-android \
armv7-linux-androideabi \
i686-linux-android \
x86_64-linux-android
XCFRAMEWORK_DIR := ios/ooniProbe.xcframework
SWIFT_DIR := ios/Sources/OoniProbe
IPHONEOS_SDK = $(shell xcrun --sdk iphoneos --show-sdk-path)
IPHONESIMULATOR_SDK = $(shell xcrun --sdk iphonesimulator --show-sdk-path)
MIN_IOS_VERSION := 13.0
IOS_TARGETS := \
aarch64-apple-ios \
aarch64-apple-ios-sim \
x86_64-apple-ios
DESKTOP_DIR := desktop
DESKTOP_RESOURCES := $(DESKTOP_DIR)/src/main/resources
DESKTOP_BINDINGS_DIR := $(DESKTOP_DIR)/src/main/kotlin
.PHONY: clean-android
clean:
cargo clean -p $(CRATE)
rm -rf $(JNI_DIR)
rm -rf $(BINDINGS_DIR)
.PHONY: android-targets
android-targets:
@for t in $(ANDROID_TARGETS); do \
rustup target add $$t; \
done
.PHONY: android-so
android-so: android-targets
ANDROID_NDK_HOME=$(NDK_HOME) cargo ndk \
-t armeabi-v7a \
-t arm64-v8a \
-t x86 \
-t x86_64 \
-o $(JNI_DIR) \
build -p $(CRATE) --release
.PHONY: bindings
bindings:
mkdir -p $(BINDINGS_DIR)
cargo run -p uniffi-bindgen -- \
generate $(UDL) \
--language kotlin \
--out-dir $(BINDINGS_DIR)
.PHONY: aar
aar:
cd android && ./gradlew :ooniprobe:assembleRelease
.PHONY: android
android: android-so bindings aar
.PHONY: ios-targets
ios-targets:
@for t in $(IOS_TARGETS); do \
rustup target add $$t; \
done
.PHONY: ios-libs
ios-libs: ios-targets
SDKROOT=$(IPHONEOS_SDK) \
IPHONEOS_DEPLOYMENT_TARGET=$(MIN_IOS_VERSION) \
cargo build -p $(CRATE) --target aarch64-apple-ios --release
SDKROOT=$(IPHONESIMULATOR_SDK) \
IPHONEOS_DEPLOYMENT_TARGET=$(MIN_IOS_VERSION) \
BINDGEN_EXTRA_CLANG_ARGS="-target arm64-apple-ios$(MIN_IOS_VERSION)-simulator" \
cargo build -p $(CRATE) --target aarch64-apple-ios-sim --release
SDKROOT=$(IPHONESIMULATOR_SDK) \
IPHONEOS_DEPLOYMENT_TARGET=$(MIN_IOS_VERSION) \
BINDGEN_EXTRA_CLANG_ARGS="-target x86_64-apple-ios$(MIN_IOS_VERSION)-simulator" \
cargo build -p $(CRATE) --target x86_64-apple-ios --release
.PHONY: ios-universal-sim
ios-universal-sim: ios-libs
@mkdir -p target/ios-simulator-universal/release
lipo -create \
target/aarch64-apple-ios-sim/release/libuniffi_ooniprobe.a \
target/x86_64-apple-ios/release/libuniffi_ooniprobe.a \
-output target/ios-simulator-universal/release/libuniffi_ooniprobe.a
.PHONY: ios-bindings
ios-bindings:
@mkdir -p $(SWIFT_DIR)
cargo run -p uniffi-bindgen -- \
generate $(UDL) \
--language swift \
--out-dir $(SWIFT_DIR)
.PHONY: ios-xcframework
ios-xcframework: ios-universal-sim ios-bindings
@rm -rf $(XCFRAMEWORK_DIR)
cp $(SWIFT_DIR)/ooniprobeFFI.modulemap $(SWIFT_DIR)/module.modulemap
xcodebuild -create-xcframework \
-library target/aarch64-apple-ios/release/libuniffi_ooniprobe.a -headers $(SWIFT_DIR) \
-library target/ios-simulator-universal/release/libuniffi_ooniprobe.a -headers $(SWIFT_DIR) \
-output $(XCFRAMEWORK_DIR)
.PHONY: ios
ios: ios-xcframework
.PHONY: clean-desktop
clean:
cargo clean -p $(CRATE)
rm -rf $(DESKTOP_RESOURCES)
rm -rf $(DESKTOP_BINDINGS_DIR)
.PHONY: desktop-bindings
desktop-bindings:
@mkdir -p $(DESKTOP_BINDINGS_DIR)
cargo run -p uniffi-bindgen -- \
generate $(UDL) \
--language kotlin \
--out-dir $(DESKTOP_BINDINGS_DIR)
.PHONY: desktop-linux
desktop-linux:
cargo build -p $(CRATE) --release
@mkdir -p $(DESKTOP_RESOURCES)/linux-x86-64
cp target/release/libuniffi_ooniprobe.so $(DESKTOP_RESOURCES)/linux-x86-64/
$(MAKE) desktop-jar OS_NAME=linux
.PHONY: desktop-macos
desktop-macos:
cargo build -p $(CRATE) --release
$(eval ARCH := $(shell uname -m | sed 's/arm64/aarch64/'))
@mkdir -p $(DESKTOP_RESOURCES)/darwin-$(ARCH)
cp target/release/libuniffi_ooniprobe.dylib $(DESKTOP_RESOURCES)/darwin-$(ARCH)/
$(MAKE) desktop-jar OS_NAME=macos
.PHONY: desktop-windows
desktop-windows:
cargo build -p $(CRATE) --release
@mkdir -p $(DESKTOP_RESOURCES)/win32-x86-64
cp target/release/uniffi_ooniprobe.dll $(DESKTOP_RESOURCES)/win32-x86-64/
$(MAKE) desktop-jar OS_NAME=windows
.PHONY: desktop-jar
desktop-jar: desktop-bindings
cd $(DESKTOP_DIR) && ./gradlew jar -PosName=$(OS_NAME)