Moritz Maxeiner wrote: > On Saturday, 23 March 2013 at 09:30:07 UTC, Jens Mueller wrote: > >Moritz Maxeiner wrote: > >>A couple of more things I forgot to mention: > >> > >>- You will need to additionally add bindings for all the > >>LLVMInitialize"TARGET_NAME"{TargetInfo,Target,TargetMC,AsmParser,AsmPrinter,Disassembler} > >>functions. They reside inside the target libraries and not > >>inside > >>llvm-c, which is why only translating the C API won't get you > >>them. > >>The LLVMInitializeNativeTarget function , which is necessary to > >>use > >>LLVM for jitting - otherwise you'll only have access to > >>interpreting, which is horribly slow - uses them, but it is a > >>static > >>inline function and as such does not get exposed because LLVM > >>builds > >>with the option to hide all inline functions. That is not a > >>problem > >>for C, as this function gets defined in the header, but for D it > >>is > >>a big problem, because you cannot access > >>LLVMInitializeNativeTarget. > >>You need to recreate it in D by using all the functions it > >>references. Of course, you'll also have to accomodate the fact > >>that > >>these referenced functions may or may not be compiled in > >>depending > >>on which target where selected when compiling LLVM. > > > >Do you happen to know why these functions are not declared in the > >header > >files. I mean when using the C interface in C I wouldn't even know > >that > >these functions exist. > > I suspect it is because of LLVM's internal structure. Each supported > target is presented by its own directory and they are afaict > mutually independent from one another, "so their initialiation > routines should be part of them themselves" I would guess, but I > don't know, sorry. > Also, when using the C interface in C there is little need to know > them because they get encapsulated in LLVMInitializeAllTargets and > LLVMInitializeNativeTarget.
Not sure whether this fixes the problem completely. Can you check https://github.com/jkm/deimos-llvm/blob/master/deimos/llvm/c/target.d#L157 I came up with this solution to replace the macros in the C binding. Jens