@@ -34,33 +34,45 @@ OPENSSL_VERSION=3.0.16-2
34
34
XZ_VERSION =5.6.4-2
35
35
36
36
# Supported OS
37
- OS_LIST =macOS iOS tvOS watchOS visionOS
37
+ OS_LIST =macOS iOS tvOS watchOS visionOS MacCatalyst
38
38
39
39
CURL_FLAGS =--disable --fail --location --create-dirs --progress-bar
40
40
41
41
# macOS targets
42
42
TARGETS-macOS =macosx.x86_64 macosx.arm64
43
43
TRIPLE_OS-macOS =macos
44
44
VERSION_MIN-macOS =11.0
45
+ CONFIGFLAGS-macOS =
45
46
46
47
# iOS targets
47
48
TARGETS-iOS =iphonesimulator.x86_64 iphonesimulator.arm64 iphoneos.arm64
48
49
TRIPLE_OS-iOS =ios
49
50
VERSION_MIN-iOS =13.0
51
+ CONFIGFLAGS-iOS =
50
52
51
53
# tvOS targets
52
54
TARGETS-tvOS =appletvsimulator.x86_64 appletvsimulator.arm64 appletvos.arm64
53
55
TRIPLE_OS-tvOS =tvos
54
56
VERSION_MIN-tvOS =12.0
57
+ CONFIGFLAGS-tvOS =
55
58
56
59
# watchOS targets
57
60
TARGETS-watchOS =watchsimulator.x86_64 watchsimulator.arm64 watchos.arm64_32
58
61
TRIPLE_OS-watchOS =watchos
59
62
VERSION_MIN-watchOS =4.0
63
+ CONFIGFLAGS-watchOS =
60
64
65
+ # visionOS targets
61
66
TARGETS-visionOS =xrsimulator.arm64 xros.arm64
62
67
TRIPLE_OS-visionOS =xros
63
68
VERSION_MIN-visionOS =2.0
69
+ CONFIGFLAGS-visionOS =
70
+
71
+ # Mac Catalyst Targets
72
+ TARGETS-MacCatalyst =macabi.x86_64 macabi.arm64
73
+ TRIPLE_OS-MacCatalyst =ios
74
+ VERSION_MIN-MacCatalyst =14.2
75
+ CONFIGFLAGS-MacCatalyst=--with-catalyst-macos-version =11.2
64
76
65
77
# The architecture of the machine doing the build
66
78
HOST_ARCH =$(shell uname -m)
@@ -132,13 +144,19 @@ os=$2
132
144
OS_LOWER-$(target ) =$(shell echo $(os ) | tr '[:upper:]' '[:lower:]')
133
145
134
146
# $(target) can be broken up into is composed of $(SDK).$(ARCH)
135
- SDK-$(target ) =$$(basename $(target ) )
147
+ BASE-$(target ) =$$(basename $(target ) )
148
+ SDK-$(target ) =$$(subst macabi,macosx,$$(BASE-$(target ) ) )
136
149
ARCH-$(target ) =$$(subst .,,$$(suffix $(target ) ) )
137
150
138
151
ifneq ($(os ) ,macOS)
139
- ifeq ($$(findstring simulator,$$(SDK-$(target))),)
152
+ ifeq ($$(findstring simulator,$$(BASE-$(target))),)
153
+ ifeq ($$(findstring macabi,$$(BASE-$(target))),)
140
154
TARGET_TRIPLE-$(target) =$$(ARCH-$(target ) ) -apple-$$(TRIPLE_OS-$(os ) )$$(VERSION_MIN-$(os ) )
141
155
IS_SIMULATOR-$(target) =False
156
+ else
157
+ TARGET_TRIPLE-$(target) =$$(ARCH-$(target ) ) -apple-$$(TRIPLE_OS-$(os ) )$$(VERSION_MIN-$(os ) ) -macabi
158
+ IS_SIMULATOR-$(target) =False
159
+ endif
142
160
else
143
161
TARGET_TRIPLE-$(target) =$$(ARCH-$(target ) ) -apple-$$(TRIPLE_OS-$(os ) )$$(VERSION_MIN-$(os ) ) -simulator
144
162
IS_SIMULATOR-$(target) =True
@@ -266,10 +284,17 @@ ifneq ($(os),macOS)
266
284
PYTHON_SRCDIR-$(target) =build/$(os ) /$(target ) /python-$(PYTHON_VERSION )
267
285
PYTHON_INSTALL-$(target) =$(PROJECT_DIR ) /install/$(os ) /$(target ) /python-$(PYTHON_VERSION )
268
286
PYTHON_FRAMEWORK-$(target) =$$(PYTHON_INSTALL-$(target ) ) /Python.framework
287
+ ifneq ($$(BASE-$(target ) ) ,macabi)
269
288
PYTHON_LIB-$(target) =$$(PYTHON_FRAMEWORK-$(target ) ) /Python
270
289
PYTHON_BIN-$(target) =$$(PYTHON_INSTALL-$(target ) ) /bin
271
290
PYTHON_INCLUDE-$(target) =$$(PYTHON_FRAMEWORK-$(target ) ) /Headers
272
291
PYTHON_STDLIB-$(target) =$$(PYTHON_INSTALL-$(target ) ) /lib/python$(PYTHON_VER )
292
+ else
293
+ PYTHON_LIB-$(target) =$$(PYTHON_FRAMEWORK-$(target ) ) /Versions/$(PYTHON_VER ) /Python
294
+ PYTHON_BIN-$(target) =$$(PYTHON_FRAMEWORK-$(target ) ) /Versions/$(PYTHON_VER ) /bin
295
+ PYTHON_INCLUDE-$(target) =$$(PYTHON_FRAMEWORK-$(target ) ) /Versions/$(PYTHON_VER ) /Headers
296
+ PYTHON_STDLIB-$(target) =$$(PYTHON_FRAMEWORK-$(target ) ) /Versions/$(PYTHON_VER ) /lib/python$(PYTHON_VER )
297
+ endif
273
298
PYTHON_PLATFORM_CONFIG-$(target) =$$(PYTHON_INSTALL-$(target ) ) /platform-config/$$(ARCH-$(target ) ) -$$(SDK-$(target ) )
274
299
PYTHON_PLATFORM_SITECUSTOMIZE-$(target) =$$(PYTHON_PLATFORM_CONFIG-$(target ) ) /sitecustomize.py
275
300
@@ -312,10 +337,12 @@ $$(PYTHON_SRCDIR-$(target))/Makefile: \
312
337
--with-openssl=" $$ (OPENSSL_INSTALL-$( target) )" \
313
338
--enable-framework=" $$ (PYTHON_INSTALL-$( target) )" \
314
339
--with-system-libmpdec \
340
+ $$(CONFIGFLAGS-$(os ) ) \
315
341
2>&1 | tee -a ../python-$(PYTHON_VERSION ) .config.log
316
342
317
343
$$(PYTHON_SRCDIR-$(target ) ) /python.exe : $$(PYTHON_SRCDIR-$(target ) ) /Makefile
318
344
@echo " >>> Build Python for $( target) "
345
+
319
346
cd $$(PYTHON_SRCDIR-$(target ) ) && \
320
347
PATH=" $( PROJECT_DIR) /$$ (PYTHON_SRCDIR-$( target) )/$( os) /Resources/bin:$( PATH) " \
321
348
make -j8 all \
@@ -367,6 +394,7 @@ $(target): $$(PYTHON_PLATFORM_SITECUSTOMIZE-$(target)) $$(PYTHON_LIB-$(target))
367
394
368
395
vars-$(target ) :
369
396
@echo ">>> Environment variables for $(target ) "
397
+ @echo "BASE-$(target ) : $$(BASE-$(target ) ) "
370
398
@echo "SDK-$(target ) : $$(SDK-$(target ) ) "
371
399
@echo "ARCH-$(target ) : $$(ARCH-$(target ) ) "
372
400
@echo "TARGET_TRIPLE-$(target ) : $$(TARGET_TRIPLE-$(target ) ) "
@@ -411,8 +439,12 @@ SDK_TARGETS-$(sdk)=$$(filter $(sdk).%,$$(TARGETS-$(os)))
411
439
SDK_ARCHES-$(sdk ) =$$(sort $$(subst .,,$$(suffix $$(SDK_TARGETS-$(sdk ) ) ) ) )
412
440
413
441
ifeq ($$(findstring simulator,$(sdk ) ) ,)
442
+ ifeq ($$(findstring macabi,$(sdk ) ) ,)
414
443
SDK_SLICE-$(sdk) =$$(TRIPLE_OS-$(os ) ) -$$(shell echo $$(SDK_ARCHES-$(sdk ) ) | sed "s/ /_/g")
415
444
else
445
+ SDK_SLICE-$(sdk) =$$(TRIPLE_OS-$(os ) ) -$$(shell echo $$(SDK_ARCHES-$(sdk ) ) | sed "s/ /_/g") -maccatalyst
446
+ endif
447
+ else
416
448
SDK_SLICE-$(sdk) =$$(TRIPLE_OS-$(os ) ) -$$(shell echo $$(SDK_ARCHES-$(sdk ) ) | sed "s/ /_/g") -simulator
417
449
endif
418
450
@@ -446,24 +478,45 @@ else
446
478
PYTHON_INSTALL-$(sdk) =$(PROJECT_DIR ) /install/$(os ) /$(sdk ) /python-$(PYTHON_VERSION )
447
479
PYTHON_MODULEMAP-$(sdk) =$$(PYTHON_INCLUDE-$(sdk ) ) /module.modulemap
448
480
PYTHON_FRAMEWORK-$(sdk) =$$(PYTHON_INSTALL-$(sdk ) ) /Python.framework
481
+ ifneq ($(sdk ) ,macabi)
449
482
PYTHON_LIB-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk ) ) /Python
450
483
PYTHON_BIN-$(sdk) =$$(PYTHON_INSTALL-$(sdk ) ) /bin
451
484
PYTHON_INCLUDE-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk ) ) /Headers
452
485
PYTHON_STDLIB-$(sdk) =$$(PYTHON_INSTALL-$(sdk ) ) /lib/python$(PYTHON_VER )
486
+ else
487
+ PYTHON_LIB-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER ) /Python
488
+ PYTHON_BIN-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER ) /bin
489
+ PYTHON_INCLUDE-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER ) /Headers
490
+ PYTHON_STDLIB-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER ) /lib/python$(PYTHON_VER )
491
+ endif
453
492
PYTHON_PLATFORM_CONFIG-$(sdk) =$$(PYTHON_INSTALL-$(sdk ) ) /platform-config
454
493
455
494
$$(PYTHON_LIB-$(sdk ) ) : $$(foreach target,$$(SDK_TARGETS-$(sdk ) ) ,$$(PYTHON_LIB-$$(target ) ) )
456
495
@echo " >>> Build Python fat library for the $( sdk) SDK"
457
496
mkdir -p $$(dir $$(PYTHON_LIB-$(sdk ) ) )
497
+ ifeq ($(sdk ) ,macabi)
498
+ ln -si $(PYTHON_VER) $$(PYTHON_FRAMEWORK-$(sdk))/Versions/Current
499
+ ln -si Versions/Current/Headers $$(PYTHON_FRAMEWORK-$(sdk))/Headers
500
+ ln -si Versions/Current/Resources $$(PYTHON_FRAMEWORK-$(sdk))/Resources
501
+ ln -si Versions/Current/Python $$(PYTHON_FRAMEWORK-$(sdk))/Python
502
+ endif
458
503
lipo -create -output $$@ $$^ \
459
504
2>&1 | tee -a install/$(os)/$(sdk)/python-$(PYTHON_VERSION).lipo.log
460
505
# Disable dSYM production (for now)
461
506
# dsymutil $$@ -o $$(PYTHON_INSTALL-$(sdk))/Python.dSYM
462
507
508
+ ifneq ($(sdk ) ,macabi)
463
509
$$(PYTHON_FRAMEWORK-$(sdk ) ) /Info.plist : $$(PYTHON_LIB-$(sdk ) )
464
510
@echo " >>> Install Info.plist for the $( sdk) SDK"
465
511
# Copy Info.plist as-is from the first target in the $(sdk) SDK
466
512
cp -r $$(PYTHON_FRAMEWORK-$$(firstword $$(SDK_TARGETS-$(sdk ) ) ) ) /Info.plist $$(PYTHON_FRAMEWORK-$(sdk ) )
513
+ else
514
+ $$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER ) /Resources :
515
+ echo " >>> Copying Resources Folder for Versioned Framework from the first target in the SDK"
516
+ mkdir -p $$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER )
517
+ # Copy Resources as-is from the first target in the $(sdk) SDK
518
+ cp -r $$(PYTHON_FRAMEWORK-$$(firstword $$(SDK_TARGETS-$(sdk ) ) ) ) /Versions/$(PYTHON_VER ) /Resources $$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER )
519
+ endif
467
520
468
521
$$(PYTHON_INCLUDE-$(sdk ) ) /pyconfig.h : $$(PYTHON_LIB-$(sdk ) )
469
522
@echo " >>> Build Python fat headers for the $( sdk) SDK"
@@ -487,11 +540,20 @@ $$(PYTHON_INCLUDE-$(sdk))/pyconfig.h: $$(PYTHON_LIB-$(sdk))
487
540
echo "\n}" >> $$(PYTHON_MODULEMAP-$(sdk))
488
541
489
542
# Link the PYTHONHOME version of the headers
543
+ ifneq ($(sdk ) ,macabi)
490
544
mkdir -p $$(PYTHON_INSTALL-$(sdk))/include
491
545
ln -si ../Python.framework/Headers $$(PYTHON_INSTALL-$(sdk))/include/python$(PYTHON_VER)
546
+ else
547
+ mkdir -p $$(PYTHON_FRAMEWORK-$(sdk))/Versions/$(PYTHON_VER)/include
548
+ rm -rf $(PYTHON_FRAMEWORK-$(sdk))/Versions/$(PYTHON_VER)/include/*
549
+ ln -si ../Headers $$(PYTHON_FRAMEWORK-$(sdk))/Versions/$(PYTHON_VER)/include/python$(PYTHON_VER)
550
+ endif
492
551
493
552
ifeq ($(os ) , visionOS)
494
553
echo "Skipping arch-specific header copying for visionOS"
554
+
555
+ # Add the headers from each target -- there's should only be one target, so we copy it to the same name.
556
+ $$(foreach target,$$(SDK_TARGETS-$(sdk)),cp $$(PYTHON_INCLUDE-$$(target))/pyconfig.h $$(PYTHON_INCLUDE-$(sdk))/pyconfig.h; )
495
557
else
496
558
# Add the individual headers from each target in an arch-specific name
497
559
$$(foreach target,$$(SDK_TARGETS-$(sdk)),cp $$(PYTHON_INCLUDE-$$(target))/pyconfig.h $$(PYTHON_INCLUDE-$(sdk))/pyconfig-$$(ARCH-$$(target)).h; )
@@ -500,8 +562,11 @@ else
500
562
cp $$(PYTHON_SRCDIR-$$(firstword $$(SDK_TARGETS-$(sdk))))/$(os)/Resources/pyconfig.h $$(PYTHON_INCLUDE-$(sdk))/pyconfig.h
501
563
endif
502
564
503
-
565
+ ifneq ( $( sdk ) ,macabi)
504
566
$$(PYTHON_STDLIB-$(sdk ) ) /LICENSE.TXT : $$(PYTHON_LIB-$(sdk ) ) $$(PYTHON_FRAMEWORK-$(sdk ) ) /Info.plist $$(PYTHON_INCLUDE-$(sdk ) ) /pyconfig.h $$(foreach target,$$(SDK_TARGETS-$(sdk ) ) ,$$(PYTHON_PLATFORM_SITECUSTOMIZE-$$(target ) ) )
567
+ else
568
+ $$(PYTHON_STDLIB-$(sdk ) ) /LICENSE.TXT : $$(PYTHON_LIB-$(sdk ) ) $$(PYTHON_FRAMEWORK-$(sdk ) ) /Versions/$(PYTHON_VER ) /Resources $$(PYTHON_INCLUDE-$(sdk ) ) /pyconfig.h $$(foreach target,$$(SDK_TARGETS-$(sdk ) ) ,$$(PYTHON_PLATFORM_SITECUSTOMIZE-$$(target ) ) )
569
+ endif
505
570
@echo ">>> Build Python stdlib for the $(sdk) SDK"
506
571
mkdir -p $$(PYTHON_STDLIB-$(sdk))/lib-dynload
507
572
# Copy stdlib from the first target associated with the $(sdk) SDK
@@ -667,16 +732,19 @@ $$(PYTHON_XCFRAMEWORK-$(os))/Info.plist: \
667
732
2>&1 | tee -a support/$(PYTHON_VER ) /python-$(os ) .xcframework.log
668
733
669
734
@echo ">>> Install PYTHONHOME for $(os)"
735
+ # Do not install stuff for macabi becuase it's already built into the framework.
736
+ ifneq ($(os ) ,MacCatalyst)
670
737
$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/include $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
671
738
$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/bin $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
672
739
$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/lib $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
740
+ endif
673
741
$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/platform-config $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
674
742
# Disable dSYM production (for now)
675
743
# $$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/Python.dSYM $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
676
744
677
- ifeq ($(filter $(os ) ,iOS visionOS) ,$(os ) )
745
+ ifeq ($(filter $(os ) ,iOS visionOS MacCatalyst ) ,$(os ) )
678
746
@echo ">>> Clone testbed project for $(os)"
679
- $(HOST_PYTHON) $$(PYTHON_SRCDIR-$$(firstword $$(SDK_TARGETS-$$(firstword $$(SDKS-$(os))))))/$(os )/testbed clone --framework $$(PYTHON_XCFRAMEWORK-$(os)) support/$(PYTHON_VER)/$(os)/testbed
747
+ $(HOST_PYTHON) $$(PYTHON_SRCDIR-$$(firstword $$(SDK_TARGETS-$$(firstword $$(SDKS-$(os))))))/$$(subst MacCatalyst,iOS,$(os) )/testbed clone --framework $$(PYTHON_XCFRAMEWORK-$(os)) support/$(PYTHON_VER)/$(os)/testbed
680
748
endif
681
749
682
750
@echo ">>> Create VERSIONS file for $(os)"
0 commit comments