From 87665b26b83ee38a20873aadf8764105de4f66e2 Mon Sep 17 00:00:00 2001 From: Alexandru Ardelean Date: Tue, 24 Dec 2024 14:28:02 +0200 Subject: [PATCH] numpy: bump to version 2.2.1 Dropped: 003-without-vendored-meson.patch 004-workaround-for-multiple-top-level-packages-discovered.patch This time, we really need to use meson to build numpy. And to make things more complicated, the 'vendored' meson package (that comes with numpy) must be used. This is because they have some special logic in there that's specific to numpy. With this change, we also need to keep a special/internal 'openwrt-cross.txt.in' file, because cross-compiling numpy also requires that a 'longdouble_format' property be added. More details about this: https://github.com/numpy/numpy/issues/23972 https://github.com/numpy/numpy/blob/maintenance/2.2.x/doc/source/building/cross_compilation.rst Removing quirk fix for x86_64 with detecting 'avx512f'. This should work with the new meson stuff. And finally, added a test.sh script. This should make sure that this package works fine during upgrades. Signed-off-by: Alexandru Ardelean --- lang/python/numpy/Makefile | 44 +++++++++++++++---- lang/python/numpy/files/openwrt-cross.txt.in | 27 ++++++++++++ .../002-avoid-build-user-config-files.patch | 2 +- .../patches/003-without-vendored-meson.patch | 34 -------------- ...ltiple-top-level-packages-discovered.patch | 12 ----- lang/python/numpy/test.sh | 18 ++++++++ 6 files changed, 82 insertions(+), 55 deletions(-) create mode 100644 lang/python/numpy/files/openwrt-cross.txt.in delete mode 100644 lang/python/numpy/patches/003-without-vendored-meson.patch delete mode 100644 lang/python/numpy/patches/004-workaround-for-multiple-top-level-packages-discovered.patch create mode 100644 lang/python/numpy/test.sh diff --git a/lang/python/numpy/Makefile b/lang/python/numpy/Makefile index bb7539dcca1174..7f948bac884065 100644 --- a/lang/python/numpy/Makefile +++ b/lang/python/numpy/Makefile @@ -6,11 +6,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=numpy -PKG_VERSION:=2.1.3 +PKG_VERSION:=2.2.1 PKG_RELEASE:=1 PYPI_NAME:=$(PKG_NAME) -PKG_HASH:=aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761 +PKG_HASH:=45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918 PKG_MAINTAINER:=Alexandru Ardelean @@ -27,9 +27,43 @@ PKG_BUILD_DEPENDS:=python-cython/host pyproject-metadata/host PYTHON3_PKG_BUILD_VARS:= \ $(if $(CONFIG_NUMPY_OPENBLAS_SUPPORT),,NPY_BLAS_ORDER= NPY_LAPACK_ORDER= ) +MESON_USE_STAGING_PYTHON:=1 + include ../pypi.mk include $(INCLUDE_DIR)/package.mk include ../python3-package.mk +include $(INCLUDE_DIR)/meson.mk + +MESON_ARGS+= \ + -Ddisable-optimization=true \ + -Dcpu-baseline=min + +# Override 'Meson', to use numpy's vendored meson +define Meson + $(call Python3/Run,,$(PKG_BUILD_DIR)/vendored-meson/meson/meson.py $(1),$(2)) +endef + +define Meson/CreateCrossFile + $(STAGING_DIR_HOST)/bin/sed \ + -e "s|@CC@|$(foreach BIN,$(TARGET_CC),'$(BIN)',)|" \ + -e "s|@CXX@|$(foreach BIN,$(TARGET_CXX),'$(BIN)',)|" \ + -e "s|@LD@|$(foreach FLAG,$(TARGET_LINKER),'$(FLAG)',)|" \ + -e "s|@AR@|$(TARGET_AR)|" \ + -e "s|@STRIP@|$(TARGET_CROSS)strip|" \ + -e "s|@NM@|$(TARGET_NM)|" \ + -e "s|@PKGCONFIG@|$(PKG_CONFIG)|" \ + -e "s|@CMAKE@|$(STAGING_DIR_HOST)/bin/cmake|" \ + -e "s|@PYTHON@|$(PYTHON_BIN)|" \ + -e "s|@CFLAGS@|$(foreach FLAG,$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \ + -e "s|@CXXFLAGS@|$(foreach FLAG,$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \ + -e "s|@LDFLAGS@|$(foreach FLAG,$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS),'$(FLAG)',)|" \ + -e "s|@ARCH@|$(MESON_ARCH)|" \ + -e "s|@CPU@|$(MESON_CPU)|" \ + -e "s|@ENDIAN@|$(if $(CONFIG_BIG_ENDIAN),big,little)|" \ + < files/openwrt-cross.txt.in \ + > $(1) + echo "longdouble_format = '$(if $(CONFIG_BIG_ENDIAN),IEEE_DOUBLE_BE,IEEE_DOUBLE_LE)'" >> $(1) +endef define Package/python3-numpy SUBMENU:=Python @@ -54,12 +88,6 @@ config NUMPY_OPENBLAS_SUPPORT endmenu endef -ifeq ($(ARCH),x86_64) -# FIXME: temporary fix for x86_64 with GCC 13 + musl; -# numpy does not detect this compiler extension, so we just enable it -TARGET_CFLAGS += -mavx512f -endif - define Build/Prepare/numpy-sitecfg echo "[DEFAULT]" > $(PKG_BUILD_DIR)/site.cfg echo "library_dirs = $(STAGING_DIR)/usr/lib" >> $(PKG_BUILD_DIR)/site.cfg diff --git a/lang/python/numpy/files/openwrt-cross.txt.in b/lang/python/numpy/files/openwrt-cross.txt.in new file mode 100644 index 00000000000000..836a0e51e4fb25 --- /dev/null +++ b/lang/python/numpy/files/openwrt-cross.txt.in @@ -0,0 +1,27 @@ +[binaries] +c = [@CC@] +c_ld = [@LD@] +cpp = [@CXX@] +cpp_ld = [@LD@] +ar = '@AR@' +strip = '@STRIP@' +nm = '@NM@' +pkg-config = '@PKGCONFIG@' +cmake = '@CMAKE@' +python = '@PYTHON@' + +[built-in options] +c_args = [@CFLAGS@] +c_link_args = [@LDFLAGS@] +cpp_args = [@CXXFLAGS@] +cpp_link_args = [@LDFLAGS@] +prefix = '/usr' + +[host_machine] +system = 'linux' +cpu_family = '@ARCH@' +cpu = '@CPU@' +endian = '@ENDIAN@' + +[properties] +needs_exe_wrapper = true diff --git a/lang/python/numpy/patches/002-avoid-build-user-config-files.patch b/lang/python/numpy/patches/002-avoid-build-user-config-files.patch index c3d70207e26269..cf7faf4edc3b6b 100644 --- a/lang/python/numpy/patches/002-avoid-build-user-config-files.patch +++ b/lang/python/numpy/patches/002-avoid-build-user-config-files.patch @@ -1,6 +1,6 @@ --- a/numpy/distutils/system_info.py +++ b/numpy/distutils/system_info.py -@@ -404,7 +404,7 @@ def get_standard_file(fname): +@@ -403,7 +403,7 @@ def get_standard_file(fname): pass else: user_file = os.path.join(f, fname) diff --git a/lang/python/numpy/patches/003-without-vendored-meson.patch b/lang/python/numpy/patches/003-without-vendored-meson.patch deleted file mode 100644 index 3dabd11fa86a3a..00000000000000 --- a/lang/python/numpy/patches/003-without-vendored-meson.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -1,7 +1,7 @@ - [build-system] --build-backend = "mesonpy" -+#build-backend = "mesonpy" - requires = [ -- "meson-python>=0.15.0", -+# "meson-python>=0.15.0", - "Cython>=3.0.6", # keep in sync with version check in meson.build - ] - -@@ -181,8 +181,8 @@ select = "*-win32" - config-settings = "setup-args=--vsenv setup-args=-Dallow-noblas=true build-dir=build" - repair-wheel-command = "" - --[tool.meson-python] --meson = 'vendored-meson/meson/meson.py' -+#[tool.meson-python] -+#meson = 'vendored-meson/meson/meson.py' - - [tool.meson-python.args] - install = ['--tags=runtime,python-runtime,tests,devel'] -@@ -190,8 +190,8 @@ install = ['--tags=runtime,python-runtim - [tool.spin] - package = 'numpy' - --[tool.spin.meson] --cli = 'vendored-meson/meson/meson.py' -+#[tool.spin.meson] -+#cli = 'vendored-meson/meson/meson.py' - - [tool.spin.commands] - "Build" = [ diff --git a/lang/python/numpy/patches/004-workaround-for-multiple-top-level-packages-discovered.patch b/lang/python/numpy/patches/004-workaround-for-multiple-top-level-packages-discovered.patch deleted file mode 100644 index c5424b50c97e93..00000000000000 --- a/lang/python/numpy/patches/004-workaround-for-multiple-top-level-packages-discovered.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -59,6 +59,9 @@ download = "https://pypi.org/project/num - tracker = "https://github.com/numpy/numpy/issues" - "release notes" = "https://numpy.org/doc/stable/release" - -+[tool.setuptools] -+py-modules = [] -+ - [tool.towncrier] - single_file = false - filename = "doc/source/release/notes-towncrier.rst" diff --git a/lang/python/numpy/test.sh b/lang/python/numpy/test.sh new file mode 100644 index 00000000000000..dc22892ca49d85 --- /dev/null +++ b/lang/python/numpy/test.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +EXP_VER="$2" + +python3 - << EOF +import sys +import numpy as np + +if (np.__version__ != "$EXP_VER"): + print("Got incorrect version: " + np.__version__) + sys.exit(1) + +arr = np.array([1, 2, 3, 4, 5]) + +print(arr) + +EOF +