summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCzarek Nakamoto <cyjan@mrcyjanek.net>2024-06-18 18:05:40 +0200
committerCzarek Nakamoto <cyjan@mrcyjanek.net>2024-06-18 18:05:40 +0200
commit7d1950dbd5c65976c739fc1b1100767f21af58e7 (patch)
treee06dec3baf40d0637bfe01bd1b48fdd15bad44f0
parent21e05d6ef33aa3fc6e2550da3b2200d3bcedfc35 (diff)
improve ios build
-rwxr-xr-xexternal/ios/build_sodium.sh2
-rwxr-xr-xexternal/ios/build_unbound.sh2
-rwxr-xr-xexternal/ios/build_zmq.sh2
-rwxr-xr-xexternal/ios/libsodium_apple-ios.sh145
4 files changed, 148 insertions, 3 deletions
diff --git a/external/ios/build_sodium.sh b/external/ios/build_sodium.sh
index e4a3bb0..fb45e17 100755
--- a/external/ios/build_sodium.sh
+++ b/external/ios/build_sodium.sh
@@ -29,7 +29,7 @@ else
exit 1
fi
-./dist-build/apple-xcframework.sh
+../../../../libsodium_apple-ios.sh
mv -f ${SODIUM_PATH}/libsodium-apple/ios/include/* $EXTERNAL_IOS_INCLUDE_DIR
mv -f ${SODIUM_PATH}/libsodium-apple/ios/lib/* $EXTERNAL_IOS_LIB_DIR \ No newline at end of file
diff --git a/external/ios/build_unbound.sh b/external/ios/build_unbound.sh
index 02f12d7..889f79a 100755
--- a/external/ios/build_unbound.sh
+++ b/external/ios/build_unbound.sh
@@ -41,5 +41,5 @@ source ./contrib/ios/setenv_ios.sh
./contrib/ios/install_tools.sh
./contrib/ios/install_expat.sh
./configure --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" --prefix="$IOS_PREFIX" --with-ssl="$IOS_PREFIX" --with-libexpat="$IOS_PREFIX"
-make
+make -j$(sysctl -n hw.logicalcpu)
make install \ No newline at end of file
diff --git a/external/ios/build_zmq.sh b/external/ios/build_zmq.sh
index bb583d1..d34cc6e 100755
--- a/external/ios/build_zmq.sh
+++ b/external/ios/build_zmq.sh
@@ -31,7 +31,7 @@ fi
mkdir -p cmake-build
cd cmake-build
cmake ..
-make
+make -j$(sysctl -n hw.logicalcpu)
cp ${ZMQ_PATH}/include/* $EXTERNAL_IOS_INCLUDE_DIR
diff --git a/external/ios/libsodium_apple-ios.sh b/external/ios/libsodium_apple-ios.sh
new file mode 100755
index 0000000..8a47a16
--- /dev/null
+++ b/external/ios/libsodium_apple-ios.sh
@@ -0,0 +1,145 @@
+#! /bin/sh
+
+export PREFIX="$(pwd)/libsodium-apple"
+export MACOS_ARM64_PREFIX="${PREFIX}/tmp/macos-arm64"
+export MACOS_X86_64_PREFIX="${PREFIX}/tmp/macos-x86_64"
+export IOS32_PREFIX="${PREFIX}/tmp/ios32"
+export IOS32s_PREFIX="${PREFIX}/tmp/ios32s"
+export IOS64_PREFIX="${PREFIX}/tmp/ios64"
+export IOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/ios-simulator-arm64"
+export IOS_SIMULATOR_I386_PREFIX="${PREFIX}/tmp/ios-simulator-i386"
+export IOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/ios-simulator-x86_64"
+export WATCHOS32_PREFIX="${PREFIX}/tmp/watchos32"
+export WATCHOS64_32_PREFIX="${PREFIX}/tmp/watchos64_32"
+export WATCHOS64_PREFIX="${PREFIX}/tmp/watchos64"
+export WATCHOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/watchos-simulator-arm64"
+export WATCHOS_SIMULATOR_I386_PREFIX="${PREFIX}/tmp/watchos-simulator-i386"
+export WATCHOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/watchos-simulator-x86_64"
+export TVOS_PREFIX="${PREFIX}/tmp/tvos"
+export TVOS_SIMULATOR_ARM64_PREFIX="${PREFIX}/tmp/tvos-simulator-arm64"
+export TVOS_SIMULATOR_X86_64_PREFIX="${PREFIX}/tmp/tvos-simulator-x86_64"
+export VISIONOS_PREFIX="${PREFIX}/tmp/visionos"
+export VISIONOS_SIMULATOR_PREFIX="${PREFIX}/tmp/visionos-simulator"
+export CATALYST_ARM64_PREFIX="${PREFIX}/tmp/catalyst-arm64"
+export CATALYST_X86_64_PREFIX="${PREFIX}/tmp/catalyst-x86_64"
+export LOG_FILE="${PREFIX}/tmp/build_log"
+export XCODEDIR="$(xcode-select -p)"
+
+export MACOS_VERSION_MIN=${MACOS_VERSION_MIN-"10.10"}
+export IOS_SIMULATOR_VERSION_MIN=${IOS_SIMULATOR_VERSION_MIN-"9.0.0"}
+export IOS_VERSION_MIN=${IOS_VERSION_MIN-"9.0.0"}
+export WATCHOS_SIMULATOR_VERSION_MIN=${WATCHOS_SIMULATOR_VERSION_MIN-"4.0.0"}
+export WATCHOS_VERSION_MIN=${WATCHOS_VERSION_MIN-"4.0.0"}
+export TVOS_SIMULATOR_VERSION_MIN=${TVOS_SIMULATOR_VERSION_MIN-"9.0.0"}
+export TVOS_VERSION_MIN=${TVOS_VERSION_MIN-"9.0.0"}
+
+echo
+echo "Warnings related to headers being present but not usable are due to functions"
+echo "that didn't exist in the specified minimum iOS version level."
+echo "They can be safely ignored."
+echo
+echo "Define the LIBSODIUM_FULL_BUILD environment variable to build the full"
+echo "library (including all deprecated/undocumented/low-level functions)."
+echo
+echo "Define the LIBSODIUM_SKIP_SIMULATORS environment variable to skip building"
+echo "the simulators libraries (iOS, watchOS, tvOS, visionOS simulators)."
+echo
+
+if [ -z "$LIBSODIUM_FULL_BUILD" ]; then
+ export LIBSODIUM_ENABLE_MINIMAL_FLAG="--enable-minimal"
+else
+ export LIBSODIUM_ENABLE_MINIMAL_FLAG=""
+fi
+
+APPLE_SILICON_SUPPORTED=false
+echo 'int main(void){return 0;}' >comptest.c && cc --target=arm64-macos comptest.c 2>/dev/null && APPLE_SILICON_SUPPORTED=true
+rm -f comptest.c
+
+NPROCESSORS=$(getconf NPROCESSORS_ONLN 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)
+PROCESSORS=${NPROCESSORS:-3}
+
+swift_module_map() {
+ echo 'module Clibsodium {'
+ echo ' header "sodium.h"'
+ echo ' export *'
+ echo '}'
+}
+
+build_ios() {
+ export BASEDIR="${XCODEDIR}/Platforms/iPhoneOS.platform/Developer"
+ export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH"
+ export SDK="${BASEDIR}/SDKs/iPhoneOS.sdk"
+
+ ## 32-bit iOS
+ export CFLAGS="-O2 -mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
+ export LDFLAGS="-mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
+
+ make distclean >/dev/null 2>&1
+ ./configure --host=arm-apple-darwin10 --prefix="$IOS32_PREFIX" \
+ ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1
+ make -j${PROCESSORS} install || exit 1
+
+ ## 32-bit armv7s iOS
+ export CFLAGS="-O2 -mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
+ export LDFLAGS="-mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
+
+ make distclean >/dev/null 2>&1
+ ./configure --host=arm-apple-darwin10 --prefix="$IOS32s_PREFIX" \
+ ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1
+ make -j${PROCESSORS} install || exit 1
+
+ ## 64-bit iOS
+ export CFLAGS="-O2 -arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
+ export LDFLAGS="-arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
+
+ make distclean >/dev/null 2>&1
+ ./configure --host=arm-apple-darwin10 --prefix="$IOS64_PREFIX" \
+ ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1
+ make -j${PROCESSORS} install || exit 1
+}
+
+mkdir -p "${PREFIX}/tmp"
+
+echo "Building for iOS..."
+build_ios >"$LOG_FILE" 2>&1 || exit 1
+
+echo "Adding the Clibsodium module map for Swift..."
+
+find "$PREFIX" -name "include" -type d -print | while read -r f; do
+ swift_module_map >"${f}/module.modulemap"
+done
+
+echo "Bundling iOS targets..."
+
+mkdir -p "${PREFIX}/ios/lib"
+cp -a "${IOS64_PREFIX}/include" "${PREFIX}/ios/"
+for ext in a dylib; do
+ lipo -create \
+ "$IOS32_PREFIX/lib/libsodium.${ext}" \
+ "$IOS32s_PREFIX/lib/libsodium.${ext}" \
+ "$IOS64_PREFIX/lib/libsodium.${ext}" \
+ -output "$PREFIX/ios/lib/libsodium.${ext}"
+done
+
+echo "Creating Clibsodium.xcframework..."
+
+rm -rf "${PREFIX}/Clibsodium.xcframework"
+
+XCFRAMEWORK_ARGS=""
+for f in ios; do
+ XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -library ${PREFIX}/${f}/lib/libsodium.a"
+ XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -headers ${PREFIX}/${f}/include"
+done
+xcodebuild -create-xcframework \
+ ${XCFRAMEWORK_ARGS} \
+ -output "${PREFIX}/Clibsodium.xcframework" >/dev/null
+
+ls -ld -- "$PREFIX"
+ls -l -- "$PREFIX"
+ls -l -- "$PREFIX/Clibsodium.xcframework"
+
+echo "Done!"
+
+# Cleanup
+rm -rf -- "$PREFIX/tmp"
+make distclean >/dev/null