我试图编译PyPy以用于OpenWrt配置,但我很难做到这一点。
我的主要问题是:
每次我更改Makefile时,我都被迫再次启动PyPy的翻译过程。有没有办法避免这种情况?
只复制已编译的pypy-c
和lib*.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))
答案 0 :(得分:0)
我需要看到整个过程:上面的Makefile部分,其他部分如rules.mk,package.mk,命令行参数和环境变量,以便了解什么是无效的
不支持有问题的Makefile,开发人员不使用它,并且正如您发现它不能正常工作。如build page中所述,从源代码构建PyPy是一个由四部分组成的进程,并且Makefile将这些阶段中的三个混合在一起,因此任何更改当前都需要从0重新启动。请注意,底层构建过程使用PYPY_USESSION_DIR
,PYPY_USESSION_BASENAME
和编号系统,以确保每次第一阶段(从RPython转换为C)将结果放入一个新的,干净的目录。因此,如果重新启动该过程,您将失去以前的工作。
Python既是二进制解释器又是“包含电池”模块的stdlib。如果您希望使用二进制解释器,则需要将二进制文件和stdlib支持文件一起安装,因为它们作为一个单元工作。这就是我们在build page,包装中指定第四步的原因。有关使用解释器+ stdlib
PyPy并不真正支持交叉编译,documentation of RPython中描述了一种以前工作的方法。 PyPy支持原生gcc和/或clang。你试图在什么硬件上使用什么编译器?
像任何python解释器一样运行解释器;指定可执行文件的路径,如上所述,需要知道如何查找支持文件,例如专门为PyPy安装的第三方模块的stdlib和site-packages目录。
使用PyPy构建PyPy应该与使用CPython构建PyPy没什么不同,除了它将更多更快。您看到的差异必须是您正在构建的工件。
我建议你不要使用不受支持的Makefile,直到你理解构建,编译,打包,安装过程,然后一旦你有一个正常工作的安装帮助PyPy项目改进过程,直到它可以自动化为Makefile
答案 1 :(得分:0)
如果您在supported hardware and operating system上运行OpenWRT,那么使用二进制分发而不是从源代码编译会更高兴。在这种情况下,您的Makefile应该下载二进制发行版并简单地安装它。
如果你使用不同的CPU,很可能PyPy不会在你的硬件上开箱即用,你必须运行测试以确保JIT实际上能让事情变得更快。