mirror of
https://github.com/python/cpython.git
synced 2025-12-07 13:50:06 +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"
|
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:
|
else:
|
||||||
ignored_names = set()
|
ignored_names = set()
|
||||||
|
|
||||||
|
|
@ -614,6 +620,12 @@ def create_xcframework(platform: str) -> str:
|
||||||
slice_framework / "Headers/pyconfig.h",
|
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")
|
print(f" - {slice_name} architecture-specific files")
|
||||||
for host_triple, multiarch in slice_parts.items():
|
for host_triple, multiarch in slice_parts.items():
|
||||||
print(f" - {multiarch} standard library")
|
print(f" - {multiarch} standard library")
|
||||||
|
|
@ -625,6 +637,7 @@ def create_xcframework(platform: str) -> str:
|
||||||
framework_path(host_triple, multiarch) / "lib",
|
framework_path(host_triple, multiarch) / "lib",
|
||||||
package_path / "Python.xcframework/lib",
|
package_path / "Python.xcframework/lib",
|
||||||
ignore=lib_platform_files,
|
ignore=lib_platform_files,
|
||||||
|
symlinks=True,
|
||||||
)
|
)
|
||||||
has_common_stdlib = True
|
has_common_stdlib = True
|
||||||
|
|
||||||
|
|
@ -632,6 +645,7 @@ def create_xcframework(platform: str) -> str:
|
||||||
framework_path(host_triple, multiarch) / "lib",
|
framework_path(host_triple, multiarch) / "lib",
|
||||||
slice_path / f"lib-{arch}",
|
slice_path / f"lib-{arch}",
|
||||||
ignore=lib_non_platform_files,
|
ignore=lib_non_platform_files,
|
||||||
|
symlinks=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Copy the host's pyconfig.h to an architecture-specific name.
|
# 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 --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/"
|
rsync -au "$PROJECT_DIR/$PYTHON_XCFRAMEWORK_PATH/$SLICE_FOLDER/lib-$ARCHS/" "$CODESIGNING_FOLDER_PATH/python/lib/"
|
||||||
else
|
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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3050,6 +3050,9 @@ frameworkinstallunversionedstructure: $(LDLIBRARY)
|
||||||
$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)
|
$(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
|
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_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)
|
$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(BINDIR)
|
||||||
for file in $(srcdir)/$(RESSRCDIR)/bin/* ; do \
|
for file in $(srcdir)/$(RESSRCDIR)/bin/* ; do \
|
||||||
$(INSTALL) -m $(EXEMODE) $$file $(DESTDIR)$(BINDIR); \
|
$(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