Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
runs-on: macOS-latest
strategy:
matrix:
target: [ "iOS", "tvOS", "watchOS" ]
target: [ "iOS", "tvOS", "watchOS", "visionOS" ]
steps:
- name: Checkout
uses: actions/[email protected]
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
BUILD_NUMBER: ${{ steps.build-vars.outputs.BUILD_NUMBER }}
strategy:
matrix:
target: [ "iOS", "tvOS", "watchOS" ]
target: [ "iOS", "tvOS", "watchOS", "visionOS" ]
steps:
- name: Checkout
uses: actions/[email protected]
Expand Down
15 changes: 14 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,38 @@
# - iOS - build everything for iOS
# - tvOS - build everything for tvOS
# - watchOS - build everything for watchOS
# - visionOS - build everything for visionOS
# - BZip2 - build BZip2 for all platforms
# - BZip2-iOS - build BZip2 for iOS
# - BZip2-tvOS - build BZip2 for tvOS
# - BZip2-watchOS - build BZip2 for watchOS
# - BZip2-visionOS - build BZip2 for visionOS
# - XZ - build XZ for all platforms
# - XZ-iOS - build XZ for iOS
# - XZ-tvOS - build XZ for tvOS
# - XZ-watchOS - build XZ for watchOS
# - XZ-xrOS - build XZ for xrOS
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# - XZ-xrOS - build XZ for xrOS
# - XZ-visionOS - build XZ for visionOS

More generally, there's an indentation issue across these comments - the - build... comments should all be aligned.

# - OpenSSL - build OpenSSL for all platforms
# - OpenSSL-iOS - build OpenSSL for iOS
# - OpenSSL-tvOS - build OpenSSL for tvOS
# - OpenSSL-watchOS - build OpenSSL for watchOS
# - OpenSSL-visionOS- build OpenSSL for visionOS
# - mpdecimal - build mpdecimal for all platforms
# - mpdecimal-iOS - build mpdecimal for iOS
# - mpdecimal-tvOS - build mpdecimal for tvOS
# - mpdecimal-watchOS - build mpdecimal for watchOS
# - mpdecimal-visionOS- build mpdecimal for visionOS
# - libFFI-iOS - build libFFI for iOS
# - libFFI-tvOS - build libFFI for tvOS
# - libFFI-watchOS - build libFFI for watchOS
# - libFFI-visionOS - build libFFI for visionOS

# Current directory
PROJECT_DIR=$(shell pwd)

# Supported OS and products
PRODUCTS=BZip2 XZ OpenSSL libFFI
OS_LIST=iOS tvOS watchOS
OS_LIST=iOS tvOS watchOS visionOS

# The versions to compile by default.
# In practice, these should be
Expand Down Expand Up @@ -73,6 +79,12 @@ VERSION_MIN-watchOS=4.0
CFLAGS-watchOS=-mwatchos-version-min=$(VERSION_MIN-watchOS)
PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no

# visionOS targets
TARGETS-visionOS=xrsimulator.arm64 xros.arm64
VERSION_MIN-visionOS=2.0
# Apple made lives harder by NOT having a -version-min flag
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Apple made lives harder by NOT having a -version-min flag
# visionOS doesn't expose -mxros-version-min or similar; it uses the version
# number in the -target triple, or a definition like:
# CFLAGS-visionOS=-arch arm64 -mtargetos=xros$(VERSION_MIN-visionOS)
# For consistency with existing tooling, we use the -target form.

PYTHON_CONFIGURE-xrOS=ac_cv_func_sigaltstack=no
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This variable won't be used as-defined... which does raise the question of whether it is needed at all.

Suggested change
PYTHON_CONFIGURE-xrOS=ac_cv_func_sigaltstack=no
PYTHON_CONFIGURE-visionOS=ac_cv_func_sigaltstack=no


# The architecture of the machine doing the build
HOST_ARCH=$(shell uname -m)

Expand Down Expand Up @@ -550,6 +562,7 @@ $$(LIBFFI_SRCDIR-$(os))/darwin_common/include/ffi.h: downloads/libffi-$(LIBFFI_V
@echo ">>> Unpack and configure libFFI sources on $(os)"
mkdir -p $$(LIBFFI_SRCDIR-$(os))
tar zxf $$< --strip-components 1 -C $$(LIBFFI_SRCDIR-$(os))
cd $$(LIBFFI_SRCDIR-$(os)) && patch -p1 < $(PROJECT_DIR)/patch/libffi.patch
# Configure the build
cd $$(LIBFFI_SRCDIR-$(os)) && \
python3 generate-darwin-source-and-headers.py --only-$(shell echo $(os) | tr '[:upper:]' '[:lower:]') \
Expand Down
94 changes: 94 additions & 0 deletions patch/libffi.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
diff -ur libffi-3.4.7 2/config.sub libffi-3.4.7/config.sub
--- libffi-3.4.7 2/config.sub 2024-12-13 04:38:19
+++ libffi-3.4.7/config.sub 2025-04-12 17:44:40
@@ -1742,7 +1742,7 @@
| hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
| sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
| hiux* | abug | nacl* | netware* | windows* \
- | os9* | macos* | osx* | ios* | tvos* | watchos* \
+ | os9* | macos* | osx* | ios* | tvos* | watchos* | xros* | visionos* \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
+ | os9* | macos* | osx* | ios* | tvos* | watchos* | xros* | visionos* \
+ | os9* | macos* | osx* | ios* | tvos* | watchos* | xros* \

| mpw* | magic* | mmixware* | mon960* | lnews* \
| amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
| aos* | aros* | cloudabi* | sortix* | twizzler* \
@@ -1864,7 +1864,7 @@
;;
os2-emx-)
;;
- ios*-simulator* | tvos*-simulator* | watchos*-simulator*)
+ ios*-simulator* | tvos*-simulator* | watchos*-simulator* | xros*-simulator* | visionos*-simulator*)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
+ ios*-simulator* | tvos*-simulator* | watchos*-simulator* | xros*-simulator* | visionos*-simulator*)
+ ios*-simulator* | tvos*-simulator* | watchos*-simulator* | xros*-simulator*)

;;
*-eabi*- | *-gnueabi*-)
;;
diff -ur libffi-3.4.7 2/generate-darwin-source-and-headers.py libffi-3.4.7/generate-darwin-source-and-headers.py
--- libffi-3.4.7 2/generate-darwin-source-and-headers.py 2024-06-01 12:42:02
+++ libffi-3.4.7/generate-darwin-source-and-headers.py 2025-04-12 18:02:51
@@ -152,8 +152,22 @@
sdk = 'watchos'
arch = 'arm64_32'
version_min = '-mwatchos-version-min=4.0'
+
+class visionos_simulator_arm64_platform(arm64_platform):
+ target = 'arm64-apple-visionos-simulator'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
+ target = 'arm64-apple-visionos-simulator'
+ target = 'arm64-apple-xros2.0-simulator'

+ directory = 'darwin_visionos'
+ sdk = 'xrsimulator'
+ version_min = ''
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For consistency, my inlination here would be to enforce visionOS 2.0 as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see above.



+class visionos_device_arm64_platform(arm64_platform):
+ target = 'arm64-apple-visionos'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
+ target = 'arm64-apple-visionos'
+ target = 'arm64-apple-xros2.0'

I'd also leave a comment against version_min (in both configs) indicating that the minimum version is defined by the target triple.

+ directory = 'darwin_visionos'
+ sdk = 'xros'
+ arch = 'arm64'
+ version_min = ''
+
+
def mkdir_p(path):
try:
os.makedirs(path)
@@ -243,6 +257,7 @@
generate_ios=True,
generate_tvos=True,
generate_watchos=True,
+ generate_visionos=True
):
copy_files('src', 'darwin_common/src', pattern='*.c')
copy_files('include', 'darwin_common/include', pattern='*.h')
@@ -266,6 +281,9 @@
copy_src_platform_files(watchos_simulator_arm64_platform)
copy_src_platform_files(watchos_device_armv7k_platform)
copy_src_platform_files(watchos_device_arm64_32_platform)
+ if generate_visionos:
+ copy_src_platform_files(visionos_simulator_arm64_platform)
+ copy_src_platform_files(visionos_device_arm64_platform)

platform_headers = collections.defaultdict(set)

@@ -288,6 +306,9 @@
build_target(watchos_simulator_arm64_platform, platform_headers)
build_target(watchos_device_armv7k_platform, platform_headers)
build_target(watchos_device_arm64_32_platform, platform_headers)
+ if generate_visionos:
+ build_target(visionos_simulator_arm64_platform, platform_headers)
+ build_target(visionos_device_arm64_platform, platform_headers)

mkdir_p('darwin_common/include')
for header_name, tag_tuples in platform_headers.items():
@@ -302,11 +323,13 @@
parser.add_argument('--only-osx', action='store_true', default=False)
parser.add_argument('--only-tvos', action='store_true', default=False)
parser.add_argument('--only-watchos', action='store_true', default=False)
+ parser.add_argument('--only-visionos', action='store_true', default=False)
args = parser.parse_args()

generate_source_and_headers(
- generate_osx=not args.only_ios and not args.only_tvos and not args.only_watchos,
- generate_ios=not args.only_osx and not args.only_tvos and not args.only_watchos,
- generate_tvos=not args.only_ios and not args.only_osx and not args.only_watchos,
- generate_watchos=not args.only_ios and not args.only_osx and not args.only_tvos,
+ generate_osx=not args.only_ios and not args.only_tvos and not args.only_watchos and not args.only_visionos,
+ generate_ios=not args.only_osx and not args.only_tvos and not args.only_watchos and not args.only_visionos,
+ generate_tvos=not args.only_ios and not args.only_osx and not args.only_watchos and not args.only_visionos,
+ generate_watchos=not args.only_ios and not args.only_osx and not args.only_tvos and not args.only_visionos,
+ generate_visionos=not args.only_ios and not args.only_osx and not args.only_tvos and not args.only_watchos,
)

7 changes: 6 additions & 1 deletion patch/mpdecimal.patch
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,17 @@ diff -ur mpdecimal-4.0.0-orig/config.sub mpdecimal-4.0.0/config.sub
cpu=aarch64
;;

@@ -1713,3 +1713,3 @@
| hiux* | abug | nacl* | netware* | windows* \
- | os9* | macos* | osx* | ios* | tvos* | watchos* \
+ | os9* | macos* | osx* | ios* | tvos* | watchos* | xros* | visionos* \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
+ | os9* | macos* | osx* | ios* | tvos* | watchos* | xros* | visionos* \
+ | os9* | macos* | osx* | ios* | tvos* | watchos* | xros* \

| mpw* | magic* | mmixware* | mon960* | lnews* \
@@ -1792,6 +1792,8 @@
os2-emx)
;;
*-eabi* | *-gnueabi*)
+ ;;
+ ios*-simulator | tvos*-simulator | watchos*-simulator)
+ ios*-simulator | tvos*-simulator | watchos*-simulator | xros*-simulator | visionos*-simulator)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
+ ios*-simulator | tvos*-simulator | watchos*-simulator | xros*-simulator | visionos*-simulator)
+ ios*-simulator | tvos*-simulator | watchos*-simulator | xros*-simulator)

;;
none-coff* | none-elf*)
# None (no kernel, i.e. freestanding / bare metal),
6 changes: 5 additions & 1 deletion patch/xz.patch
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,16 @@ diff -ru xz-5.4.7-orig/build-aux/config.sub xz-5.4.7/build-aux/config.sub
cpu=aarch64
;;

@@ -2150,2 +2150,3 @@
| xray* \
+ | xros* | visionos* \
| zephyr* \
@@ -1865,6 +1865,8 @@
os2-emx-)
;;
*-eabi*- | *-gnueabi*-)
+ ;;
+ ios*-simulator- | tvos*-simulator- | watchos*-simulator- )
+ ios*-simulator- | tvos*-simulator- | watchos*-simulator- | xros*-simulator- | visionos*-simulator- )
;;
none--*)
# None (no kernel, i.e. freestanding / bare metal),