如何为OpenWrt编译PyPy?

时间:2017-08-03 06:31:24

标签: openwrt pypy

我试图编译PyPy以用于OpenWrt配置,但我很难做到这一点。

我的主要问题是:

  • 每次我更改Makefile时,我都被迫再次启动PyPy的翻译过程。有没有办法避免这种情况?

  • 只复制已编译的pypy-clib*.so二进制文件,还是必须复制PyPy编译文件中的所有内容?
    在文件上运行make之后,这是directory structure

  • 如何指定要使用的GCC版本?我试图这样做没有成功。

  • 在OpenWrt上安装解释器后,如何让解释器运行?

  • 还可以使用PyPy本身编译PyPy,它为.tar文件提供了不同的结构(没有Makefile,pypy可执行文件等)。我可以使用它而不是从源代码构建它吗?

这是我的Makefile。

include $(TOPDIR)/rules.mk

PKG_NAME:=PyPy
PKG_VERSION:=5.8.0
PKG_RELEASE:=1
PKG_MD5SUM:=504c2d522595baf8775ae1045a217a2b120732537861d31b889d47c340b58bd5

PKG_SOURCE_NAME:=pypy2
PKG_SOURCE_URL:=https://bitbucket.org/pypy/pypy/downloads/
PKG_SOURCE:=$(PKG_SOURCE_NAME)-v$(PKG_VERSION)-src.tar.bz2
PKG_BUILD_DEPENDS:=python
PKG_CAT:=bzcat


PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)$(PKG_SOURCE_NAME)-v$(PKG_VERSION)-src

include $(INCLUDE_DIR)/package.mk
$(call include_mk, python-package.mk)

define Package/PyPy
    SECTION:=utils
    CATEGORY:=Utilities
    TITLE:=PyPy
    URL:=https://pypy.org/index.html
    DEPENDS:=+libffi +libexpat +libunwind

endef

define Package/PyPy/description
    PyPy is an alternate implementation of the Python programming language written in Python. 
    This distribution is for Linux architecture, using Python 2.

endef

define Package/PyPy/install
    $(INSTALL_DIR) $(1)/usr/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/pypy-c $(1)/usr/bin
    $(CP) (PKG_BUILD_DIR)/*.so $(1)/usr/lib
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/pypy/bin/*  $(1)/usr/bin

endef

define Build/Compile
    $(MAKE) -C $(PKG_BUILD_DIR)
endef

$(eval $(call BuildPackage,PyPy))

2 个答案:

答案 0 :(得分:0)

我需要看到整个过程:上面的Makefile部分,其他部分如rules.mk,package.mk,命令行参数和环境变量,以便了解什么是无效的

  1. 不支持有问题的Makefile,开发人员不使用它,并且正如您发现它不能正常工作。如build page中所述,从源代码构建PyPy是一个由四部分组成的进程,并且Makefile将这些阶段中的三个混合在一起,因此任何更改当前都需要从0重新启动。请注意,底层构建过程使用PYPY_USESSION_DIRPYPY_USESSION_BASENAME和编号系统,以确保每次第一阶段(从RPython转换为C)将结果放入一个新的,干净的目录。因此,如果重新启动该过程,您将失去以前的工作。

  2. Python既是二进制解释器又是“包含电池”模块的stdlib。如果您希望使用二进制解释器,则需要将二进制文件和stdlib支持文件一起安装,因为它们作为一个单元工作。这就是我们在build page包装中指定第四步的原因。有关使用解释器+ stdlib

  3. 的方法,请仔细阅读该部分
  4. PyPy并不真正支持交叉编译,documentation of RPython中描述了一种以前工作的方法。 PyPy支持原生gcc和/或clang。你试图在什么硬件上使用什么编译器?

  5. 像任何python解释器一样运行解释器;指定可执行文件的路径,如上所述,需要知道如何查找支持文件,例如专门为PyPy安装的第三方模块的stdlib和site-packages目录。

  6. 使用PyPy构建PyPy应该与使用CPython构建PyPy没什么不同,除了它将更多更快。您看到的差异必须是您正在构建的工件。

  7. 我建议你不要使用不受支持的Makefile,直到你理解构建,编译,打包,安装过程,然后一旦你有一个正常工作的安装帮助PyPy项目改进过程,直到它可以自动化为Makefile

答案 1 :(得分:0)

如果您在supported hardware and operating system上运行OpenWRT,那么使用二进制分发而不是从源代码编译会更高兴。在这种情况下,您的Makefile应该下载二进制发行版并简单地安装它。

如果你使用不同的CPU,很可能PyPy不会在你的硬件上开箱即用,你必须运行测试以确保JIT实际上能让事情变得更快。