@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.
- package/README.md +399 -0
- package/android/NGTCP2_BUILD_INSTRUCTIONS.md +319 -0
- package/android/build-nghttp3.sh +182 -0
- package/android/build-ngtcp2.sh +289 -0
- package/android/build-openssl.sh +302 -0
- package/android/build.gradle +75 -0
- package/android/gradle.properties +3 -0
- package/android/proguard-rules.pro +2 -0
- package/android/settings.gradle +1 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/assets/mqttquic_ca.pem +5 -0
- package/android/src/main/cpp/CMakeLists.txt +157 -0
- package/android/src/main/cpp/ngtcp2_jni.cpp +928 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/MqttQuicPlugin.kt +232 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/client/MQTTClient.kt +339 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTT5Properties.kt +250 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTT5Protocol.kt +281 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTT5ReasonCodes.kt +109 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTTProtocol.kt +249 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/mqtt/MQTTTypes.kt +47 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/quic/NGTCP2Client.kt +184 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/quic/QuicClientStub.kt +54 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/quic/QuicTypes.kt +21 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/transport/QUICStreamAdapter.kt +37 -0
- package/android/src/main/kotlin/ai/annadata/mqttquic/transport/StreamTransport.kt +91 -0
- package/android/src/test/kotlin/ai/annadata/mqttquic/mqtt/MQTTProtocolTest.kt +92 -0
- package/dist/esm/definitions.d.ts +66 -0
- package/dist/esm/definitions.d.ts.map +1 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +28 -0
- package/dist/esm/web.d.ts.map +1 -0
- package/dist/esm/web.js +183 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +217 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +215 -0
- package/dist/plugin.js.map +1 -0
- package/ios/MqttQuicPlugin.podspec +34 -0
- package/ios/NGTCP2_BUILD_INSTRUCTIONS.md +302 -0
- package/ios/Sources/MqttQuicPlugin/Client/MQTTClient.swift +343 -0
- package/ios/Sources/MqttQuicPlugin/MQTT/MQTT5Properties.swift +280 -0
- package/ios/Sources/MqttQuicPlugin/MQTT/MQTT5Protocol.swift +333 -0
- package/ios/Sources/MqttQuicPlugin/MQTT/MQTT5ReasonCodes.swift +113 -0
- package/ios/Sources/MqttQuicPlugin/MQTT/MQTTProtocol.swift +322 -0
- package/ios/Sources/MqttQuicPlugin/MQTT/MQTTTypes.swift +54 -0
- package/ios/Sources/MqttQuicPlugin/MqttQuicPlugin.swift +229 -0
- package/ios/Sources/MqttQuicPlugin/QUIC/NGTCP2Bridge.h +29 -0
- package/ios/Sources/MqttQuicPlugin/QUIC/NGTCP2Bridge.mm +865 -0
- package/ios/Sources/MqttQuicPlugin/QUIC/NGTCP2Client.swift +262 -0
- package/ios/Sources/MqttQuicPlugin/QUIC/QuicClientStub.swift +66 -0
- package/ios/Sources/MqttQuicPlugin/QUIC/QuicTypes.swift +23 -0
- package/ios/Sources/MqttQuicPlugin/Resources/mqttquic_ca.pem +5 -0
- package/ios/Sources/MqttQuicPlugin/Transport/QUICStreamAdapter.swift +50 -0
- package/ios/Sources/MqttQuicPlugin/Transport/StreamTransport.swift +105 -0
- package/ios/Tests/MQTTProtocolTests.swift +82 -0
- package/ios/build-nghttp3.sh +173 -0
- package/ios/build-ngtcp2.sh +278 -0
- package/ios/build-openssl.sh +405 -0
- 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"
|