1

Does anyone know if it is possible to have binary code from IR generated with llvmlite? in llvm, we can simply clang -emit-llvm -o foo.bc -c foo.c. What if I am using llvmlite?

user3126804
  • 119
  • 3
  • 10

2 Answers2

0

As far as I can tell, llvmlite doesn't include a linker. You can write object code with, for example,

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()

And then use your standard linker ld, which usually you would have via gcc or clang to link the object file. LLVM 4 seems to ship with its own linker lld which is an option to use manually but llvmlite isn't on version 4 and wouldn't be able to expose that functionality.

On my machine for example, I can run from bash

 $ gcc -o llvmapp mymodule.o
 $ ./llvmapp
Jimmy
  • 89,068
  • 17
  • 119
  • 137
0

It appears the easiest solution thus far is directly write all your code in python, but it comes at the cost of run time, which I know some people don't care about.

Unfortunately, I would have to agree with @Jimmy. I haven't seen anything yet and it is 2019 which is 2 years later and still nothing.

seansanders
  • 95
  • 10