2013-08-11 2 views
1

Я использую Python's LLVM bindings для генерации кода для пользовательского языка.Как написать вывод из LLVM-привязок Python?

Теперь я хочу запустить программы и проверить, работает ли их вывод правильно, но я не могу точно определить , как для вывода чего-либо.

Есть ли способ написать stdout или файл с использованием привязок LLVM?

Или мне нужно позвонить printf из библиотеки C?

Как мне сделать это?

Примечание: Я не использую JIT/ExecutionEngine, поэтому LLVM автоматически не находит функцию printf.

ответ

1

LLVM может генерировать объектный файл (.o), который должен быть в состоянии связать с printf() до тех пор, как вы определили его правильно и ссылку на glibc (или msvcrt если вы на Windows). У них также есть библиотека под названием llvm_cbuilder как часть llvmpy, которая может помочь вам в этом. У них даже есть тестовый пример только для printf():

https://github.com/llvmpy/llvmpy/blob/master/llvm_cbuilder/tests/test_print.py

Другого варианта иметь свой собственный набор полезных функций, в том числе некоторые, что печать. Затем вы можете передать указатель на таблицу, содержащую все эти функции для вашей сгенерированной функции. Что мне нравится в этом решении, так это то, что он позволяет загружать сгенерированную функцию во время выполнения и избегать реальной привязки (но вы должны учитывать перемещение).

И последнее, но не менее важное: Numba всегда является хорошим источником примеров llvmpy.

+0

Спасибо за это - я считаю, что пример в URL-адресе «Github» - это именно то, что мне нужно. – sdasdadas

+0

Я на самом деле работаю над чем-то похожим. Было бы неплохо, если бы вы могли поделиться результатами на github или что-то еще. – kichik

+0

Я положу что-то, когда на самом деле получаю его для печати. : D Я просто пытаюсь написать модуль и связать его прямо сейчас. – sdasdadas