Производить бинарный код из 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 года спустя, а все еще ничего.