llvm-d

Jens Mueller jens.k.mueller at gmx.de
Sat Mar 23 03:31:18 PDT 2013


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


More information about the Digitalmars-d-announce mailing list