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 +