Skip to contentSkip to conversation

package/pkg-python: fix get_platform for target builds

PATCH Applied James Hilliard 2 participants 2 messages Jan 30, 2022 – Feb 12, 2022

lore
Share & tools
lore
#0 lore raw

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
index 22ea77352c..d751311791 100644
@@ -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
#1 lore raw
Quoted 6 lines · James Hilliard

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

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.

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
index 22ea77352c..d751311791 100644
@@ -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