Skip to content

Add patch for Apple cross compilation on 3.13+ #323

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 8, 2024
Merged
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
3 changes: 1 addition & 2 deletions cpython-unix/build-cpython.sh
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,7 @@ pushd Python-${PYTHON_VERSION}

# configure doesn't support cross-compiling on Apple. Teach it.
if [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then
# TODO: Add support for cross-compiling on 3.13
:
patch -p1 -i ${ROOT}/patch-apple-cross-3.13.patch
elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then
patch -p1 -i ${ROOT}/patch-apple-cross-3.12.patch
else
Expand Down
87 changes: 87 additions & 0 deletions cpython-unix/patch-apple-cross-3.13.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
diff --git a/configure.ac b/configure.ac
index 58f54076ff2..a734260691a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -330,6 +330,21 @@ then
*-apple-ios*)
ac_sys_system=iOS
;;
+ *-apple-ios*)
+ ac_sys_system=iOS
+ ;;
+ *-apple-tvos*)
+ ac_sys_system=tvOS
+ ;;
+ *-apple-watchos*)
+ ac_sys_system=watchOS
+ ;;
+ *-*-darwin*)
+ ac_sys_system=Darwin
+ ;;
+ *-apple-*)
+ ac_sys_system=Darwin
+ ;;
*-*-vxworks*)
ac_sys_system=VxWorks
;;
@@ -771,6 +786,15 @@ if test "$cross_compiling" = yes; then
;;
esac
;;
+ *-*-darwin*)
+ case "$host_cpu" in
+ arm*)
+ _host_ident=arm
+ ;;
+ *)
+ _host_ident=$host_cpu
+ esac
+ ;;
*-*-vxworks*)
_host_ident=$host_cpu
;;
@@ -785,6 +809,23 @@ if test "$cross_compiling" = yes; then
_PYTHON_HOST_PLATFORM="$MACHDEP${_host_ident:+-$_host_ident}"
fi

+# The _PYTHON_HOST_PLATFORM environment variable is used to
+# override the platform name in distutils and sysconfig when
+# cross-compiling. On Apple, the platform name expansion logic
+# is non-trivial, including renaming MACHDEP=darwin to macosx
+# and including the deployment target (or current OS version if
+# not set). Here we always force an override based on the target
+# triple. We do this in all build configurations because historically
+# the automatic resolution has been brittle.
+case "$host" in
+aarch64-apple-darwin*)
+ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64"
+ ;;
+x86_64-apple-darwin*)
+ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-x86_64"
+ ;;
+esac
+
# Some systems cannot stand _XOPEN_SOURCE being defined at all; they
# disable features if it is defined, without any means to access these
# features as extensions. For these systems, we skip the definition of
@@ -1582,7 +1623,7 @@ if test $enable_shared = "yes"; then
BLDLIBRARY='-Wl,+b,$(LIBDIR) -L. -lpython$(LDVERSION)'
RUNSHARED=SHLIB_PATH=`pwd`${SHLIB_PATH:+:${SHLIB_PATH}}
;;
- Darwin*)
+ Darwin*|iOS*|tvOS*|watchOS*)
LDLIBRARY='libpython$(LDVERSION).dylib'
BLDLIBRARY='-L. -lpython$(LDVERSION)'
RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}
@@ -3469,6 +3510,11 @@ then
Linux*|GNU*|QNX*|VxWorks*|Haiku*)
LDSHARED='$(CC) -shared'
LDCXXSHARED='$(CXX) -shared';;
+ iOS*|tvOS*|watchOS*)
+ LDSHARED='$(CC) -bundle -undefined dynamic_lookup'
+ LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup'
+ BLDSHARED="$LDSHARED"
+ ;;
FreeBSD*)
if [[ "`$CC -dM -E - </dev/null | grep __ELF__`" != "" ]]
then