You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.5 KiB

  1. #
  2. # Copyright (C) 2017 OpenWrt.org
  3. #
  4. # This is free software, licensed under the GNU General Public License v2.
  5. # See /LICENSE for more information.
  6. #
  7. # Note: include this file after `include $(TOPDIR)/rules.mk in your package Makefile
  8. # if `python3-package.mk` is included, this will already be included
  9. # For PYTHON3_VERSION
  10. python3_mk_path:=$(dir $(lastword $(MAKEFILE_LIST)))
  11. include $(python3_mk_path)python3-version.mk
  12. HOST_PYTHON3_DIR:=$(STAGING_DIR_HOSTPKG)
  13. HOST_PYTHON3_INC_DIR:=$(HOST_PYTHON3_DIR)/include/python$(PYTHON3_VERSION)
  14. HOST_PYTHON3_LIB_DIR:=$(HOST_PYTHON3_DIR)/lib/python$(PYTHON3_VERSION)
  15. HOST_PYTHON3_PKG_DIR:=$(HOST_PYTHON3_DIR)/lib/python$(PYTHON3_VERSION)/site-packages
  16. HOST_PYTHON3_BIN:=$(HOST_PYTHON3_DIR)/bin/python$(PYTHON3_VERSION)
  17. HOST_PYTHON3PATH:=$(HOST_PYTHON3_LIB_DIR):$(HOST_PYTHON3_PKG_DIR)
  18. HOST_PYTHON3_VARS = \
  19. ARCH="$(HOST_ARCH)" \
  20. CC="$(HOSTCC)" \
  21. CCSHARED="$(HOSTCC) $(HOST_FPIC)" \
  22. CXX="$(HOSTCXX)" \
  23. LD="$(HOSTCC)" \
  24. LDSHARED="$(HOSTCC) -shared" \
  25. CFLAGS="$(HOST_CFLAGS)" \
  26. CPPFLAGS="$(HOST_CPPFLAGS) -I$(HOST_PYTHON3_INC_DIR)" \
  27. LDFLAGS="$(HOST_LDFLAGS) -lpython$(PYTHON3_VERSION) -Wl$(comma)-rpath$(comma)$(STAGING_DIR_HOSTPKG)/lib" \
  28. PYTHONPATH="$(HOST_PYTHON3PATH)" \
  29. PYTHONDONTWRITEBYTECODE=0 \
  30. PYTHONOPTIMIZE=""
  31. # $(1) => directory of python script
  32. # $(2) => python script and its arguments
  33. # $(3) => additional variables
  34. define HostPython3/Run
  35. cd "$(if $(strip $(1)),$(strip $(1)),.)" && \
  36. $(HOST_PYTHON3_VARS) \
  37. $(3) \
  38. $(HOST_PYTHON3_BIN) $(2)
  39. endef
  40. # Note: I shamelessly copied this from Yousong's logic (from python-packages);
  41. HOST_PYTHON3_PIP:=$(STAGING_DIR_HOSTPKG)/bin/pip$(PYTHON3_VERSION)
  42. HOST_PYTHON3_PIP_CACHE_DIR:=$(DL_DIR)/pip-cache
  43. # Multiple concurrent pip processes can lead to errors or unexpected results: https://github.com/pypa/pip/issues/2361
  44. # $(1) => packages to install
  45. define HostPython3/PipInstall
  46. $(call locked, \
  47. $(HOST_PYTHON3_VARS) \
  48. $(HOST_PYTHON3_PIP) \
  49. --cache-dir "$(HOST_PYTHON3_PIP_CACHE_DIR)" \
  50. --disable-pip-version-check \
  51. install \
  52. --no-binary :all: \
  53. --require-hashes \
  54. $(1) \
  55. $(if $(CONFIG_PYTHON3_HOST_PIP_CACHE_WORLD_READABLE), \
  56. && $(FIND) $(HOST_PYTHON3_PIP_CACHE_DIR) -not -type d -exec chmod go+r '{}' \; \
  57. && $(FIND) $(HOST_PYTHON3_PIP_CACHE_DIR) -type d -exec chmod go+rx '{}' \; \
  58. ), \
  59. pip \
  60. )
  61. endef
  62. # $(1) => build subdir
  63. # $(2) => additional arguments to setup.py
  64. # $(3) => additional variables
  65. define HostPython3/ModSetup
  66. $(call HostPython3/Run, \
  67. $(HOST_BUILD_DIR)/$(strip $(1)), \
  68. setup.py $(2), \
  69. $(3))
  70. endef