package/pkg-python: fix get_platform for target builds
PATCH 1/1 package/pkg-python: fix get_platform for target builds
Replicate the logic used to set _PYTHON_HOST_PLATFORM in configure.ac:
https://github.com/python/cpython/blob/v3.10.2/configure.ac#L441-L446
This should correctly set the sysconfig platform for cross builds:
https://github.com/python/cpython/blob/v3.10.2/Lib/sysconfig.py#L704-L706
Not setting this appears to cause distutils/setuptools to use the wrong build directory names for c extensions, however this doesn't seem to cause build or runtime errors as the installation paths still appear to be correct for staging/target installs.
--- package/pkg-python.mk | 9 +++++++++ 1 file changed, 9 insertions(+)
package/pkg-python.mk +9 -0
@@ -20,6 +20,13 @@ # ################################################################################ +ifeq ($(BR2_arm)$(BR2_armeb),y) +PKG_PYTHON_ARCH = arm +else +PKG_PYTHON_ARCH = $(ARCH) +endif +PKG_PYTHON_HOST_PLATFORM = linux-$(PKG_PYTHON_ARCH) + # basename does not evaluate if a file exists, so we must check to ensure # the _sysconfigdata__linux_*.py file exists. The "|| true" is added to return # an empty string if the file does not exist.
@@ -33,6 +40,7 @@ PKG_PYTHON_DISTUTILS_ENV = \ LDSHARED="$(TARGET_CROSS)gcc -shared" \ PYTHONPATH="$(if $(BR2_PACKAGE_PYTHON3),$(PYTHON3_PATH),$(PYTHON_PATH))" \ PYTHONNOUSERSITE=1 \ + _PYTHON_HOST_PLATFORM="$(PKG_PYTHON_HOST_PLATFORM)" \ _PYTHON_SYSCONFIGDATA_NAME="$(PKG_PYTHON_SYSCONFIGDATA_NAME)" \ _python_sysroot=$(STAGING_DIR) \ _python_prefix=/usr \
@@ -60,6 +68,7 @@ HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS = \ # Target setuptools-based packages PKG_PYTHON_SETUPTOOLS_ENV = \ + _PYTHON_HOST_PLATFORM="$(PKG_PYTHON_HOST_PLATFORM)" \ _PYTHON_SYSCONFIGDATA_NAME="$(PKG_PYTHON_SYSCONFIGDATA_NAME)" \ PATH=$(BR_PATH) \ $(TARGET_CONFIGURE_OPTS) \
Signature · 6 lines
2.25.1 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Arnout Vandecappelle
AppliedQuoted 6 lines · James Hilliard
Replicate the logic used to set
_PYTHON_HOST_PLATFORMin configure.ac:
https://github.com/python/cpython/blob/v3.10.2/configure.ac#L441-L446This should correctly set the sysconfig platform for cross builds:
https://github.com/python/cpython/blob/v3.10.2/Lib/sysconfig.py#L704-L706
Quoted 6 lines
Not setting this appears to cause distutils/setuptools to use the wrong build directory names for c extensions, however this doesn't seem to cause build or runtime errors as the installation paths still appear to be correct for staging/target installs.
Signed-off-by James Hilliard <[email protected]>
Applied to master, thanks.
Regards,
Arnout
Quoted 31 lines
--- package/pkg-python.mk | 9 +++++++++ 1 file changed, 9 insertions(+)package/pkg-python.mk +8
-0@@ -20,6 +20,13 @@ # ################################################################################ +ifeq ($(BR2_arm)$(BR2_armeb),y) +PKG_PYTHON_ARCH = arm +else +PKG_PYTHON_ARCH = $(ARCH) +endif +PKG_PYTHON_HOST_PLATFORM = linux-$(PKG_PYTHON_ARCH) + # basename does not evaluate if a file exists, so we must check to ensure # the _sysconfigdata__linux_*.py file exists. The "|| true" is added to return # an empty string if the file does not exist.@@ -33,6 +40,7 @@ PKG_PYTHON_DISTUTILS_ENV = \ LDSHARED="$(TARGET_CROSS)gcc -shared" \ PYTHONPATH="$(if $(BR2_PACKAGE_PYTHON3),$(PYTHON3_PATH),$(PYTHON_PATH))" \ PYTHONNOUSERSITE=1 \ + _PYTHON_HOST_PLATFORM="$(PKG_PYTHON_HOST_PLATFORM)" \ _PYTHON_SYSCONFIGDATA_NAME="$(PKG_PYTHON_SYSCONFIGDATA_NAME)" \ _python_sysroot=$(STAGING_DIR) \ _python_prefix=/usr \
package/pkg-python.mk HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS = \ · line 74
Quoted 7 lines
package/pkg-python.mk +1
-0@@ -60,6 +68,7 @@ HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS = \ # Target setuptools-based packages PKG_PYTHON_SETUPTOOLS_ENV = \ + _PYTHON_HOST_PLATFORM="$(PKG_PYTHON_HOST_PLATFORM)" \ _PYTHON_SYSCONFIGDATA_NAME="$(PKG_PYTHON_SYSCONFIGDATA_NAME)" \ PATH=$(BR_PATH) \ $(TARGET_CONFIGURE_OPTS) \
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot