From ab3f2bc5e68279e53166adab5efd4377ce80a9ec Mon Sep 17 00:00:00 2001 From: Nicola Ferruzzi Date: Thu, 11 Jan 2024 08:33:46 +0100 Subject: [PATCH] Add support for XROS (aka visionOS) (#53) Co-authored-by: Davide De Rosa --- assets/XROS/Info.plist | 24 ++++++++++++++++++++++++ assets/XRSimulator | 1 + build-libssl.sh | 28 ++++++++++++++++++++++++++++ config/20-all-platforms.conf | 27 +++++++++++++++++++++++++++ create-openssl-framework.sh | 6 +++++- scripts/build-loop-targets.sh | 7 +++++++ 6 files changed, 92 insertions(+), 1 deletion(-) create mode 100755 assets/XROS/Info.plist create mode 120000 assets/XRSimulator diff --git a/assets/XROS/Info.plist b/assets/XROS/Info.plist new file mode 100755 index 0000000..0cd9882 --- /dev/null +++ b/assets/XROS/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + openssl + CFBundleIdentifier + org.openssl.OpenSSL + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + openssl + CFBundlePackageType + FMWK + CFBundleShortVersionString + $(OPENSSL_VERSION) + CFBundleVersion + 1 + MinimumOSVersion + $(MIN_SDK_VERSION) + + diff --git a/assets/XRSimulator b/assets/XRSimulator new file mode 120000 index 0000000..21c4b9f --- /dev/null +++ b/assets/XRSimulator @@ -0,0 +1 @@ +XROS \ No newline at end of file diff --git a/build-libssl.sh b/build-libssl.sh index 14596bf..ac34b4d 100755 --- a/build-libssl.sh +++ b/build-libssl.sh @@ -34,6 +34,7 @@ macos64-x86_64 macos64-arm64 mac-catalyst-x86_64 mac-catalyst-arm64 watchos-cross-armv7k watchos-cross-arm64_32 watchos-sim-cross-x86_64 watchos-sim-cross-i386 watchos-sim-cross-arm64 tvos-sim-cross-x86_64 tvos-sim-cross-arm64 tvos-cross-arm64 +xros-sim-cross-arm64 xros-cross-arm64 TARGETS` # Minimum iOS/tvOS SDK version to build for @@ -42,6 +43,7 @@ MACOS_MIN_SDK_VERSION="10.14" CATALYST_MIN_SDK_VERSION="10.14" WATCHOS_MIN_SDK_VERSION="4.0" TVOS_MIN_SDK_VERSION="12.0" +XROS_MIN_SDK_VERSION="1.0" # Init optional env variables (use available variable or default to empty string) CURL_OPTIONS="${CURL_OPTIONS:-}" @@ -60,6 +62,7 @@ echo_help() echo " --catalyst-sdk=SDKVERSION Override macOS SDK version for Catalyst" echo " --watchos-sdk=SDKVERSION Override watchOS SDK version" echo " --tvos-sdk=SDKVERSION Override tvOS SDK version" + echo " --xros-sdk=SDKVERSION Override xrOS SDK version" echo " --min-ios-sdk=SDKVERSION Set minimum iOS SDK version (default: $IOS_MIN_SDK_VERSION)" echo " --min-macos-sdk=SDKVERSION Set minimum macOS SDK version (default: $MACOS_MIN_SDK_VERSION)" echo " --min-watchos-sdk=SDKVERSION Set minimum watchOS SDK version (default: $WATCHOS_MIN_SDK_VERSION)" @@ -180,6 +183,14 @@ finish_build_loop() else OPENSSLCONF_SUFFIX="ios_${ARCH}" fi + elif [[ "${PLATFORM}" == XR* ]]; then + LIBSSL_XROS+=("${TARGETDIR}/lib/libssl.a") + LIBCRYPTO_XROS+=("${TARGETDIR}/lib/libcrypto.a") + if [[ "${PLATFORM}" == XRSimulator* ]]; then + OPENSSLCONF_SUFFIX="xros_sim_${ARCH}" + else + OPENSSLCONF_SUFFIX="xros_${ARCH}" + fi elif [[ "${PLATFORM}" == Watch* ]]; then LIBSSL_WATCHOS+=("${TARGETDIR}/lib/libssl.a") LIBCRYPTO_WATCHOS+=("${TARGETDIR}/lib/libcrypto.a") @@ -243,6 +254,7 @@ MACOS_SDKVERSION="" CATALYST_SDKVERSION="" WATCHOS_SDKVERSION="" TVOS_SDKVERSION="" +XROS_SDKVERSION="" LOG_VERBOSE="" PARALLEL="" TARGETS="" @@ -305,6 +317,10 @@ case $i in TVOS_MIN_SDK_VERSION="${i#*=}" shift ;; + --min-xros-sdk=*) + XROS_MIN_SDK_VERSION="${i#*=}" + shift + ;; --noparallel) PARALLEL="false" ;; @@ -392,6 +408,9 @@ fi if [ ! -n "${TVOS_SDKVERSION}" ]; then TVOS_SDKVERSION=$(xcrun -sdk appletvos --show-sdk-version) fi +if [ ! -n "${XROS_SDKVERSION}" ]; then + XROS_SDKVERSION=$(xcrun -sdk xros --show-sdk-version) +fi # Truncate to minor version MINOR_VERSION=(${MACOS_SDKVERSION//./ }) @@ -446,6 +465,7 @@ echo " macOS SDK: ${MACOS_SDKVERSION} (min ${MACOS_MIN_SDK_VERSION})" echo " macOS SDK (Catalyst): ${CATALYST_SDKVERSION} (min ${CATALYST_MIN_SDK_VERSION})" echo " watchOS SDK: ${WATCHOS_SDKVERSION} (min ${WATCHOS_MIN_SDK_VERSION})" echo " tvOS SDK: ${TVOS_SDKVERSION} (min ${TVOS_MIN_SDK_VERSION})" +echo " xrOS SDK: ${XROS_SDKVERSION} (min ${XROS_MIN_SDK_VERSION})" if [ "${CONFIG_DISABLE_BITCODE}" == "true" ]; then echo " Bitcode embedding disabled" fi @@ -547,6 +567,8 @@ LIBSSL_WATCHOS=() LIBCRYPTO_WATCHOS=() LIBSSL_TVOS=() LIBCRYPTO_TVOS=() +LIBSSL_XROS=() +LIBCRYPTO_XROS=() source "${SCRIPTDIR}/scripts/build-loop-targets.sh" @@ -619,6 +641,12 @@ if [ ${#OPENSSLCONF_ALL[@]} -gt 1 ]; then *_tvos_sim_x86_64.h) DEFINE_CONDITION="TARGET_OS_TV && TARGET_OS_SIMULATOR && TARGET_CPU_X86_64" ;; + *_xros_sim_arm64.h) + DEFINE_CONDITION="TARGET_OS_VISION && TARGET_OS_SIMULATOR && TARGET_CPU_ARM64" + ;; + *_xros_arm64.h) + DEFINE_CONDITION="TARGET_OS_VISION && TARGET_CPU_ARM64" + ;; *) # Don't run into unexpected cases by setting the default condition to false DEFINE_CONDITION="0" diff --git a/config/20-all-platforms.conf b/config/20-all-platforms.conf index 097f929..c29e48f 100644 --- a/config/20-all-platforms.conf +++ b/config/20-all-platforms.conf @@ -38,6 +38,11 @@ my %targets = (); cflags => add(sub { defined($ENV{'TVOS_MIN_SDK_VERSION'}) ? '-mtvos-version-min=$(TVOS_MIN_SDK_VERSION)' : '-mtvos-version-min=12.0'; }), defines => [ "HAVE_FORK=0" ], }, + "xros-cross-base" => { + inherit_from => [ "all-base" ], + template => 1, + # cflags => add(sub { defined($ENV{'XROS_MIN_SDK_VERSION'}) ? '-mxros-version-min=$(XROS_MIN_SDK_VERSION)' : '-mxros-version-min=1.0'; }), + }, ## Apple iOS @@ -151,4 +156,26 @@ my %targets = (); inherit_from => [ "darwin64-x86_64-cc", "tvos-cross-base" ], sys_id => "tvOS", }, + + ## Vision OS + + # Device + "xros-cross-arm64" => { + inherit_from => [ "darwin64-arm64-cc", "xros-cross-base" ], + cflags => add("-arch arm64"), + bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", + sys_id => "xros", + }, + # Simulator + "xros-sim-cross-arm64" => { + inherit_from => [ "darwin64-arm64-cc", "xros-cross-base" ], + cflags => add("-arch arm64"), + bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", + sys_id => "xros", + }, + "xros-sim-cross-x86_64" => { + inherit_from => [ "darwin64-x86_64-cc", "xros-cross-base" ], + sys_id => "xros", + }, + ); diff --git a/create-openssl-framework.sh b/create-openssl-framework.sh index 7641d9a..c2dab89 100755 --- a/create-openssl-framework.sh +++ b/create-openssl-framework.sh @@ -17,7 +17,7 @@ if [ -d $FWROOT ]; then fi #ALL_SYSTEMS=("iPhone" "AppleTV" "MacOSX" "Catalyst" "Watch") -ALL_SYSTEMS=("iPhoneOS" "iPhoneSimulator" "AppleTVOS" "AppleTVSimulator" "MacOSX" "Catalyst" "WatchOS" "WatchSimulator") +ALL_SYSTEMS=("iPhoneOS" "iPhoneSimulator" "AppleTVOS" "AppleTVSimulator" "MacOSX" "Catalyst" "WatchOS" "WatchSimulator" "XROS" "XRSimulator") # Inspect Mach-O load commands to get minimum SDK version. # @@ -123,6 +123,10 @@ for TARGETDIR in `ls -d *.sdk`; do MIN_SDK="-platform_version watchos $MIN_SDK_VERSION $SDKVERSION" elif [[ $PLATFORM == WatchSimulator* ]]; then MIN_SDK="-platform_version watchos-simulator $MIN_SDK_VERSION $SDKVERSION" + elif [[ $PLATFORM == XRSimulator* ]]; then + MIN_SDK="-platform_version xros-simulator $MIN_SDK_VERSION $SDKVERSION" + elif [[ $PLATFORM == XR* ]]; then + MIN_SDK="-platform_version xros $MIN_SDK_VERSION $SDKVERSION" else MIN_SDK="-platform_version ios $MIN_SDK_VERSION $SDKVERSION" fi diff --git a/scripts/build-loop-targets.sh b/scripts/build-loop-targets.sh index d57bac2..81a6ce8 100755 --- a/scripts/build-loop-targets.sh +++ b/scripts/build-loop-targets.sh @@ -30,6 +30,8 @@ do SDKVERSION="${WATCHOS_SDKVERSION}" elif [[ "${TARGET}" == tvos* ]]; then SDKVERSION="${TVOS_SDKVERSION}" + elif [[ "${TARGET}" == xr* ]]; then + SDKVERSION="${XROS_SDKVERSION}" else SDKVERSION="${IOS_SDKVERSION}" fi @@ -41,6 +43,7 @@ do export CATALYST_MIN_SDK_VERSION export WATCHOS_MIN_SDK_VERSION export TVOS_MIN_SDK_VERSION + export XROS_MIN_SDK_VERSION export CONFIG_DISABLE_BITCODE # Determine platform @@ -61,6 +64,10 @@ do PLATFORM="AppleTVOS" elif [[ "${TARGET}" == "ios-sim-cross-"* ]]; then PLATFORM="iPhoneSimulator" + elif [[ "${TARGET}" == "xros-sim-cross"* ]]; then + PLATFORM="XRSimulator" + elif [[ "${TARGET}" == "xros"* ]]; then + PLATFORM="XROS" else PLATFORM="iPhoneOS" fi