mirror of
https://github.com/python/cpython.git
synced 2025-12-07 05:40:13 +00:00
gh-141692: Add a slice-specific lib folder to iOS XCframeworks. (#141693)
Modifies the iOS XCframework to include a lib folder for each slice that contains a symlinked version of the libPython dynamic library.
This commit is contained in:
parent
ce79154176
commit
7b0b708675
4 changed files with 22 additions and 1 deletions
|
|
@ -477,6 +477,12 @@ def lib_platform_files(dirname, names):
|
|||
or name == "build-details.json"
|
||||
)
|
||||
}
|
||||
elif path.parts[-1] == "lib":
|
||||
ignored_names = {
|
||||
name
|
||||
for name in names
|
||||
if name.startswith("libpython") and name.endswith(".dylib")
|
||||
}
|
||||
else:
|
||||
ignored_names = set()
|
||||
|
||||
|
|
@ -614,6 +620,12 @@ def create_xcframework(platform: str) -> str:
|
|||
slice_framework / "Headers/pyconfig.h",
|
||||
)
|
||||
|
||||
print(f" - {slice_name} shared library")
|
||||
# Create a simlink for the fat library
|
||||
shared_lib = slice_path / f"lib/libpython{version_tag}.dylib"
|
||||
shared_lib.parent.mkdir()
|
||||
shared_lib.symlink_to("../Python.framework/Python")
|
||||
|
||||
print(f" - {slice_name} architecture-specific files")
|
||||
for host_triple, multiarch in slice_parts.items():
|
||||
print(f" - {multiarch} standard library")
|
||||
|
|
@ -625,6 +637,7 @@ def create_xcframework(platform: str) -> str:
|
|||
framework_path(host_triple, multiarch) / "lib",
|
||||
package_path / "Python.xcframework/lib",
|
||||
ignore=lib_platform_files,
|
||||
symlinks=True,
|
||||
)
|
||||
has_common_stdlib = True
|
||||
|
||||
|
|
@ -632,6 +645,7 @@ def create_xcframework(platform: str) -> str:
|
|||
framework_path(host_triple, multiarch) / "lib",
|
||||
slice_path / f"lib-{arch}",
|
||||
ignore=lib_non_platform_files,
|
||||
symlinks=True,
|
||||
)
|
||||
|
||||
# Copy the host's pyconfig.h to an architecture-specific name.
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@ install_stdlib() {
|
|||
rsync -au --delete "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/"
|
||||
rsync -au "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib-$ARCHS/" "$CODESIGNING_FOLDER_PATH/python/lib/"
|
||||
else
|
||||
rsync -au --delete "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/"
|
||||
# A single-arch framework will have a libpython symlink; that can't be included at runtime
|
||||
rsync -au --delete "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/" --exclude 'libpython*.dylib'
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3050,6 +3050,9 @@ frameworkinstallunversionedstructure: $(LDLIBRARY)
|
|||
$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)
|
||||
sed 's/%VERSION%/'"`$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import platform; print(platform.python_version())'`"'/g' < $(RESSRCDIR)/Info.plist > $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Info.plist
|
||||
$(INSTALL_SHARED) $(LDLIBRARY) $(DESTDIR)$(PYTHONFRAMEWORKPREFIX)/$(LDLIBRARY)
|
||||
$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(LIBDIR)
|
||||
$(LN) -fs "../$(LDLIBRARY)" "$(DESTDIR)$(prefix)/lib/libpython$(LDVERSION).dylib"
|
||||
$(LN) -fs "../$(LDLIBRARY)" "$(DESTDIR)$(prefix)/lib/libpython$(VERSION).dylib"
|
||||
$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(BINDIR)
|
||||
for file in $(srcdir)/$(RESSRCDIR)/bin/* ; do \
|
||||
$(INSTALL) -m $(EXEMODE) $$file $(DESTDIR)$(BINDIR); \
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
Each slice of an iOS XCframework now contains a ``lib`` folder that contains
|
||||
a symlink to the libpython dylib. This allows binary modules to be compiled
|
||||
for iOS using dynamic libreary linking, rather than Framework linking.
|
||||
Loading…
Add table
Add a link
Reference in a new issue