diff --git a/dist-build/Makefile.am b/dist-build/Makefile.am index 72957de3..a505400b 100644 --- a/dist-build/Makefile.am +++ b/dist-build/Makefile.am @@ -9,7 +9,7 @@ EXTRA_DIST = \ android-x86.sh \ android-x86_64.sh \ emscripten.sh \ - ios-xcframework.sh \ + apple-xcframework.sh \ macos.sh \ msys2-win32.sh \ msys2-win64.sh \ diff --git a/dist-build/ios-xcframework.sh b/dist-build/apple-xcframework.sh similarity index 85% rename from dist-build/ios-xcframework.sh rename to dist-build/apple-xcframework.sh index 1d3803aa..f267230a 100755 --- a/dist-build/ios-xcframework.sh +++ b/dist-build/apple-xcframework.sh @@ -1,6 +1,8 @@ #! /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" @@ -15,6 +17,7 @@ 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"} @@ -42,6 +45,31 @@ swift_module_map() { echo '}' } +build_macos() { + export BASEDIR="${XCODEDIR}/Platforms/MacOSX.platform/Developer" + export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" + + ## macOS arm64 + if [ "$(arch)" = "arm64" ]; then + export CFLAGS="-O2 -arch arm64 -mmacosx-version-min=${MACOS_VERSION_MIN}" + export LDFLAGS="-arch arm64 -mmacosx-version-min=${MACOS_VERSION_MIN}" + + make distclean >/dev/null 2>&1 + ./configure --host=arm-apple-darwin20 --prefix="$MACOS_ARM64_PREFIX" \ + ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 + make -j${PROCESSORS} install || exit 1 + fi + + ## macOS x86_64 + export CFLAGS="-O2 -arch x86_64 -mmacosx-version-min=${MACOS_VERSION_MIN}" + export LDFLAGS="-arch x86_64 -mmacosx-version-min=${MACOS_VERSION_MIN}" + + make distclean >/dev/null 2>&1 + ./configure --host=x86_64-apple-darwin10 --prefix="$MACOS_X86_64_PREFIX" \ + ${LIBSODIUM_ENABLE_MINIMAL_FLAG} || exit 1 + make -j${PROCESSORS} install || exit 1 +} + build_ios() { export BASEDIR="${XCODEDIR}/Platforms/iPhoneOS.platform/Developer" export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" @@ -174,6 +202,8 @@ build_catalyst() { } mkdir -p "${PREFIX}/tmp" +echo "Building for macOS..." +build_macos >"$LOG_FILE" 2>&1 || exit 1 echo "Building for iOS..." build_ios >"$LOG_FILE" 2>&1 || exit 1 echo "Building for the iOS simulator..." @@ -191,6 +221,23 @@ find "$PREFIX" -name "include" -type d -print | while read -r f; do swift_module_map >"${f}/module.modulemap" done +echo "Bundling macOS targets..." + +mkdir -p "${PREFIX}/macos/lib" +cp -a "${MACOS_X86_64_PREFIX}/include" "${PREFIX}/macos/" +for ext in a dylib; do + if [ "$(arch)" = "arm64" ]; then + lipo -create \ + "${MACOS_ARM64_PREFIX}/lib/libsodium.${ext}" \ + "${MACOS_X86_64_PREFIX}/lib/libsodium.${ext}" \ + -output "${PREFIX}/macos/lib/libsodium.${ext}" + else + lipo -create \ + "${MACOS_X86_64_PREFIX}/lib/libsodium.${ext}" \ + -output "${PREFIX}/macos/lib/libsodium.${ext}" + fi +done + echo "Bundling iOS targets..." mkdir -p "${PREFIX}/ios/lib" @@ -258,7 +305,7 @@ echo "Creating Clibsodium.xcframework..." rm -rf "${PREFIX}/Clibsodium.xcframework" XCFRAMEWORK_ARGS="" -for f in ios ios-simulators watchos watchos-simulators catalyst; do +for f in macos ios ios-simulators watchos watchos-simulators catalyst; do XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -library ${PREFIX}/${f}/lib/libsodium.a" XCFRAMEWORK_ARGS="${XCFRAMEWORK_ARGS} -headers ${PREFIX}/${f}/include" done