Производить бинарный код из IR генерировать из llvmlite

Кто-нибудь знает, возможно ли иметь бинарный код от IR, сгенерированный с llvmlite? в llvm мы можем просто набрать -emit-llvm -o foo.bc -c foo.c. Что делать, если я использую llvmlite?

1 ответ

Насколько я могу судить, llvmlite не содержит компоновщика. Вы можете написать объектный код, например, с помощью

target = llvm.Target.from_default_triple()
machine = target.create_target_machine()
with llvm.create_mcjit_compiler(module, target) as mcjit:
     def on_compiled(module, objbytes):
         open('mymodule.o', 'w').write(objbytes)
     mcjit.set_object_cache(on_compiled, lambda m: None)
     mcjit.finalize_object()

А затем используйте ваш стандартный компоновщик ldкоторый обычно вы бы имели через gcc или же clang связать объектный файл. LLVM 4 поставляется с собственным компоновщиком lld это вариант для использования вручную, но llvmlite не в версии 4 и не сможет раскрыть эту функциональность.

Например, на моей машине я могу запустить bash

 $ gcc -o llvmapp mymodule.o
 $ ./llvmapp

На данный момент кажется, что самым простым решением является прямое написание всего кода на Python, но это происходит за счет времени выполнения, которое, как я знаю, некоторых людей не волнует.

К сожалению, мне пришлось бы согласиться с @Jimmy. Я еще ничего не видел, и это 2019 год, то есть 2 года спустя, а все еще ничего.

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