@annadata/capacitor-mqtt-quic 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +399 -0
  2. package/android/NGTCP2_BUILD_INSTRUCTIONS.md +319 -0
  3. package/android/build-nghttp3.sh +182 -0
  4. package/android/build-ngtcp2.sh +289 -0
  5. package/android/build-openssl.sh +302 -0
  6. package/android/build.gradle +75 -0
  7. package/android/gradle.properties +3 -0
  8. package/android/proguard-rules.pro +2 -0
  9. package/android/settings.gradle +1 -0
  10. package/android/src/main/AndroidManifest.xml +1 -0
  11. package/android/src/main/assets/mqttquic_ca.pem +5 -0
  12. package/android/src/main/cpp/CMakeLists.txt +157 -0
  13. package/android/src/main/cpp/ngtcp2_jni.cpp +928 -0
  14. package/android/src/main/kotlin/ai/annadata/mqttquic/MqttQuicPlugin.kt +232 -0
  15. package/android/src/main/kotlin/ai/annadata/mqttquic/client/MQTTClient.kt +339 -0
  16. package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTT5Properties.kt +250 -0
  17. package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTT5Protocol.kt +281 -0
  18. package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTT5ReasonCodes.kt +109 -0
  19. package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTTProtocol.kt +249 -0
  20. package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTTTypes.kt +47 -0
  21. package/android/src/main/kotlin/ai/annadata/mqttquic/quic/NGTCP2Client.kt +184 -0
  22. package/android/src/main/kotlin/ai/annadata/mqttquic/quic/QuicClientStub.kt +54 -0
  23. package/android/src/main/kotlin/ai/annadata/mqttquic/quic/QuicTypes.kt +21 -0
  24. package/android/src/main/kotlin/ai/annadata/mqttquic/transport/QUICStreamAdapter.kt +37 -0
  25. package/android/src/main/kotlin/ai/annadata/mqttquic/transport/StreamTransport.kt +91 -0
  26. package/android/src/test/kotlin/ai/annadata/mqttquic/mqtt/MQTTProtocolTest.kt +92 -0
  27. package/dist/esm/definitions.d.ts +66 -0
  28. package/dist/esm/definitions.d.ts.map +1 -0
  29. package/dist/esm/definitions.js +2 -0
  30. package/dist/esm/definitions.js.map +1 -0
  31. package/dist/esm/index.d.ts +5 -0
  32. package/dist/esm/index.d.ts.map +1 -0
  33. package/dist/esm/index.js +7 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/esm/web.d.ts +28 -0
  36. package/dist/esm/web.d.ts.map +1 -0
  37. package/dist/esm/web.js +183 -0
  38. package/dist/esm/web.js.map +1 -0
  39. package/dist/plugin.cjs.js +217 -0
  40. package/dist/plugin.cjs.js.map +1 -0
  41. package/dist/plugin.js +215 -0
  42. package/dist/plugin.js.map +1 -0
  43. package/ios/MqttQuicPlugin.podspec +34 -0
  44. package/ios/NGTCP2_BUILD_INSTRUCTIONS.md +302 -0
  45. package/ios/Sources/MqttQuicPlugin/Client/MQTTClient.swift +343 -0
  46. package/ios/Sources/MqttQuicPlugin/MQTT/MQTT5Properties.swift +280 -0
  47. package/ios/Sources/MqttQuicPlugin/MQTT/MQTT5Protocol.swift +333 -0
  48. package/ios/Sources/MqttQuicPlugin/MQTT/MQTT5ReasonCodes.swift +113 -0
  49. package/ios/Sources/MqttQuicPlugin/MQTT/MQTTProtocol.swift +322 -0
  50. package/ios/Sources/MqttQuicPlugin/MQTT/MQTTTypes.swift +54 -0
  51. package/ios/Sources/MqttQuicPlugin/MqttQuicPlugin.swift +229 -0
  52. package/ios/Sources/MqttQuicPlugin/QUIC/NGTCP2Bridge.h +29 -0
  53. package/ios/Sources/MqttQuicPlugin/QUIC/NGTCP2Bridge.mm +865 -0
  54. package/ios/Sources/MqttQuicPlugin/QUIC/NGTCP2Client.swift +262 -0
  55. package/ios/Sources/MqttQuicPlugin/QUIC/QuicClientStub.swift +66 -0
  56. package/ios/Sources/MqttQuicPlugin/QUIC/QuicTypes.swift +23 -0
  57. package/ios/Sources/MqttQuicPlugin/Resources/mqttquic_ca.pem +5 -0
  58. package/ios/Sources/MqttQuicPlugin/Transport/QUICStreamAdapter.swift +50 -0
  59. package/ios/Sources/MqttQuicPlugin/Transport/StreamTransport.swift +105 -0
  60. package/ios/Tests/MQTTProtocolTests.swift +82 -0
  61. package/ios/build-nghttp3.sh +173 -0
  62. package/ios/build-ngtcp2.sh +278 -0
  63. package/ios/build-openssl.sh +405 -0
  64. package/package.json +63 -0
@@ -0,0 +1,173 @@
1
+ #!/bin/bash
2
+ #
3
+ # Build script for nghttp3 on iOS
4
+ #
5
+ # This script builds nghttp3 as a static library for iOS.
6
+ # It requires:
7
+ # - Xcode 14+ (for iOS 15+)
8
+ # - CMake 3.20+
9
+ # - iOS SDK 15.0+
10
+ #
11
+ # Usage:
12
+ # ./build-nghttp3.sh [--arch ARCH] [--sdk SDK]
13
+ #
14
+ # Example:
15
+ # ./build-nghttp3.sh --arch arm64 --sdk iphoneos
16
+ #
17
+
18
+ set -e
19
+
20
+ # Default values
21
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
22
+ if [ -z "$PROJECT_DIR" ] && [ -f "$SCRIPT_DIR/../package.json" ]; then
23
+ PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
24
+ fi
25
+ if [ -n "$PROJECT_DIR" ]; then
26
+ REF_CODE_DIR="$(cd "$PROJECT_DIR/ref-code" && pwd)"
27
+ else
28
+ if [ -d "$SCRIPT_DIR/../ref-code" ]; then
29
+ REF_CODE_DIR="$(cd "$SCRIPT_DIR/../ref-code" && pwd)"
30
+ else
31
+ REF_CODE_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
32
+ fi
33
+ fi
34
+ NGHTTP3_SOURCE_DIR="${NGHTTP3_SOURCE_DIR:-$REF_CODE_DIR/nghttp3}"
35
+ if [[ "$NGHTTP3_SOURCE_DIR" != /* ]]; then
36
+ NGHTTP3_SOURCE_DIR="$REF_CODE_DIR/$NGHTTP3_SOURCE_DIR"
37
+ fi
38
+ ARCH="${ARCH:-arm64}"
39
+ SDK="${SDK:-iphoneos}"
40
+ BUILD_TYPE="${BUILD_TYPE:-Release}"
41
+ IOS_DEPLOYMENT_TARGET="${IOS_DEPLOYMENT_TARGET:-15.0}"
42
+
43
+ # Parse arguments
44
+ while [[ $# -gt 0 ]]; do
45
+ case $1 in
46
+ --arch)
47
+ ARCH="$2"
48
+ shift 2
49
+ ;;
50
+ --sdk)
51
+ SDK="$2"
52
+ shift 2
53
+ ;;
54
+ --build-type)
55
+ BUILD_TYPE="$2"
56
+ shift 2
57
+ ;;
58
+ --ios-deployment-target)
59
+ IOS_DEPLOYMENT_TARGET="$2"
60
+ shift 2
61
+ ;;
62
+ *)
63
+ echo "Unknown option: $1"
64
+ echo "Usage: $0 [--arch ARCH] [--sdk SDK]"
65
+ exit 1
66
+ ;;
67
+ esac
68
+ done
69
+
70
+ # Check prerequisites
71
+ if ! command -v cmake &> /dev/null; then
72
+ echo "Error: CMake is not installed. Please install CMake 3.20+"
73
+ exit 1
74
+ fi
75
+
76
+ if ! command -v xcrun &> /dev/null; then
77
+ echo "Error: Xcode command line tools are not installed"
78
+ exit 1
79
+ fi
80
+
81
+ # Get iOS SDK path
82
+ IOS_SDK_PATH=$(xcrun --sdk "$SDK" --show-sdk-path)
83
+ if [ -z "$IOS_SDK_PATH" ]; then
84
+ echo "Error: Could not find iOS SDK for $SDK"
85
+ exit 1
86
+ fi
87
+
88
+ echo "Building nghttp3 for iOS"
89
+ echo " Architecture: $ARCH"
90
+ echo " SDK: $SDK"
91
+ echo " SDK Path: $IOS_SDK_PATH"
92
+ echo " Build Type: $BUILD_TYPE"
93
+ echo " Deployment Target: iOS $IOS_DEPLOYMENT_TARGET"
94
+
95
+ # Check if nghttp3 source exists
96
+ if [ ! -d "$NGHTTP3_SOURCE_DIR" ]; then
97
+ echo "Error: nghttp3 source directory not found: $NGHTTP3_SOURCE_DIR"
98
+ echo "Please set NGHTTP3_SOURCE_DIR environment variable or clone nghttp3:"
99
+ echo " git clone --recurse-submodules https://github.com/ngtcp2/nghttp3.git $NGHTTP3_SOURCE_DIR"
100
+ exit 1
101
+ fi
102
+
103
+ # Ensure required submodules are present (sfparse, munit)
104
+ if [ ! -f "$NGHTTP3_SOURCE_DIR/sfparse/sfparse.c" ] || [ ! -f "$NGHTTP3_SOURCE_DIR/munit/munit.c" ]; then
105
+ if [ -d "$NGHTTP3_SOURCE_DIR/.git" ]; then
106
+ echo "Initializing nghttp3 submodules..."
107
+ (cd "$NGHTTP3_SOURCE_DIR" && git submodule update --init --recursive) || {
108
+ echo "Error: Failed to initialize nghttp3 submodules"
109
+ exit 1
110
+ }
111
+ else
112
+ echo "Error: nghttp3 submodules are missing (sfparse/munit)"
113
+ echo "Please clone with submodules:"
114
+ echo " git clone --recurse-submodules https://github.com/ngtcp2/nghttp3.git $NGHTTP3_SOURCE_DIR"
115
+ echo "Or if already cloned:"
116
+ echo " cd $NGHTTP3_SOURCE_DIR && git submodule update --init --recursive"
117
+ exit 1
118
+ fi
119
+ fi
120
+
121
+ # Create build directory
122
+ BUILD_DIR="build/nghttp3-ios-$ARCH"
123
+ mkdir -p "$BUILD_DIR"
124
+
125
+ # Clean build dir if CMake cache points to a different source tree
126
+ if [ -f "$BUILD_DIR/CMakeCache.txt" ]; then
127
+ CMAKE_HOME_DIR=$(grep "^CMAKE_HOME_DIRECTORY:INTERNAL=" "$BUILD_DIR/CMakeCache.txt" | cut -d= -f2-)
128
+ if [ -n "$CMAKE_HOME_DIR" ] && [ "$CMAKE_HOME_DIR" != "$NGHTTP3_SOURCE_DIR" ]; then
129
+ echo "CMake cache source mismatch. Cleaning $BUILD_DIR"
130
+ rm -rf "$BUILD_DIR"
131
+ mkdir -p "$BUILD_DIR"
132
+ fi
133
+ fi
134
+
135
+ cd "$BUILD_DIR"
136
+
137
+ # Configure CMake
138
+ CMAKE_ARGS=(
139
+ -DCMAKE_SYSTEM_NAME=iOS
140
+ -DCMAKE_OSX_DEPLOYMENT_TARGET="$IOS_DEPLOYMENT_TARGET"
141
+ -DCMAKE_OSX_ARCHITECTURES="$ARCH"
142
+ -DCMAKE_OSX_SYSROOT="$IOS_SDK_PATH"
143
+ -DCMAKE_BUILD_TYPE="$BUILD_TYPE"
144
+ -DENABLE_LIB_ONLY=ON
145
+ -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
146
+ )
147
+
148
+ echo ""
149
+ echo "Configuring CMake..."
150
+ cmake "$NGHTTP3_SOURCE_DIR" "${CMAKE_ARGS[@]}"
151
+
152
+ echo ""
153
+ echo "Building nghttp3..."
154
+ cmake --build . --config "$BUILD_TYPE" -j$(sysctl -n hw.ncpu)
155
+
156
+ echo ""
157
+ echo "Installing..."
158
+ cmake --install .
159
+
160
+ echo ""
161
+ echo "Syncing artifacts to ios/libs and ios/include..."
162
+ LIBS_DIR="$SCRIPT_DIR/libs"
163
+ INCLUDE_DIR="$SCRIPT_DIR/include"
164
+ mkdir -p "$LIBS_DIR" "$INCLUDE_DIR"
165
+ cp "$(pwd)/install/lib/libnghttp3.a" "$LIBS_DIR/"
166
+ if [ -d "$(pwd)/install/include/nghttp3" ]; then
167
+ cp -R "$(pwd)/install/include/nghttp3" "$INCLUDE_DIR/"
168
+ fi
169
+
170
+ echo ""
171
+ echo "Build complete!"
172
+ echo "Static library: $(pwd)/install/lib/libnghttp3.a"
173
+ echo "Headers: $(pwd)/install/include"
@@ -0,0 +1,278 @@
1
+ #!/bin/bash
2
+ #
3
+ # Build script for ngtcp2 on iOS
4
+ #
5
+ # This script builds ngtcp2 as a static library for iOS.
6
+ # It requires:
7
+ # - Xcode 14+ (for iOS 15+)
8
+ # - CMake 3.20+
9
+ # - iOS SDK 15.0+
10
+ # - OpenSSL 3.0+ (built for iOS)
11
+ #
12
+ # Usage:
13
+ # ./build-ngtcp2.sh [--openssl-path PATH] [--arch ARCH] [--sdk SDK]
14
+ #
15
+ # Example:
16
+ # ./build-ngtcp2.sh --openssl-path /path/to/openssl-ios --arch arm64 --sdk iphoneos
17
+ #
18
+
19
+ set -e
20
+
21
+ # Default values
22
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
23
+ if [ -z "$PROJECT_DIR" ] && [ -f "$SCRIPT_DIR/../package.json" ]; then
24
+ PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
25
+ fi
26
+ if [ -n "$PROJECT_DIR" ]; then
27
+ REF_CODE_DIR="$(cd "$PROJECT_DIR/ref-code" && pwd)"
28
+ else
29
+ if [ -d "$SCRIPT_DIR/../ref-code" ]; then
30
+ REF_CODE_DIR="$(cd "$SCRIPT_DIR/../ref-code" && pwd)"
31
+ else
32
+ REF_CODE_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
33
+ fi
34
+ fi
35
+ NGTCP2_SOURCE_DIR="${NGTCP2_SOURCE_DIR:-$REF_CODE_DIR/ngtcp2}"
36
+ if [[ "$NGTCP2_SOURCE_DIR" != /* ]]; then
37
+ NGTCP2_SOURCE_DIR="$REF_CODE_DIR/$NGTCP2_SOURCE_DIR"
38
+ fi
39
+ OPENSSL_PATH="${OPENSSL_PATH:-}"
40
+ USE_QUICTLS="${USE_QUICTLS:-0}"
41
+ ARCH="${ARCH:-arm64}"
42
+ SDK="${SDK:-iphoneos}"
43
+ BUILD_TYPE="${BUILD_TYPE:-Release}"
44
+ IOS_DEPLOYMENT_TARGET="${IOS_DEPLOYMENT_TARGET:-15.0}"
45
+
46
+ # Parse arguments
47
+ while [[ $# -gt 0 ]]; do
48
+ case $1 in
49
+ --openssl-path)
50
+ OPENSSL_PATH="$2"
51
+ shift 2
52
+ ;;
53
+ --quictls)
54
+ USE_QUICTLS=1
55
+ shift
56
+ ;;
57
+ --arch)
58
+ ARCH="$2"
59
+ shift 2
60
+ ;;
61
+ --sdk)
62
+ SDK="$2"
63
+ shift 2
64
+ ;;
65
+ --build-type)
66
+ BUILD_TYPE="$2"
67
+ shift 2
68
+ ;;
69
+ --ios-deployment-target)
70
+ IOS_DEPLOYMENT_TARGET="$2"
71
+ shift 2
72
+ ;;
73
+ *)
74
+ echo "Unknown option: $1"
75
+ echo "Usage: $0 [--openssl-path PATH] [--arch ARCH] [--sdk SDK] [--quictls]"
76
+ exit 1
77
+ ;;
78
+ esac
79
+ done
80
+
81
+ # Check prerequisites
82
+ if ! command -v cmake &> /dev/null; then
83
+ echo "Error: CMake is not installed. Please install CMake 3.20+"
84
+ exit 1
85
+ fi
86
+
87
+ if ! command -v xcrun &> /dev/null; then
88
+ echo "Error: Xcode command line tools are not installed"
89
+ exit 1
90
+ fi
91
+
92
+ # Get iOS SDK path
93
+ IOS_SDK_PATH=$(xcrun --sdk "$SDK" --show-sdk-path)
94
+ if [ -z "$IOS_SDK_PATH" ]; then
95
+ echo "Error: Could not find iOS SDK for $SDK"
96
+ exit 1
97
+ fi
98
+
99
+ echo "Building ngtcp2 for iOS"
100
+ echo " Architecture: $ARCH"
101
+ echo " SDK: $SDK"
102
+ echo " SDK Path: $IOS_SDK_PATH"
103
+ echo " Build Type: $BUILD_TYPE"
104
+ echo " Deployment Target: iOS $IOS_DEPLOYMENT_TARGET"
105
+
106
+ # Check if ngtcp2 source exists
107
+ if [ ! -d "$NGTCP2_SOURCE_DIR" ]; then
108
+ echo "Error: ngtcp2 source directory not found: $NGTCP2_SOURCE_DIR"
109
+ echo "Please set NGTCP2_SOURCE_DIR environment variable or clone ngtcp2:"
110
+ echo " git clone https://github.com/ngtcp2/ngtcp2.git $NGTCP2_SOURCE_DIR"
111
+ exit 1
112
+ fi
113
+
114
+ # Ensure required submodules are present (munit)
115
+ if [ ! -f "$NGTCP2_SOURCE_DIR/munit/munit.c" ]; then
116
+ if [ -d "$NGTCP2_SOURCE_DIR/.git" ]; then
117
+ echo "Initializing ngtcp2 submodules..."
118
+ (cd "$NGTCP2_SOURCE_DIR" && git submodule update --init --recursive) || {
119
+ echo "Error: Failed to initialize ngtcp2 submodules"
120
+ exit 1
121
+ }
122
+ else
123
+ echo "Warning: ngtcp2 submodules are missing (munit)"
124
+ echo "Tests will be disabled, but if configuration still fails, clone with submodules:"
125
+ echo " git clone --recurse-submodules https://github.com/ngtcp2/ngtcp2.git $NGTCP2_SOURCE_DIR"
126
+ fi
127
+ fi
128
+
129
+ # Check OpenSSL
130
+ if [ -z "$OPENSSL_PATH" ]; then
131
+ if [ -d "$SCRIPT_DIR/install/openssl-ios" ]; then
132
+ OPENSSL_PATH="$SCRIPT_DIR/install/openssl-ios"
133
+ else
134
+ echo "Warning: OpenSSL path not specified. ngtcp2 will be built without TLS support."
135
+ echo "To build with OpenSSL, use: --openssl-path /path/to/openssl-ios"
136
+ echo ""
137
+ echo "You can build OpenSSL for iOS using:"
138
+ echo " git clone https://github.com/openssl/openssl.git"
139
+ echo " cd openssl"
140
+ echo " ./Configure ios64-cross --prefix=/tmp/openssl-ios no-shared no-tests"
141
+ echo " make -j\$(sysctl -n hw.ncpu)"
142
+ echo " make install"
143
+ exit 1
144
+ fi
145
+ fi
146
+
147
+ # Verify OpenSSL installation
148
+ if [[ "$OPENSSL_PATH" != /* ]]; then
149
+ if [ -d "$SCRIPT_DIR/$OPENSSL_PATH" ]; then
150
+ OPENSSL_PATH="$SCRIPT_DIR/$OPENSSL_PATH"
151
+ elif [ -d "$REF_CODE_DIR/$OPENSSL_PATH" ]; then
152
+ OPENSSL_PATH="$REF_CODE_DIR/$OPENSSL_PATH"
153
+ fi
154
+ fi
155
+
156
+ if [ ! -d "$OPENSSL_PATH" ]; then
157
+ echo "Error: OpenSSL path does not exist: $OPENSSL_PATH"
158
+ exit 1
159
+ fi
160
+
161
+ # Check for required OpenSSL files
162
+ OPENSSL_LIB_DIR="$OPENSSL_PATH/lib"
163
+ OPENSSL_INCLUDE_DIR="$OPENSSL_PATH/include"
164
+ OPENSSL_CRYPTO_LIB="$OPENSSL_LIB_DIR/libcrypto.a"
165
+ OPENSSL_SSL_LIB="$OPENSSL_LIB_DIR/libssl.a"
166
+
167
+ if [ ! -f "$OPENSSL_CRYPTO_LIB" ]; then
168
+ echo "Error: OpenSSL crypto library not found: $OPENSSL_CRYPTO_LIB"
169
+ echo "Please ensure OpenSSL is built and installed correctly"
170
+ exit 1
171
+ fi
172
+
173
+ if [ ! -f "$OPENSSL_SSL_LIB" ]; then
174
+ echo "Error: OpenSSL SSL library not found: $OPENSSL_SSL_LIB"
175
+ echo "Please ensure OpenSSL is built and installed correctly"
176
+ exit 1
177
+ fi
178
+
179
+ if [ ! -d "$OPENSSL_INCLUDE_DIR" ]; then
180
+ echo "Error: OpenSSL include directory not found: $OPENSSL_INCLUDE_DIR"
181
+ echo "Please ensure OpenSSL is built and installed correctly"
182
+ exit 1
183
+ fi
184
+
185
+ if [ "$USE_QUICTLS" = "1" ]; then
186
+ if ! grep -q "SSL_provide_quic_data" "$OPENSSL_INCLUDE_DIR/openssl/ssl.h" 2>/dev/null; then
187
+ echo "Error: OpenSSL headers at $OPENSSL_INCLUDE_DIR do not include QUIC APIs."
188
+ echo "Rebuild OpenSSL with --quictls and ensure OPENSSL_SOURCE_DIR points to quictls."
189
+ exit 1
190
+ fi
191
+ fi
192
+
193
+ echo " OpenSSL Path: $OPENSSL_PATH"
194
+ echo " OpenSSL Libraries: $OPENSSL_LIB_DIR"
195
+ echo " OpenSSL Headers: $OPENSSL_INCLUDE_DIR"
196
+
197
+ # Create build directory
198
+ BUILD_DIR="build/ios-$ARCH"
199
+ mkdir -p "$BUILD_DIR"
200
+
201
+ # Clean build dir if CMake cache points to a different source tree
202
+ if [ -f "$BUILD_DIR/CMakeCache.txt" ]; then
203
+ CMAKE_HOME_DIR=$(grep "^CMAKE_HOME_DIRECTORY:INTERNAL=" "$BUILD_DIR/CMakeCache.txt" | cut -d= -f2-)
204
+ if [ -n "$CMAKE_HOME_DIR" ] && [ "$CMAKE_HOME_DIR" != "$NGTCP2_SOURCE_DIR" ]; then
205
+ echo "CMake cache source mismatch. Cleaning $BUILD_DIR"
206
+ rm -rf "$BUILD_DIR"
207
+ mkdir -p "$BUILD_DIR"
208
+ fi
209
+ fi
210
+
211
+ cd "$BUILD_DIR"
212
+
213
+ # Configure CMake
214
+ CMAKE_ARGS=(
215
+ -DCMAKE_SYSTEM_NAME=iOS
216
+ -DCMAKE_OSX_DEPLOYMENT_TARGET="$IOS_DEPLOYMENT_TARGET"
217
+ -DCMAKE_OSX_ARCHITECTURES="$ARCH"
218
+ -DCMAKE_OSX_SYSROOT="$IOS_SDK_PATH"
219
+ -DCMAKE_BUILD_TYPE="$BUILD_TYPE"
220
+ -DENABLE_LIB_ONLY=ON
221
+ -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
222
+ -DENABLE_TESTS=OFF
223
+ -DENABLE_EXAMPLES=OFF
224
+ )
225
+
226
+ if [ -n "$OPENSSL_PATH" ]; then
227
+ # CMake's FindOpenSSL needs explicit paths
228
+ CMAKE_ARGS+=(
229
+ -DENABLE_OPENSSL=ON
230
+ -DOPENSSL_ROOT_DIR="$OPENSSL_PATH"
231
+ -DOPENSSL_CRYPTO_LIBRARY="$OPENSSL_CRYPTO_LIB"
232
+ -DOPENSSL_SSL_LIBRARY="$OPENSSL_SSL_LIB"
233
+ -DOPENSSL_INCLUDE_DIR="$OPENSSL_INCLUDE_DIR"
234
+ -DOPENSSL_LIBRARIES="$OPENSSL_SSL_LIB;$OPENSSL_CRYPTO_LIB"
235
+ )
236
+
237
+ if [ "$USE_QUICTLS" = "1" ]; then
238
+ CMAKE_ARGS+=(
239
+ -DENABLE_QUICTLS=ON
240
+ )
241
+ fi
242
+ else
243
+ CMAKE_ARGS+=(
244
+ -DENABLE_OPENSSL=OFF
245
+ )
246
+ fi
247
+
248
+ echo ""
249
+ echo "Configuring CMake..."
250
+ cmake "$NGTCP2_SOURCE_DIR" "${CMAKE_ARGS[@]}"
251
+
252
+ echo ""
253
+ echo "Building ngtcp2..."
254
+ cmake --build . --config "$BUILD_TYPE" -j$(sysctl -n hw.ncpu)
255
+
256
+ echo ""
257
+ echo "Installing..."
258
+ cmake --install .
259
+
260
+ echo ""
261
+ echo "Syncing artifacts to ios/libs and ios/include..."
262
+ LIBS_DIR="$SCRIPT_DIR/libs"
263
+ INCLUDE_DIR="$SCRIPT_DIR/include"
264
+ mkdir -p "$LIBS_DIR" "$INCLUDE_DIR"
265
+ cp "$(pwd)/install/lib/libngtcp2.a" "$LIBS_DIR/"
266
+ for crypto_lib in "$(pwd)/install/lib"/libngtcp2_crypto_*.a; do
267
+ if [ -f "$crypto_lib" ]; then
268
+ cp "$crypto_lib" "$LIBS_DIR/"
269
+ fi
270
+ done
271
+ if [ -d "$(pwd)/install/include/ngtcp2" ]; then
272
+ cp -R "$(pwd)/install/include/ngtcp2" "$INCLUDE_DIR/"
273
+ fi
274
+
275
+ echo ""
276
+ echo "Build complete!"
277
+ echo "Static library: $(pwd)/install/lib/libngtcp2.a"
278
+ echo "Headers: $(pwd)/install/include"