Как мне записать вывод в привязках Python LLVM?

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

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

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

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

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам