首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为PyPy编译OpenWrt?

如何为PyPy编译OpenWrt?
EN

Stack Overflow用户
提问于 2017-08-03 06:31:23
回答 2查看 614关注 0票数 0

我正在尝试编译PyPy,以便在OpenWrt配置中使用,但我很难做到这一点。

我的主要问题是:

  • 每次我更改Makefile时,我都不得不再次开始PyPy的翻译过程。有什么办法可以避免这种情况吗?
  • 复制仅仅是编译好的pypy-clib*.so二进制文件就可以做到这一点,还是我必须从PyPy的编译文件中复制所有内容? 下面是在文件上运行目录结构之后的make
  • 我如何指定GCC的版本来使用?我试过这样做,但没有成功。
  • 如何让解释器在OpenWrt上安装之后运行?
  • 还可以使用PyPy本身编译PyPy,它提供了一个具有不同结构的.tar文件(没有Makefile、pypy可执行文件等)。我能用它代替从源头构建它吗?

这是我的制造文件。

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

发布于 2017-08-03 21:03:04

我需要查看整个过程:上面Makefile的部分、其他部分,如rules.mk、package.mk、命令行参数和环境变量,以便了解哪些不起作用。

  1. 所讨论的Makefile不受支持,开发人员不使用它,正如您发现的那样,它不能很好地工作。正如在生成页中所描述的,从源代码构建PyPy是一个由四个部分组成的过程,Makefile将其中的三个阶段混合在一起,因此当前任何更改都需要从0重新启动。注意,底层构建过程使用PYPY_USESSION_DIRPYPY_USESSION_BASENAME和编号系统,以确保每次第一阶段(从RPython到C的转换)将结果放入一个新的干净目录中。因此,如果重新启动进程,就会丢失以前的工作。
  2. Python既是二进制解释器,也是“电池包含”模块的stdlib。如果希望使用二进制解释器,则需要将二进制文件和stdlib支持文件一起安装,因为它们是一个单元。这就是为什么我们在生成页中指定了第四个步骤,即打包。关于使用interpreter+stdlib的方法,请仔细阅读该部分
  3. PyPy并不真正支持交叉编译,在RPython文档中描述了一种用于工作的方法。PyPy确实支持gcc和/或clang。你想在什么硬件上使用什么编译器?
  4. 像运行任何python解释器一样运行解释器;指定可执行文件的路径,该文件(如前所述)需要知道如何找到支持文件,如stdlib和专门为PyPy安装的第三方模块的站点包目录。
  5. 使用PyPy构建PyPy应该与使用CPython构建PyPy没有什么不同,只不过它会快得多。你所看到的差异一定是你如何建造的产物。

我建议您在理解构建、编译、包、安装过程之前不要使用不受支持的Makefile,然后一旦您完成了工作安装,帮助PyPy项目改进这个过程,直到它可以自动变成Makefile为止。

票数 0
EN

Stack Overflow用户

发布于 2017-08-03 21:09:47

如果您在OpenWRT上运行支持的硬件和操作系统,那么使用二进制发行版而不是从源代码编译会更好。在这种情况下,Makefile应该下载一个二进制发行版并简单地安装它。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45476536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档