1#! /bin/sh 2 3export PREFIX="$(pwd)/libsodium-apple" 4export MACOS_ARM64_PREFIX="${PREFIX}/tmp/macos-arm64" 5export MACOS_X86_64_PREFIX="${PREFIX}/tmp/macos-x86_64" 6export IOS32_PREFIX="${PREFIX}/tmp/ios32" 7export IOS32s_PREFIX="${PREFIX}/tmp/ios32s" 8export IOS64_PREFIX="${PREFIX}/tmp/ios64" 9export IOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/ios-simulator-arm64" 10export IOS_SIMULATOR_I386_PREFIX="${PREFIX}/tmp/ios-simulator-i386" 11export IOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/ios-simulator-x86_64" 12export WATCHOS32_PREFIX="${PREFIX}/tmp/watchos32" 13export WATCHOS64_32_PREFIX="${PREFIX}/tmp/watchos64_32" 14export WATCHOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/watchos-simulator-arm64" 15export WATCHOS_SIMULATOR_I386_PREFIX="${PREFIX}/tmp/watchos-simulator-i386" 16export WATCHOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/watchos-simulator-x86_64" 17export TVOS64_PREFIX="${PREFIX}/tmp/tvos64" 18export TVOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/tvos-simulator-arm64" 19export TVOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/tvos-simulator-x86_64" 20export CATALYST_ARM64_PREFIX="${PREFIX}/tmp/catalyst-arm64" 21export CATALYST_X86_64_PREFIX="${PREFIX}/tmp/catalyst-x86_64" 22export LOG_FILE="${PREFIX}/tmp/build_log" 23export XCODEDIR="$(xcode-select -p)" 24 25export MACOS_VERSION_MIN=${MACOS_VERSION_MIN-"10.10"} 26export IOS_SIMULATOR_VERSION_MIN=${IOS_SIMULATOR_VERSION_MIN-"9.0.0"} 27export IOS_VERSION_MIN=${IOS_VERSION_MIN-"9.0.0"} 28export WATCHOS_SIMULATOR_VERSION_MIN=${WATCHOS_SIMULATOR_VERSION_MIN-"4.0.0"} 29export WATCHOS_VERSION_MIN=${WATCHOS_VERSION_MIN-"4.0.0"} 30export TVOS_SIMULATOR_VERSION_MIN=${TVOS_SIMULATOR_VERSION_MIN-"9.0.0"} 31export TVOS_VERSION_MIN=${TVOS_VERSION_MIN-"9.0.0"} 32 33echo 34echo "Warnings related to headers being present but not usable are due to functions" 35echo "that didn't exist in the specified minimum iOS version level." 36echo "They can be safely ignored." 37echo 38 39if [ -z "$LIBSODIUM_FULL_BUILD" ]; then 40 export LIBSODIUM_ENABLE_MINIMAL_FLAG="--enable-minimal" 41else 42 export LIBSODIUM_ENABLE_MINIMAL_FLAG="" 43fi 44 45APPLE_SILICON_SUPPORTED=false 46echo 'int main(void){return 0;}' >comptest.c && cc --target=arm64-macos comptest.c 2>/dev/null && APPLE_SILICON_SUPPORTED=true 47rm -f comptest.c 48 49NPROCESSORS=$(getconf NPROCESSORS_ONLN 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) 50PROCESSORS=${NPROCESSORS:-3} 51 52swift_module_map() { 53 echo 'module Clibsodium {' 54 echo ' header "sodium.h"' 55 echo ' export *' 56 echo '}' 57} 58 59build_macos() { 60 export BASEDIR="${XCODEDIR}/Platforms/MacOSX.platform/Developer" 61 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 62 63 ## macOS arm64 64 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 65 export CFLAGS="-O2 -arch arm64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 66 export LDFLAGS="-arch arm64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 67 68 make distclean >/dev/null 2>&1 69 ./configure --host=arm-apple-darwin20 --prefix="$MACOS_ARM64_PREFIX" \ 70 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 71 make -j${PROCESSORS} install || exit 1 72 fi 73 74 ## macOS x86_64 75 export CFLAGS="-O2 -arch x86_64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 76 export LDFLAGS="-arch x86_64 -mmacosx-version-min=${MACOS_VERSION_MIN}" 77 78 make distclean >/dev/null 2>&1 79 ./configure --host=x86_64-apple-darwin10 --prefix="$MACOS_X86_64_PREFIX" \ 80 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 81 make -j${PROCESSORS} install || exit 1 82} 83 84build_ios() { 85 export BASEDIR="${XCODEDIR}/Platforms/iPhoneOS.platform/Developer" 86 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 87 export SDK="${BASEDIR}/SDKs/iPhoneOS.sdk" 88 89 ## 32-bit iOS 90 export CFLAGS="-fembed-bitcode -O2 -mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 91 export LDFLAGS="-fembed-bitcode -mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 92 93 make distclean >/dev/null 2>&1 94 ./configure --host=arm-apple-darwin10 --prefix="$IOS32_PREFIX" \ 95 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 96 make -j${PROCESSORS} install || exit 1 97 98 ## 32-bit armv7s iOS 99 export CFLAGS="-fembed-bitcode -O2 -mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 100 export LDFLAGS="-fembed-bitcode -mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 101 102 make distclean >/dev/null 2>&1 103 ./configure --host=arm-apple-darwin10 --prefix="$IOS32s_PREFIX" \ 104 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 105 make -j${PROCESSORS} install || exit 1 106 107 ## 64-bit iOS 108 export CFLAGS="-fembed-bitcode -O2 -arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 109 export LDFLAGS="-fembed-bitcode -arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}" 110 111 make distclean >/dev/null 2>&1 112 ./configure --host=arm-apple-darwin10 --prefix="$IOS64_PREFIX" \ 113 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 114 make -j${PROCESSORS} install || exit 1 115} 116 117build_ios_simulator() { 118 export BASEDIR="${XCODEDIR}/Platforms/iPhoneSimulator.platform/Developer" 119 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 120 export SDK="${BASEDIR}/SDKs/iPhoneSimulator.sdk" 121 122 ## arm64 simulator 123 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 124 export CFLAGS="-fembed-bitcode -O2 -arch arm64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 125 export LDFLAGS="-fembed-bitcode -arch arm64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 126 127 make distclean >/dev/null 2>&1 128 ./configure --host=arm-apple-darwin20 --prefix="$IOS_SIMULATOR_ARM64_PREFIX" \ 129 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 130 make -j${PROCESSORS} install || exit 1 131 fi 132 133 ## i386 simulator 134 export CFLAGS="-fembed-bitcode -O2 -arch i386 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 135 export LDFLAGS="-fembed-bitcode -arch i386 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 136 137 make distclean >/dev/null 2>&1 138 ./configure --host=i686-apple-darwin10 --prefix="$IOS_SIMULATOR_I386_PREFIX" \ 139 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 140 make -j${PROCESSORS} install || exit 1 141 142 ## x86_64 simulator 143 export CFLAGS="-fembed-bitcode -O2 -arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 144 export LDFLAGS="-fembed-bitcode -arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}" 145 146 make distclean >/dev/null 2>&1 147 ./configure --host=x86_64-apple-darwin10 --prefix="$IOS_SIMULATOR_X86_64_PREFIX" \ 148 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} 149 make -j${PROCESSORS} install || exit 1 150} 151 152build_watchos() { 153 export BASEDIR="${XCODEDIR}/Platforms/WatchOS.platform/Developer" 154 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 155 export SDK="${BASEDIR}/SDKs/WatchOS.sdk" 156 157 # 32-bit watchOS 158 export CFLAGS="-fembed-bitcode -O2 -mthumb -arch armv7k -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 159 export LDFLAGS="-fembed-bitcode -mthumb -arch armv7k -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 160 161 make distclean >/dev/null 2>&1 162 ./configure --host=arm-apple-darwin10 --prefix="$WATCHOS32_PREFIX" \ 163 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 164 make -j${PROCESSORS} install || exit 1 165 166 ## 64-bit arm64_32 watchOS 167 export CFLAGS="-fembed-bitcode -O2 -mthumb -arch arm64_32 -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 168 export LDFLAGS="-fembed-bitcode -mthumb -arch arm64_32 -isysroot ${SDK} -mwatchos-version-min=${WATCHOS_VERSION_MIN}" 169 170 make distclean >/dev/null 2>&1 171 ./configure --host=arm-apple-darwin10 --prefix="$WATCHOS64_32_PREFIX" \ 172 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 173 make -j${PROCESSORS} install || exit 1 174} 175 176build_watchos_simulator() { 177 export BASEDIR="${XCODEDIR}/Platforms/WatchSimulator.platform/Developer" 178 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 179 export SDK="${BASEDIR}/SDKs/WatchSimulator.sdk" 180 181 ## arm64 simulator 182 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 183 export CFLAGS="-fembed-bitcode -O2 -arch arm64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 184 export LDFLAGS="-fembed-bitcode -arch arm64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 185 186 make distclean >/dev/null 2>&1 187 ./configure --host=arm-apple-darwin20 --prefix="$WATCHOS_SIMULATOR_ARM64_PREFIX" \ 188 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 189 make -j${PROCESSORS} install || exit 1 190 fi 191 192 ## i386 simulator 193 export CFLAGS="-fembed-bitcode -O2 -arch i386 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 194 export LDFLAGS="-fembed-bitcode -arch i386 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 195 196 make distclean >/dev/null 2>&1 197 ./configure --host=i686-apple-darwin10 --prefix="$WATCHOS_SIMULATOR_I386_PREFIX" \ 198 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 199 make -j${PROCESSORS} install || exit 1 200 201 ## x86_64 simulator 202 export CFLAGS="-fembed-bitcode -O2 -arch x86_64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 203 export LDFLAGS="-fembed-bitcode -arch x86_64 -isysroot ${SDK} -mwatchos-simulator-version-min=${WATCHOS_SIMULATOR_VERSION_MIN}" 204 205 make distclean >/dev/null 2>&1 206 ./configure --host=x86_64-apple-darwin10 --prefix="$WATCHOS_SIMULATOR_X86_64_PREFIX" \ 207 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 208 make -j${PROCESSORS} install || exit 1 209} 210 211build_tvos() { 212 export BASEDIR="${XCODEDIR}/Platforms/AppleTVOS.platform/Developer" 213 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 214 export SDK="${BASEDIR}/SDKs/AppleTVOS.sdk" 215 216 ## 64-bit tvOS 217 export CFLAGS="-fembed-bitcode -O2 -arch arm64 -isysroot ${SDK} -mtvos-version-min=${TVOS_VERSION_MIN}" 218 export LDFLAGS="-fembed-bitcode -arch arm64 -isysroot ${SDK} -mtvos-version-min=${TVOS_VERSION_MIN}" 219 220 make distclean >/dev/null 2>&1 221 ./configure --host=arm-apple-darwin10 --prefix="$TVOS64_PREFIX" \ 222 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 223 make -j${PROCESSORS} install || exit 1 224} 225 226build_tvos_simulator() { 227 export BASEDIR="${XCODEDIR}/Platforms/AppleTVSimulator.platform/Developer" 228 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 229 export SDK="${BASEDIR}/SDKs/AppleTVSimulator.sdk" 230 231 ## arm64 simulator 232 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 233 export CFLAGS="-fembed-bitcode -O2 -arch arm64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 234 export LDFLAGS="-fembed-bitcode -arch arm64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 235 236 make distclean >/dev/null 2>&1 237 ./configure --host=arm-apple-darwin20 --prefix="$TVOS_SIMULATOR_ARM64_PREFIX" \ 238 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 239 make -j${PROCESSORS} install || exit 1 240 fi 241 242 ## x86_64 simulator 243 export CFLAGS="-fembed-bitcode -O2 -arch x86_64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 244 export LDFLAGS="-fembed-bitcode -arch x86_64 -isysroot ${SDK} -mtvos-simulator-version-min=${TVOS_SIMULATOR_VERSION_MIN}" 245 246 make distclean >/dev/null 2>&1 247 ./configure --host=x86_64-apple-darwin10 --prefix="$TVOS_SIMULATOR_X86_64_PREFIX" \ 248 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} 249 make -j${PROCESSORS} install || exit 1 250} 251 252build_catalyst() { 253 export BASEDIR="${XCODEDIR}/Platforms/MacOSX.platform/Developer" 254 export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" 255 export SDK="${BASEDIR}/SDKs/MacOSX.sdk" 256 257 ## arm64 catalyst 258 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 259 export CFLAGS="-O2 -arch arm64 -target arm64-apple-ios13.0-macabi -isysroot ${SDK}" 260 export LDFLAGS="-arch arm64 -target arm64-apple-ios13.0-macabi -isysroot ${SDK}" 261 262 make distclean >/dev/null 2>&1 263 ./configure --host=arm-apple-ios --prefix="$CATALYST_ARM64_PREFIX" \ 264 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 265 make -j${PROCESSORS} install || exit 1 266 fi 267 268 ## x86_64 catalyst 269 export CFLAGS="-O2 -arch x86_64 -target x86_64-apple-ios13.0-macabi -isysroot ${SDK}" 270 export LDFLAGS="-arch x86_64 -target x86_64-apple-ios13.0-macabi -isysroot ${SDK}" 271 272 make distclean >/dev/null 2>&1 273 ./configure --host=x86_64-apple-ios --prefix="$CATALYST_X86_64_PREFIX" \ 274 ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 275 make -j${PROCESSORS} install || exit 1 276} 277 278mkdir -p "${PREFIX}/tmp" 279echo "Building for macOS..." 280build_macos >"$LOG_FILE" 2>&1 || exit 1 281echo "Building for iOS..." 282build_ios >"$LOG_FILE" 2>&1 || exit 1 283echo "Building for the iOS simulator..." 284build_ios_simulator >"$LOG_FILE" 2>&1 || exit 1 285echo "Building for watchOS..." 286build_watchos >"$LOG_FILE" 2>&1 || exit 1 287echo "Building for the watchOS simulator..." 288build_watchos_simulator >"$LOG_FILE" 2>&1 || exit 1 289echo "Building for tvOS..." 290build_tvos >"$LOG_FILE" 2>&1 || exit 1 291echo "Building for the tvOS simulator..." 292build_tvos_simulator >"$LOG_FILE" 2>&1 || exit 1 293echo "Building for Catalyst..." 294build_catalyst >"$LOG_FILE" 2>&1 || exit 1 295 296echo "Adding the Clibsodium module map for Swift..." 297 298find "$PREFIX" -name "include" -type d -print | while read -r f; do 299 swift_module_map >"${f}/module.modulemap" 300done 301 302echo "Bundling macOS targets..." 303 304mkdir -p "${PREFIX}/macos/lib" 305cp -a "${MACOS_X86_64_PREFIX}/include" "${PREFIX}/macos/" 306for ext in a dylib; do 307 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 308 lipo -create \ 309 "${MACOS_ARM64_PREFIX}/lib/libsodium.${ext}" \ 310 "${MACOS_X86_64_PREFIX}/lib/libsodium.${ext}" \ 311 -output "${PREFIX}/macos/lib/libsodium.${ext}" 312 else 313 lipo -create \ 314 "${MACOS_X86_64_PREFIX}/lib/libsodium.${ext}" \ 315 -output "${PREFIX}/macos/lib/libsodium.${ext}" 316 fi 317done 318 319echo "Bundling iOS targets..." 320 321mkdir -p "${PREFIX}/ios/lib" 322cp -a "${IOS64_PREFIX}/include" "${PREFIX}/ios/" 323for ext in a dylib; do 324 lipo -create \ 325 "$IOS32_PREFIX/lib/libsodium.${ext}" \ 326 "$IOS32s_PREFIX/lib/libsodium.${ext}" \ 327 "$IOS64_PREFIX/lib/libsodium.${ext}" \ 328 -output "$PREFIX/ios/lib/libsodium.${ext}" 329done 330 331echo "Bundling iOS simulators..." 332 333mkdir -p "${PREFIX}/ios-simulators/lib" 334cp -a "${IOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/ios-simulators/" 335for ext in a dylib; do 336 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 337 lipo -create \ 338 "${IOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" \ 339 "${IOS_SIMULATOR_I386_PREFIX}/lib/libsodium.${ext}" \ 340 "${IOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 341 -output "${PREFIX}/ios-simulators/lib/libsodium.${ext}" || exit 1 342 else 343 lipo -create \ 344 "${IOS_SIMULATOR_I386_PREFIX}/lib/libsodium.${ext}" \ 345 "${IOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 346 -output "${PREFIX}/ios-simulators/lib/libsodium.${ext}" || exit 1 347 fi 348done 349 350echo "Bundling watchOS targets..." 351 352mkdir -p "${PREFIX}/watchos/lib" 353cp -a "${WATCHOS64_32_PREFIX}/include" "${PREFIX}/watchos/" 354for ext in a dylib; do 355 lipo -create \ 356 "${WATCHOS32_PREFIX}/lib/libsodium.${ext}" \ 357 "${WATCHOS64_32_PREFIX}/lib/libsodium.${ext}" \ 358 -output "${PREFIX}/watchos/lib/libsodium.${ext}" 359done 360 361echo "Bundling watchOS simulators..." 362 363mkdir -p "${PREFIX}/watchos-simulators/lib" 364cp -a "${WATCHOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/watchos-simulators/" 365for ext in a dylib; do 366 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 367 lipo -create \ 368 "${WATCHOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" \ 369 "${WATCHOS_SIMULATOR_I386_PREFIX}/lib/libsodium.${ext}" \ 370 "${WATCHOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 371 -output "${PREFIX}/watchos-simulators/lib/libsodium.${ext}" 372 else 373 lipo -create \ 374 "${WATCHOS_SIMULATOR_I386_PREFIX}/lib/libsodium.${ext}" \ 375 "${WATCHOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 376 -output "${PREFIX}/watchos-simulators/lib/libsodium.${ext}" 377 fi 378done 379 380echo "Bundling tvOS targets..." 381 382mkdir -p "${PREFIX}/tvos/lib" 383cp -a "${TVOS64_PREFIX}/include" "${PREFIX}/tvos/" 384for ext in a dylib; do 385 lipo -create \ 386 "$TVOS64_PREFIX/lib/libsodium.${ext}" \ 387 -output "$PREFIX/tvos/lib/libsodium.${ext}" 388done 389 390echo "Bundling tvOS simulators..." 391 392mkdir -p "${PREFIX}/tvos-simulators/lib" 393cp -a "${TVOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/tvos-simulators/" 394for ext in a dylib; do 395 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 396 lipo -create \ 397 "${TVOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" \ 398 "${TVOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 399 -output "${PREFIX}/tvos-simulators/lib/libsodium.${ext}" || exit 1 400 else 401 lipo -create \ 402 "${TVOS_SIMULATOR_X86_64_PREFIX}/lib/libsodium.${ext}" \ 403 -output "${PREFIX}/tvos-simulators/lib/libsodium.${ext}" || exit 1 404 fi 405done 406 407echo "Bundling Catalyst targets..." 408 409mkdir -p "${PREFIX}/catalyst/lib" 410cp -a "${CATALYST_X86_64_PREFIX}/include" "${PREFIX}/catalyst/" 411for ext in a dylib; do 412 if [ ! -f "${CATALYST_X86_64_PREFIX}/lib/libsodium.${ext}" ]; then 413 continue 414 fi 415 if [ "$APPLE_SILICON_SUPPORTED" = "true" ]; then 416 lipo -create \ 417 "${CATALYST_ARM64_PREFIX}/lib/libsodium.${ext}" \ 418 "${CATALYST_X86_64_PREFIX}/lib/libsodium.${ext}" \ 419 -output "${PREFIX}/catalyst/lib/libsodium.${ext}" 420 else 421 lipo -create \ 422 "${CATALYST_X86_64_PREFIX}/lib/libsodium.${ext}" \ 423 -output "${PREFIX}/catalyst/lib/libsodium.${ext}" 424 fi 425done 426 427echo "Creating Clibsodium.xcframework..." 428 429rm -rf "${PREFIX}/Clibsodium.xcframework" 430 431XCFRAMEWORK_ARGS="" 432for f in macos ios ios-simulators watchos watchos-simulators tvos tvos-simulators catalyst; do 433 XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -library ${PREFIX}/${f}/lib/libsodium.a" 434 XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -headers ${PREFIX}/${f}/include" 435done 436xcodebuild -create-xcframework \ 437 ${XCFRAMEWORK_ARGS} \ 438 -output "${PREFIX}/Clibsodium.xcframework" >/dev/null 439 440ls -ld -- "$PREFIX" 441ls -l -- "$PREFIX" 442ls -l -- "$PREFIX/Clibsodium.xcframework" 443 444echo "Done!" 445 446# Cleanup 447rm -rf -- "$PREFIX/tmp" 448make distclean >/dev/null 449