标签: llvm-py

从LLVM JIT调用Python代码

我在python中编写了一个语言词法分析器/解析器/编译器,它应该llvm-py稍后在LLVM JIT-VM(使用)中运行.前两个步骤现在非常简单,但是(即使我还没有启动编译任务)我看到一个问题,当我的代码想调用Python-Code(一般),或者与Python lexer交互时/ parser/compiler(特殊)分别.我主要担心的是,代码应该能够在运行时动态地将其他代码加载到VM中,因此它必须从VM中触发Python中的整个词法分析器/解析器/编译器链.

首先:这是否可能,或者VM一旦启动就"不可改变"?

如果是,我目前看到3种可能的解决方案(我愿意接受其他建议)

  • "突破"虚拟机,可以直接调用主进程的Python函数(可能通过将其注册为LLVM函数,以某种方式重定向到主进程).我没有发现任何关于这一点,无论如何我不确定,如果这是一个好主意(安全等).
  • 将运行时(在运行时静态或动态)编译为LLVM-Assembly/-IR.这要求IR代码能够修改它运行的VM
  • 将运行时(静态)编译到库中并将其直接加载到VM中.同样,它必须能够将函数(等)添加到它运行的VM中.

python llvm llvm-py

6
推荐指数
2
解决办法
684
查看次数

在Mac OS X上构建和运行llvm-py

我试图在Mac OS X上构建llvm-py.

这是我试图做的,我需要下载11vm-2.7,而README文件有这样的评论:确保'--enable-pic'传递给LLVM的'configure'

  1. 下载llvm 2.7.
  2. 构建llvm 2.7:运行 ./configure --prefix=LLVM_DIRECTORY --enable-pic
  3. 下载llvm-py 0.6.
  4. 构建llvm-py 0.6:运行 python setup.py build --llvm-config=LLVM_DIRECTORY/bin/llvm-config

一切都编译没有错误,但当我试图运行测试文件时,我收到此错误消息.

ImportError: 'dlopen(/Library/Python/2.7/site-packages/llvm/_core.so, 2): Symbol not found: __ZTVN4llvm16ExtractValueInstE\n Referenced from: /Library/Python/2.7/site-packages/llvm/_core.so\n Expected in: flat namespace\n in /Library/Python/2.7/site-packages/llvm/_core.so'

消息错误似乎表示缺少具有平面namemspace问题的函数"llvmExtractValueInst".这有什么问题?

在llvm 2.7中,Makefile.rules有这一行

SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress \ -dynamiclib

我试图删除flat_namespace,但我得到编译错误.

添加

按照locojay的回答,我可以建立brew和llvmpy.

export REQUIRES_RTTI=1
brew install llvm --rtti
sudo pip install git+https://github.com/llvmpy/llvmpy
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在测试目录中执行示例时,我仍然遇到了不同类型的错误 -

test> python example.py 
Traceback (most recent call last):
  File "example.py", line 4, in …
Run Code Online (Sandbox Code Playgroud)

python macos build llvm llvm-py

5
推荐指数
1
解决办法
2328
查看次数

标签 统计

llvm ×2

llvm-py ×2

python ×2

build ×1

macos ×1