Skip to content

Commit bf3fe44

Browse files
authored
Merge pull request #1 from asavva-2016/add-maccatalyst-support
Add maccatalyst support
2 parents 27e4461 + 6d57ba7 commit bf3fe44

File tree

2 files changed

+181
-10
lines changed

2 files changed

+181
-10
lines changed

Makefile

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ BUILD_NUMBER=custom
4040

4141
BZIP2_VERSION=1.0.8
4242

43-
XZ_VERSION=5.6.2
43+
XZ_VERSION=5.6.3
4444

4545
# Preference is to use OpenSSL 3; however, Cryptography 3.4.8 (and
4646
# probably some other packages as well) only works with 1.1.1, so
@@ -57,8 +57,8 @@ LIBFFI_VERSION=3.4.6
5757
CURL_FLAGS=--disable --fail --location --create-dirs --progress-bar
5858

5959
# iOS targets
60-
TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.arm64 iphoneos.arm64
61-
VERSION_MIN-iOS=13.0
60+
TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.arm64 iphoneos.arm64 maccatalyst.x86_64 maccatalyst.arm64
61+
VERSION_MIN-iOS=14.2
6262
CFLAGS-iOS=-mios-version-min=$(VERSION_MIN-iOS)
6363

6464
# tvOS targets
@@ -168,13 +168,15 @@ os=$2
168168
OS_LOWER-$(target)=$(shell echo $(os) | tr '[:upper:]' '[:lower:]')
169169

170170
# $(target) can be broken up into is composed of $(SDK).$(ARCH)
171-
SDK-$(target)=$$(basename $(target))
171+
SDK-$(target)=$$(subst maccatalyst,macosx,$$(basename $(target)))
172172
ARCH-$(target)=$$(subst .,,$$(suffix $(target)))
173173

174-
ifeq ($$(findstring simulator,$$(SDK-$(target))),)
175-
TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))$$(VERSION_MIN-$(os))
176-
else
174+
ifneq ($$(findstring simulator,$$(SDK-$(target))),)
177175
TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))$$(VERSION_MIN-$(os))-simulator
176+
else ifneq ($$(findstring macosx,$$(target)),)
177+
TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-ios$$(VERSION_MIN-$(os))-macabi
178+
else
179+
TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))$$(VERSION_MIN-$(os))
178180
endif
179181

180182
SDK_ROOT-$(target)=$$(shell xcrun --sdk $$(SDK-$(target)) --show-sdk-path)
@@ -251,7 +253,7 @@ $$(XZ_SRCDIR-$(target))/Makefile: $$(XZ_SRCDIR-$(target))/configure
251253
LDFLAGS="$$(LDFLAGS-$(target))" \
252254
--disable-shared \
253255
--enable-static \
254-
--host=$$(TARGET_TRIPLE-$(target)) \
256+
--host=$$(subst -macabi,,$$(TARGET_TRIPLE-$(target))) \
255257
--build=$(HOST_ARCH)-apple-darwin \
256258
--prefix="$$(XZ_INSTALL-$(target))" \
257259
2>&1 | tee -a ../xz-$(XZ_VERSION).config.log
@@ -380,7 +382,7 @@ $$(MPDECIMAL_SRCDIR-$(target))/Makefile: $$(MPDECIMAL_SRCDIR-$(target))/configur
380382
LDFLAGS="$$(LDFLAGS-$(target))" \
381383
--disable-shared \
382384
--enable-static \
383-
--host=$$(TARGET_TRIPLE-$(target)) \
385+
--host=$$(subst -macabi,,$$(TARGET_TRIPLE-$(target))) \
384386
--build=$(HOST_ARCH)-apple-darwin \
385387
--prefix="$$(MPDECIMAL_INSTALL-$(target))" \
386388
2>&1 | tee -a ../xz-$(MPDECIMAL_VERSION).config.log
@@ -550,9 +552,11 @@ $$(LIBFFI_SRCDIR-$(os))/darwin_common/include/ffi.h: downloads/libffi-$(LIBFFI_V
550552
@echo ">>> Unpack and configure libFFI sources on $(os)"
551553
mkdir -p $$(LIBFFI_SRCDIR-$(os))
552554
tar zxf $$< --strip-components 1 -C $$(LIBFFI_SRCDIR-$(os))
555+
# Patch the source to add support for maccatalyst/remove i386+armv7
556+
cd $$(LIBFFI_SRCDIR-$(os)) && patch -p1 < $(PROJECT_DIR)/patch/libffi.patch
553557
# Configure the build
554558
cd $$(LIBFFI_SRCDIR-$(os)) && \
555-
python3 generate-darwin-source-and-headers.py --only-$(shell echo $(os) | tr '[:upper:]' '[:lower:]') \
559+
python3 generate-darwin-source-and-headers.py --only-$(shell echo $(os) | tr '[:upper:]' '[:lower:]') --disable-i386 --disable-armv7 \
556560
2>&1 | tee -a ../libffi-$(LIBFFI_VERSION).config.log
557561

558562
###########################################################################

patch/libffi.patch

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
diff -ur libffi-3.4.6-orig/config.sub libffi-3.4.6/config.sub
2+
--- libffi-3.4.6-orig/config.sub 2023-10-21 13:41:22
3+
+++ libffi-3.4.6/config.sub 2025-01-04 11:15:10
4+
@@ -127,6 +127,8 @@
5+
EOF
6+
IFS=$saved_IFS
7+
8+
+abi=""
9+
+
10+
# Separate into logical components for further validation
11+
case $1 in
12+
*-*-*-*-*)
13+
@@ -1324,6 +1326,11 @@
14+
kernel=nto
15+
os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
16+
;;
17+
+ ios-macabi)
18+
+ kernel=
19+
+ os=ios
20+
+ abi="-macabi"
21+
+ ;;
22+
*-*)
23+
# shellcheck disable=SC2162
24+
saved_IFS=$IFS
25+
@@ -1881,7 +1888,7 @@
26+
;;
27+
esac
28+
29+
-echo "$cpu-$vendor-${kernel:+$kernel-}$os"
30+
+echo "$cpu-$vendor-${kernel:+$kernel-}$os${abi}"
31+
exit
32+
33+
# Local variables:
34+
diff -ur libffi-3.4.6-orig/generate-darwin-source-and-headers.py libffi-3.4.6/generate-darwin-source-and-headers.py
35+
--- libffi-3.4.6-orig/generate-darwin-source-and-headers.py 2023-10-21 13:41:22
36+
+++ libffi-3.4.6/generate-darwin-source-and-headers.py 2025-01-04 09:18:08
37+
@@ -8,7 +8,7 @@
38+
39+
40+
class Platform(object):
41+
- pass
42+
+ abi = None
43+
44+
45+
class i386_platform(Platform):
46+
@@ -153,7 +153,22 @@
47+
arch = 'arm64_32'
48+
version_min = '-mwatchos-version-min=4.0'
49+
50+
+class macosx_x86_64_platform(x86_64_platform):
51+
+ target = 'x86_64-apple-ios-macabi'
52+
+ directory = 'darwin_ios'
53+
+ sdk = 'macosx'
54+
+ version_min = '-mios-version-min=14.2'
55+
+ abi = 'macabi'
56+
57+
+
58+
+class macosx_arm64_platform(arm64_platform):
59+
+ target = 'arm64-apple-ios-macabi'
60+
+ directory = 'darwin_ios'
61+
+ sdk = 'macosx'
62+
+ version_min = '-mios-version-min=14.2'
63+
+ abi = 'macabi'
64+
+
65+
+
66+
def mkdir_p(path):
67+
try:
68+
os.makedirs(path)
69+
@@ -219,7 +234,7 @@
70+
"../configure",
71+
f"--host={platform.target}",
72+
] + (
73+
- [] if platform.sdk == "macosx" else [f"--build={os.uname().machine}-apple-darwin"]
74+
+ [] if platform.sdk == "macosx" and platform.abi != "macabi" else [f"--build={os.uname().machine}-apple-darwin"]
75+
),
76+
env=env
77+
)
78+
@@ -243,16 +258,24 @@
79+
generate_ios=True,
80+
generate_tvos=True,
81+
generate_watchos=True,
82+
+ enable_maccatalyst=True,
83+
+ enable_i386=True,
84+
+ enable_armv7=True,
85+
):
86+
copy_files('src', 'darwin_common/src', pattern='*.c')
87+
copy_files('include', 'darwin_common/include', pattern='*.h')
88+
89+
if generate_ios:
90+
- copy_src_platform_files(ios_simulator_i386_platform)
91+
+ if enable_i386:
92+
+ copy_src_platform_files(ios_simulator_i386_platform)
93+
copy_src_platform_files(ios_simulator_x86_64_platform)
94+
copy_src_platform_files(ios_simulator_arm64_platform)
95+
- copy_src_platform_files(ios_device_armv7_platform)
96+
+ if enable_armv7:
97+
+ copy_src_platform_files(ios_device_armv7_platform)
98+
copy_src_platform_files(ios_device_arm64_platform)
99+
+ if enable_maccatalyst:
100+
+ copy_src_platform_files(macosx_x86_64_platform)
101+
+ copy_src_platform_files(macosx_arm64_platform)
102+
if generate_osx:
103+
copy_src_platform_files(desktop_x86_64_platform)
104+
copy_src_platform_files(desktop_arm64_platform)
105+
@@ -261,20 +284,27 @@
106+
copy_src_platform_files(tvos_simulator_arm64_platform)
107+
copy_src_platform_files(tvos_device_arm64_platform)
108+
if generate_watchos:
109+
- copy_src_platform_files(watchos_simulator_i386_platform)
110+
+ if enable_i386:
111+
+ copy_src_platform_files(watchos_simulator_i386_platform)
112+
copy_src_platform_files(watchos_simulator_x86_64_platform)
113+
copy_src_platform_files(watchos_simulator_arm64_platform)
114+
- copy_src_platform_files(watchos_device_armv7k_platform)
115+
+ if enable_armv7:
116+
+ copy_src_platform_files(watchos_device_armv7k_platform)
117+
copy_src_platform_files(watchos_device_arm64_32_platform)
118+
119+
platform_headers = collections.defaultdict(set)
120+
121+
if generate_ios:
122+
- build_target(ios_simulator_i386_platform, platform_headers)
123+
+ if enable_i386:
124+
+ build_target(ios_simulator_i386_platform, platform_headers)
125+
build_target(ios_simulator_x86_64_platform, platform_headers)
126+
build_target(ios_simulator_arm64_platform, platform_headers)
127+
- build_target(ios_device_armv7_platform, platform_headers)
128+
+ if enable_armv7:
129+
+ build_target(ios_device_armv7_platform, platform_headers)
130+
build_target(ios_device_arm64_platform, platform_headers)
131+
+ if enable_maccatalyst:
132+
+ build_target(macosx_x86_64_platform, platform_headers)
133+
+ build_target(macosx_arm64_platform, platform_headers)
134+
if generate_osx:
135+
build_target(desktop_x86_64_platform, platform_headers)
136+
build_target(desktop_arm64_platform, platform_headers)
137+
@@ -283,10 +313,12 @@
138+
build_target(tvos_simulator_arm64_platform, platform_headers)
139+
build_target(tvos_device_arm64_platform, platform_headers)
140+
if generate_watchos:
141+
- build_target(watchos_simulator_i386_platform, platform_headers)
142+
+ if enable_i386:
143+
+ build_target(watchos_simulator_i386_platform, platform_headers)
144+
build_target(watchos_simulator_x86_64_platform, platform_headers)
145+
build_target(watchos_simulator_arm64_platform, platform_headers)
146+
- build_target(watchos_device_armv7k_platform, platform_headers)
147+
+ if enable_armv7:
148+
+ build_target(watchos_device_armv7k_platform, platform_headers)
149+
build_target(watchos_device_arm64_32_platform, platform_headers)
150+
151+
mkdir_p('darwin_common/include')
152+
@@ -302,6 +334,8 @@
153+
parser.add_argument('--only-osx', action='store_true', default=False)
154+
parser.add_argument('--only-tvos', action='store_true', default=False)
155+
parser.add_argument('--only-watchos', action='store_true', default=False)
156+
+ parser.add_argument('--disable-i386', action='store_true', default=False)
157+
+ parser.add_argument('--disable-armv7', action='store_true', default=False)
158+
args = parser.parse_args()
159+
160+
generate_source_and_headers(
161+
@@ -309,4 +343,6 @@
162+
generate_ios=not args.only_osx and not args.only_tvos and not args.only_watchos,
163+
generate_tvos=not args.only_ios and not args.only_osx and not args.only_watchos,
164+
generate_watchos=not args.only_ios and not args.only_osx and not args.only_tvos,
165+
+ enable_i386=not args.disable_i386,
166+
+ enable_armv7=not args.disable_armv7,
167+
)

0 commit comments

Comments
 (0)