apple-xcframework.sh (25390B)
1 #! /bin/sh 2 3 export PREFIX="$(pwd)/libsodium-apple" 4 export MACOS_ARM64_PREFIX="${PREFIX}/tmp/macos-arm64" 5 export MACOS_ARM64E_PREFIX="${PREFIX}/tmp/macos-arm64e" 6 export MACOS_X86_64_PREFIX="${PREFIX}/tmp/macos-x86_64" 7 export IOS32_PREFIX="${PREFIX}/tmp/ios32" 8 export IOS32s_PREFIX="${PREFIX}/tmp/ios32s" 9 export IOS64_PREFIX="${PREFIX}/tmp/ios64" 10 export IOS64E_PREFIX="${PREFIX}/tmp/ios64e" 11 export IOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/ios-simulator-arm64" 12 export IOS_SIMULATOR_ARM64E_PREFIX="${PREFIX}/tmp/ios-simulator-arm64e" 13 export IOS_SIMULATOR_I386_PREFIX="${PREFIX}/tmp/ios-simulator-i386" 14 export IOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/ios-simulator-x86_64" 15 export WATCHOS32_PREFIX="${PREFIX}/tmp/watchos32" 16 export WATCHOS64_32_PREFIX="${PREFIX}/tmp/watchos64_32" 17 export WATCHOS64_PREFIX="${PREFIX}/tmp/watchos64" 18 export WATCHOS64E_PREFIX="${PREFIX}/tmp/watchos64e" 19 export WATCHOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/watchos-simulator-arm64" 20 export WATCHOS_SIMULATOR_ARM64E_PREFIX="${PREFIX}/tmp/watchos-simulator-arm64e" 21 export WATCHOS_SIMULATOR_I386_PREFIX="${PREFIX}/tmp/watchos-simulator-i386" 22 export WATCHOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/watchos-simulator-x86_64" 23 export TVOS_PREFIX="${PREFIX}/tmp/tvos" 24 export TVOSE_PREFIX="${PREFIX}/tmp/tvose" 25 export TVOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/tvos-simulator-arm64" 26 export TVOS_SIMULATOR_ARM64E_PREFIX="${PREFIX}/tmp/tvos-simulator-arm644" 27 export TVOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/tvos-simulator-x86_64" 28 export VISIONOS_PREFIX="${PREFIX}/tmp/visionos" 29 export VISIONOSE_PREFIX="${PREFIX}/tmp/visionose" 30 export VISIONOS_SIMULATOR_PREFIX="${PREFIX}/tmp/visionos-simulator" 31 export VISIONOSE_SIMULATOR_PREFIX="${PREFIX}/tmp/visionose-simulator" 32 export CATALYST_ARM64_PREFIX="${PREFIX}/tmp/catalyst-arm64" 33 export CATALYST_ARM64E_PREFIX="${PREFIX}/tmp/catalyst-arm64e" 34 export CATALYST_X86_64_PREFIX="${PREFIX}/tmp/catalyst-x86_64" 35 export LOG_FILE="${PREFIX}/tmp/build_log" 36 export XCODEDIR="$(xcode-select -p)" 37 38 export MACOS_VERSION_MIN=${MACOS_VERSION_MIN-"10.10"} 39 export IOS_VERSION_MIN=${IOS_VERSION_MIN-"9.0.0"} 40 export IOS_SIMULATOR_VERSION_MIN=${IOS_SIMULATOR_VERSION_MIN-$IOS_VERSION_MIN} 41 export WATCHOS_VERSION_MIN=${WATCHOS_VERSION_MIN-"4.0.0"} 42 export WATCHOS_SIMULATOR_VERSION_MIN=${WATCHOS_SIMULATOR_VERSION_MIN-$WATCHOS_VERSION_MIN} 43 export TVOS_VERSION_MIN=${TVOS_VERSION_MIN-"9.0.0"} 44 export TVOS_SIMULATOR_VERSION_MIN=${TVOS_SIMULATOR_VERSION_MIN-$TVOS_VERSION_MIN} 45 46 echo 47 echo "Warnings related to headers being present but not usable are due to functions" 48 echo "that didn't exist in the specified minimum iOS version level." 49 echo "They can be safely ignored." 50 echo 51 echo "Define the LIBSODIUM_MINIMAL_BUILD environment variable to build a" 52 echo "library without deprecated/undocumented/low-level functions." 53 echo 54 echo "Define the LIBSODIUM_SKIP_SIMULATORS environment variable to skip building" 55 echo "the simulators libraries (iOS, watchOS, tvOS, visionOS simulators)." 56 echo 57 58 if [ "$LIBSODIUM_MINIMAL_BUILD" ]; then 59 export LIBSODIUM_ENABLE_MINIMAL_FLAG="--enable-minimal" 60 else 61 export LIBSODIUM_ENABLE_MINIMAL_FLAG="" 62 fi 63 64 IOS32_SUPPORTED=false 65 [ "$(echo "$IOS_VERSION_MIN" | cut -d'.' -f1)" -lt "11" ] && IOS32_SUPPORTED=true 66 67 I386_SIMULATOR_SUPPORTED=false 68 [ "$(echo "$IOS_SIMULATOR_VERSION_MIN" | cut -d'.' -f1)" -lt "11" ] && I386_SIMULATOR_SUPPORTED=true 69 70 VISIONOS_SUPPORTED=false 71 [ -d "${XCODEDIR}/Platforms/XROS.platform" ] && VISIONOS_SUPPORTED=true 72 73 NPROCESSORS=$(getconf NPROCESSORS_ONLN 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) 74 PROCESSORS=${NPROCESSORS:-3} 75 76 swift_module_map() { 77 echo 'module Clibsodium {' 78 echo ' header "sodium.h"' 79 echo ' export *' 80 echo '}' 81 } 82 83 build_macos() { 84 export BASEDIR="${XCODEDIR}/Platforms/MacOSX.platform/Developer" 85 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 86 87 ## macOS arm64 88 export CFLAGS="-O3 -arch arm64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 89 export LDFLAGS="-arch arm64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 90 91 make distclean >/dev/null 2>&1 92 ./configure --host=aarch64-apple-darwin23 --prefix="$MACOS_ARM64_PREFIX" \ 93 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 94 make -j${PROCESSORS} install || exit 1 95 96 ## macOS arm64e 97 export CFLAGS="-O3 -arch arm64e -mmacosx-version-min=${MACOS_VERSION_MIN}" 98 export LDFLAGS="-arch arm64e -mmacosx-version-min=${MACOS_VERSION_MIN}" 99 100 make distclean >/dev/null 2>&1 101 ./configure --host=aarch64-apple-darwin23 --prefix="$MACOS_ARM64E_PREFIX" \ 102 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 103 make -j${PROCESSORS} install || exit 1 104 105 ## macOS x86_64 106 export CFLAGS="-O3 -arch x86_64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 107 export LDFLAGS="-arch x86_64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 108 109 make distclean >/dev/null 2>&1 110 ./configure --host=x86_64-apple-darwin23 --prefix="$MACOS_X86_64_PREFIX" \ 111 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 112 make -j${PROCESSORS} install || exit 1 113 } 114 115 build_ios() { 116 export BASEDIR="${XCODEDIR}/Platforms/iPhoneOS.platform/Developer" 117 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 118 export SDK="${BASEDIR}/SDKs/iPhoneOS.sdk" 119 120 if [ "$IOS32_SUPPORTED" = true ]; then 121 ## 32-bit iOS 122 export CFLAGS="-O3 -mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 123 export LDFLAGS="-mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 124 125 make distclean >/dev/null 2>&1 126 ./configure --host=arm-apple-darwin23 --prefix="$IOS32_PREFIX" \ 127 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 128 make -j${PROCESSORS} install || exit 1 129 130 ## 32-bit armv7s iOS 131 export CFLAGS="-O3 -mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 132 export LDFLAGS="-mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 133 134 make distclean >/dev/null 2>&1 135 ./configure --host=arm-apple-darwin23 --prefix="$IOS32s_PREFIX" \ 136 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 137 make -j${PROCESSORS} install || exit 1 138 fi 139 140 ## 64-bit iOS 141 export CFLAGS="-O3 -arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 142 export LDFLAGS="-arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 143 144 make distclean >/dev/null 2>&1 145 ./configure --host=aarch64-apple-darwin23 --prefix="$IOS64_PREFIX" \ 146 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 147 make -j${PROCESSORS} install || exit 1 148 149 ## 64-bit iOS arm64e 150 export CFLAGS="-O3 -arch arm64e -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 151 export LDFLAGS="-arch arm64e -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 152 153 make distclean >/dev/null 2>&1 154 ./configure --host=aarch64-apple-darwin23 --prefix="$IOS64E_PREFIX" \ 155 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 156 make -j${PROCESSORS} install || exit 1 157 } 158 159 build_ios_simulator() { 160 export BASEDIR="${XCODEDIR}/Platforms/iPhoneSimulator.platform/Developer" 161 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 162 export SDK="${BASEDIR}/SDKs/iPhoneSimulator.sdk" 163 164 ## arm64 simulator 165 export CFLAGS="-O3 -arch arm64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 166 export LDFLAGS="-arch arm64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 167 168 make distclean >/dev/null 2>&1 169 ./configure --host=aarch64-apple-darwin23 --prefix="$IOS_SIMULATOR_ARM64_PREFIX" \ 170 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 171 make -j${PROCESSORS} install || exit 1 172 173 ## arm64e simulator 174 export CFLAGS="-O3 -arch arm64e -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 175 export LDFLAGS="-arch arm64e -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 176 177 make distclean >/dev/null 2>&1 178 ./configure --host=aarch64-apple-darwin23 --prefix="$IOS_SIMULATOR_ARM64E_PREFIX" \ 179 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 180 make -j${PROCESSORS} install || exit 1 181 182 if [ "$I386_SIMULATOR_SUPPORTED" = true ]; then 183 ## i386 simulator 184 export CFLAGS="-O3 -arch i386 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 185 export LDFLAGS="-arch i386 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 186 187 make distclean >/dev/null 2>&1 188 ./configure --host=i686-apple-darwin23 --prefix="$IOS_SIMULATOR_I386_PREFIX" \ 189 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 190 make -j${PROCESSORS} install || exit 1 191 fi 192 193 ## x86_64 simulator 194 export CFLAGS="-O3 -arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 195 export LDFLAGS="-arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 196 197 make distclean >/dev/null 2>&1 198 ./configure --host=x86_64-apple-darwin23 --prefix="$IOS_SIMULATOR_X86_64_PREFIX" \ 199 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} 200 make -j${PROCESSORS} install || exit 1 201 } 202 203 build_watchos() { 204 export BASEDIR="${XCODEDIR}/Platforms/WatchOS.platform/Developer" 205 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 206 export SDK="${BASEDIR}/SDKs/WatchOS.sdk" 207 208 # 32-bit watchOS 209 export CFLAGS="-O3 -mthumb -arch armv7k -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 210 export LDFLAGS="-mthumb -arch armv7k -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 211 212 make distclean >/dev/null 2>&1 213 ./configure --host=arm-apple-darwin23 --prefix="$WATCHOS32_PREFIX" \ 214 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 215 make -j${PROCESSORS} install || exit 1 216 217 ## 64-bit arm64_32 watchOS 218 export CFLAGS="-O3 -mthumb -arch arm64_32 -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 219 export LDFLAGS="-mthumb -arch arm64_32 -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 220 221 make distclean >/dev/null 2>&1 222 ./configure --host=aarch64-apple-darwin23 --prefix="$WATCHOS64_32_PREFIX" \ 223 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 224 make -j${PROCESSORS} install || exit 1 225 226 ## 64-bit arm64 watchOS 227 export CFLAGS="-O3 -mthumb -arch arm64 -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 228 export LDFLAGS="-mthumb -arch arm64 -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 229 230 make distclean >/dev/null 2>&1 231 ./configure --host=aarch64-apple-darwin23 --prefix="$WATCHOS64_PREFIX" \ 232 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 233 make -j${PROCESSORS} install || exit 1 234 235 ## 64-bit arm64e watchOS 236 export CFLAGS="-O3 -mthumb -arch arm64e -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 237 export LDFLAGS="-mthumb -arch arm64e -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 238 239 make distclean >/dev/null 2>&1 240 ./configure --host=aarch64-apple-darwin23 --prefix="$WATCHOS64E_PREFIX" \ 241 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 242 make -j${PROCESSORS} install || exit 1 243 } 244 245 build_watchos_simulator() { 246 export BASEDIR="${XCODEDIR}/Platforms/WatchSimulator.platform/Developer" 247 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 248 export SDK="${BASEDIR}/SDKs/WatchSimulator.sdk" 249 250 ## arm64 simulator 251 export CFLAGS="-O3 -arch arm64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 252 export LDFLAGS="-arch arm64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 253 254 make distclean >/dev/null 2>&1 255 ./configure --host=aarch64-apple-darwin23 --prefix="$WATCHOS_SIMULATOR_ARM64_PREFIX" \ 256 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 257 make -j${PROCESSORS} install || exit 1 258 259 ## arm64e simulator 260 export CFLAGS="-O3 -arch arm64e -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 261 export LDFLAGS="-arch arm64e -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 262 263 make distclean >/dev/null 2>&1 264 ./configure --host=aarch64-apple-darwin23 --prefix="$WATCHOS_SIMULATOR_ARM64E_PREFIX" \ 265 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 266 make -j${PROCESSORS} install || exit 1 267 268 ## i386 simulator 269 export CFLAGS="-O3 -arch i386 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 270 export LDFLAGS="-arch i386 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 271 272 make distclean >/dev/null 2>&1 273 ./configure --host=i686-apple-darwin23 --prefix="$WATCHOS_SIMULATOR_I386_PREFIX" \ 274 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 275 make -j${PROCESSORS} install || exit 1 276 277 ## x86_64 simulator 278 export CFLAGS="-O3 -arch x86_64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 279 export LDFLAGS="-arch x86_64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 280 281 make distclean >/dev/null 2>&1 282 ./configure --host=x86_64-apple-darwin23 --prefix="$WATCHOS_SIMULATOR_X86_64_PREFIX" \ 283 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 284 make -j${PROCESSORS} install || exit 1 285 } 286 287 build_tvos() { 288 export BASEDIR="${XCODEDIR}/Platforms/AppleTVOS.platform/Developer" 289 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 290 export SDK="${BASEDIR}/SDKs/AppleTVOS.sdk" 291 292 ## 64-bit tvOS 293 export CFLAGS="-O3 -arch arm64 -isysroot ${SDK} -mtvos-version-min=${TVOS_VERSION_MIN}" 294 export LDFLAGS="-arch arm64 -isysroot ${SDK} -mtvos-version-min=${TVOS_VERSION_MIN}" 295 296 make distclean >/dev/null 2>&1 297 ./configure --host=aarch64-apple-darwin23 --prefix="$TVOS_PREFIX" \ 298 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 299 make -j${PROCESSORS} install || exit 1 300 301 ## 64-bit tvOS 302 export CFLAGS="-O3 -arch arm64e -isysroot ${SDK} -mtvos-version-min=${TVOS_VERSION_MIN}" 303 export LDFLAGS="-arch arm64e -isysroot ${SDK} -mtvos-version-min=${TVOS_VERSION_MIN}" 304 305 make distclean >/dev/null 2>&1 306 ./configure --host=aarch64-apple-darwin23 --prefix="$TVOSE_PREFIX" \ 307 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 308 make -j${PROCESSORS} install || exit 1 309 } 310 311 build_tvos_simulator() { 312 export BASEDIR="${XCODEDIR}/Platforms/AppleTVSimulator.platform/Developer" 313 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 314 export SDK="${BASEDIR}/SDKs/AppleTVSimulator.sdk" 315 316 ## arm64 simulator 317 export CFLAGS="-O3 -arch arm64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 318 export LDFLAGS="-arch arm64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 319 320 make distclean >/dev/null 2>&1 321 ./configure --host=aarch64-apple-darwin23 --prefix="$TVOS_SIMULATOR_ARM64_PREFIX" \ 322 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 323 make -j${PROCESSORS} install || exit 1 324 325 ## arm64e simulator 326 export CFLAGS="-O3 -arch arm64e -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 327 export LDFLAGS="-arch arm64e -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 328 329 make distclean >/dev/null 2>&1 330 ./configure --host=aarch64-apple-darwin23 --prefix="$TVOS_SIMULATOR_ARM64E_PREFIX" \ 331 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 332 make -j${PROCESSORS} install || exit 1 333 334 ## x86_64 simulator 335 export CFLAGS="-O3 -arch x86_64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 336 export LDFLAGS="-arch x86_64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 337 338 make distclean >/dev/null 2>&1 339 ./configure --host=x86_64-apple-darwin23 --prefix="$TVOS_SIMULATOR_X86_64_PREFIX" \ 340 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} 341 make -j${PROCESSORS} install || exit 1 342 } 343 344 build_visionos() { 345 export BASEDIR="${XCODEDIR}/Platforms/XROS.platform/Developer" 346 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 347 export SDK="${BASEDIR}/SDKs/XROS.sdk" 348 349 export CFLAGS="-O3 -arch arm64 -isysroot ${SDK}" 350 export LDFLAGS="-arch arm64 -isysroot ${SDK}" 351 352 make distclean >/dev/null 2>&1 353 ./configure --host=aarch64-apple-darwin23 --prefix="$VISIONOS_PREFIX" \ 354 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 355 make -j${PROCESSORS} install || exit 1 356 357 export CFLAGS="-O3 -arch arm64e -isysroot ${SDK}" 358 export LDFLAGS="-arch arm64e -isysroot ${SDK}" 359 360 make distclean >/dev/null 2>&1 361 ./configure --host=aarch64-apple-darwin23 --prefix="$VISIONOSE_PREFIX" \ 362 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 363 make -j${PROCESSORS} install || exit 1 364 } 365 366 build_visionos_simulator() { 367 export BASEDIR="${XCODEDIR}/Platforms/XRSimulator.platform/Developer" 368 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 369 export SDK="${BASEDIR}/SDKs/XRSimulator.sdk" 370 371 export CFLAGS="-O3 -arch arm64 -isysroot ${SDK}" 372 export LDFLAGS="-arch arm64 -isysroot ${SDK}" 373 374 make distclean >/dev/null 2>&1 375 ./configure --host=aarch64-apple-darwin23 --prefix="$VISIONOS_SIMULATOR_PREFIX" \ 376 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 377 make -j${PROCESSORS} install || exit 1 378 379 export CFLAGS="-O3 -arch arm64e -isysroot ${SDK}" 380 export LDFLAGS="-arch arm64e -isysroot ${SDK}" 381 382 make distclean >/dev/null 2>&1 383 ./configure --host=aarch64-apple-darwin23 --prefix="$VISIONOSE_SIMULATOR_PREFIX" \ 384 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 385 make -j${PROCESSORS} install || exit 1 386 } 387 388 build_catalyst() { 389 export BASEDIR="${XCODEDIR}/Platforms/MacOSX.platform/Developer" 390 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 391 export SDK="${BASEDIR}/SDKs/MacOSX.sdk" 392 393 ## arm64 catalyst 394 export CFLAGS="-O3 -arch arm64 -target arm64-apple-ios13.1-macabi -isysroot ${SDK}" 395 export LDFLAGS="-arch arm64 -target arm64-apple-ios13.1-macabi -isysroot ${SDK}" 396 397 make distclean >/dev/null 2>&1 398 ./configure --host=aarch64-apple-ios --prefix="$CATALYST_ARM64_PREFIX" \ 399 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 400 make -j${PROCESSORS} install || exit 1 401 402 ## arm64e catalyst 403 export CFLAGS="-O3 -arch arm64e -target arm64e-apple-ios13.1-macabi -isysroot ${SDK}" 404 export LDFLAGS="-arch arm64e -target arm64e-apple-ios13.1-macabi -isysroot ${SDK}" 405 406 make distclean >/dev/null 2>&1 407 ./configure --host=aarch64-apple-ios --prefix="$CATALYST_ARM64E_PREFIX" \ 408 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 409 make -j${PROCESSORS} install || exit 1 410 411 ## x86_64 catalyst 412 export CFLAGS="-O3 -arch x86_64 -target x86_64-apple-ios13.1-macabi -isysroot ${SDK}" 413 export LDFLAGS="-arch x86_64 -target x86_64-apple-ios13.1-macabi -isysroot ${SDK}" 414 415 make distclean >/dev/null 2>&1 416 ./configure --host=x86_64-apple-ios --prefix="$CATALYST_X86_64_PREFIX" \ 417 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 418 make -j${PROCESSORS} install || exit 1 419 } 420 421 mkdir -p "${PREFIX}/tmp" 422 423 echo "Building for macOS..." 424 build_macos >"$LOG_FILE" 2>&1 || exit 1 425 echo "Building for iOS..." 426 build_ios >"$LOG_FILE" 2>&1 || exit 1 427 echo "Building for watchOS..." 428 build_watchos >"$LOG_FILE" 2>&1 || exit 1 429 echo "Building for tvOS..." 430 build_tvos >"$LOG_FILE" 2>&1 || exit 1 431 echo "Building for Catalyst..." 432 build_catalyst >"$LOG_FILE" 2>&1 || exit 1 433 if [ "$VISIONOS_SUPPORTED" = true ]; then 434 echo "Building for visionOS..." 435 build_visionos >"$LOG_FILE" 2>&1 || exit 1 436 fi 437 438 if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then 439 echo "Building for the iOS simulator..." 440 build_ios_simulator >"$LOG_FILE" 2>&1 || exit 1 441 echo "Building for the watchOS simulator..." 442 build_watchos_simulator >"$LOG_FILE" 2>&1 || exit 1 443 echo "Building for the tvOS simulator..." 444 build_tvos_simulator >"$LOG_FILE" 2>&1 || exit 1 445 if [ "$VISIONOS_SUPPORTED" = true ]; then 446 echo "Building for the visionOS simulator..." 447 build_visionos_simulator >"$LOG_FILE" 2>&1 || exit 1 448 fi 449 else 450 echo "[Skipping the simulators]" 451 fi 452 453 echo "Adding the Clibsodium module map for Swift..." 454 455 find "$PREFIX" -name "include" -type d -print | while read -r f; do 456 swift_module_map >"${f}/module.modulemap" 457 done 458 459 echo "Bundling macOS targets..." 460 461 mkdir -p "${PREFIX}/macos/lib" 462 cp -a "${MACOS_X86_64_PREFIX}/include" "${PREFIX}/macos/" 463 for ext in a dylib; do 464 lipo -create \ 465 "${MACOS_ARM64_PREFIX}/lib/libsodium.${ext}" \ 466 "${MACOS_ARM64E_PREFIX}/lib/libsodium.${ext}" \ 467 "${MACOS_X86_64_PREFIX}/lib/libsodium.${ext}" \ 468 -output "${PREFIX}/macos/lib/libsodium.${ext}" 469 done 470 471 echo "Bundling iOS targets..." 472 473 mkdir -p "${PREFIX}/ios/lib" 474 cp -a "${IOS64_PREFIX}/include" "${PREFIX}/ios/" 475 for ext in a dylib; do 476 LIBRARY_PATHS="$IOS64_PREFIX/lib/libsodium.${ext}" 477 LIBRARY_PATHS="$LIBRARY_PATHS $IOS64E_PREFIX/lib/libsodium.${ext}" 478 if [ "$IOS32_SUPPORTED" = true ]; then 479 LIBRARY_PATHS="$LIBRARY_PATHS $IOS32_PREFIX/lib/libsodium.${ext}" 480 LIBRARY_PATHS="$LIBRARY_PATHS $IOS32s_PREFIX/lib/libsodium.${ext}" 481 fi 482 lipo -create \ 483 ${LIBRARY_PATHS} \ 484 -output "$PREFIX/ios/lib/libsodium.${ext}" 485 done 486 487 echo "Bundling watchOS targets..." 488 489 mkdir -p "${PREFIX}/watchos/lib" 490 cp -a "${WATCHOS64_32_PREFIX}/include" "${PREFIX}/watchos/" 491 for ext in a dylib; do 492 lipo -create \ 493 "${WATCHOS32_PREFIX}/lib/libsodium.${ext}" \ 494 "${WATCHOS64_32_PREFIX}/lib/libsodium.${ext}" \ 495 "${WATCHOS64_PREFIX}/lib/libsodium.${ext}" \ 496 "${WATCHOS64E_PREFIX}/lib/libsodium.${ext}" \ 497 -output "${PREFIX}/watchos/lib/libsodium.${ext}" 498 done 499 500 echo "Bundling tvOS targets..." 501 502 mkdir -p "${PREFIX}/tvos/lib" 503 cp -a "${TVOS_PREFIX}/include" "${PREFIX}/tvos/" 504 for ext in a dylib; do 505 lipo -create \ 506 "$TVOS_PREFIX/lib/libsodium.${ext}" \ 507 "$TVOSE_PREFIX/lib/libsodium.${ext}" \ 508 -output "$PREFIX/tvos/lib/libsodium.${ext}" 509 done 510 511 if [ "$VISIONOS_SUPPORTED" = true ]; then 512 echo "Bundling visionOS targets..." 513 514 mkdir -p "${PREFIX}/visionos/lib" 515 cp -a "${VISIONOS_PREFIX}/include" "${PREFIX}/visionos/" 516 for ext in a dylib; do 517 lipo -create \ 518 "$VISIONOS_PREFIX/lib/libsodium.${ext}" \ 519 "$VISIONOSE_PREFIX/lib/libsodium.${ext}" \ 520 -output "$PREFIX/visionos/lib/libsodium.${ext}" 521 done 522 fi 523 524 echo "Bundling Catalyst targets..." 525 526 mkdir -p "${PREFIX}/catalyst/lib" 527 cp -a "${CATALYST_X86_64_PREFIX}/include" "${PREFIX}/catalyst/" 528 for ext in a dylib; do 529 if [ ! -f "${CATALYST_X86_64_PREFIX}/lib/libsodium.${ext}" ]; then 530 continue 531 fi 532 lipo -create \ 533 "${CATALYST_ARM64_PREFIX}/lib/libsodium.${ext}" \ 534 "${CATALYST_ARM64E_PREFIX}/lib/libsodium.${ext}" \ 535 "${CATALYST_X86_64_PREFIX}/lib/libsodium.${ext}" \ 536 -output "${PREFIX}/catalyst/lib/libsodium.${ext}" 537 done 538 539 if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then 540 echo "Bundling iOS simulators..." 541 542 mkdir -p "${PREFIX}/ios-simulators/lib" 543 cp -a "${IOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/ios-simulators/" 544 for ext in a dylib; do 545 LIBRARY_PATHS="${IOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" 546 LIBRARY_PATHS="$LIBRARY_PATHS ${IOS_SIMULATOR_ARM64E_PREFIX}/lib/libsodium.${ext}" 547 LIBRARY_PATHS="$LIBRARY_PATHS ${IOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" 548 if [ "$I386_SIMULATOR_SUPPORTED" = true ]; then 549 LIBRARY_PATHS="$LIBRARY_PATHS ${IOS_SIMULATOR_I386_PREFIX}/lib/libsodium.${ext}" 550 fi 551 lipo -create \ 552 ${LIBRARY_PATHS} \ 553 -output "${PREFIX}/ios-simulators/lib/libsodium.${ext}" || exit 1 554 done 555 556 echo "Bundling watchOS simulators..." 557 558 mkdir -p "${PREFIX}/watchos-simulators/lib" 559 cp -a "${WATCHOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/watchos-simulators/" 560 for ext in a dylib; do 561 lipo -create \ 562 "${WATCHOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" \ 563 "${WATCHOS_SIMULATOR_ARM64E_PREFIX}/lib/libsodium.${ext}" \ 564 "${WATCHOS_SIMULATOR_I386_PREFIX}/lib/libsodium.${ext}" \ 565 "${WATCHOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 566 -output "${PREFIX}/watchos-simulators/lib/libsodium.${ext}" 567 done 568 569 echo "Bundling tvOS simulators..." 570 571 mkdir -p "${PREFIX}/tvos-simulators/lib" 572 cp -a "${TVOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/tvos-simulators/" 573 for ext in a dylib; do 574 lipo -create \ 575 "${TVOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" \ 576 "${TVOS_SIMULATOR_ARM64E_PREFIX}/lib/libsodium.${ext}" \ 577 "${TVOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 578 -output "${PREFIX}/tvos-simulators/lib/libsodium.${ext}" || exit 1 579 done 580 581 if [ "$VISIONOS_SUPPORTED" = true ]; then 582 echo "Bundling visionOS simulators..." 583 584 mkdir -p "${PREFIX}/visionos-simulators/lib" 585 cp -a "${VISIONOS_SIMULATOR_PREFIX}/include" "${PREFIX}/visionos-simulators/" 586 for ext in a dylib; do 587 lipo -create \ 588 "${VISIONOS_SIMULATOR_PREFIX}/lib/libsodium.${ext}" \ 589 "${VISIONOSE_SIMULATOR_PREFIX}/lib/libsodium.${ext}" \ 590 -output "${PREFIX}/visionos-simulators/lib/libsodium.${ext}" || exit 1 591 done 592 fi 593 fi 594 595 echo "Creating Clibsodium.xcframework..." 596 597 rm -rf "${PREFIX}/Clibsodium.xcframework" 598 599 XCFRAMEWORK_ARGS="" 600 for f in macos ios watchos tvos visionos catalyst; do 601 if [ "$VISIONOS_SUPPORTED" = false ] && [ "$f" = "visionos" ]; then 602 continue 603 fi 604 XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -library $(readlink -f ${PREFIX}/${f}/lib/libsodium.a)" 605 XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -headers $(readlink -f ${PREFIX}/${f}/include)" 606 done 607 if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then 608 for f in ios-simulators watchos-simulators tvos-simulators visionos-simulators; do 609 if [ "$VISIONOS_SUPPORTED" = false ] && [ "$f" = "visionos-simulators" ]; then 610 continue 611 fi 612 XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -library $(readlink -f ${PREFIX}/${f}/lib/libsodium.a)" 613 XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -headers $(readlink -f ${PREFIX}/${f}/include)" 614 done 615 fi 616 xcodebuild -create-xcframework \ 617 ${XCFRAMEWORK_ARGS} \ 618 -output "${PREFIX}/Clibsodium.xcframework" >/dev/null 619 620 ls -ld -- "$PREFIX" 621 ls -l -- "$PREFIX" 622 ls -l -- "$PREFIX/Clibsodium.xcframework" 623 624 echo "Done!" 625 626 # Cleanup 627 rm -rf -- "$PREFIX/tmp" 628 make distclean >/dev/null