[fpc-pascal] Tool to create C-Header from Pascal source?

Matthias Klumpp matthias at nlinux.org
Mon Jul 12 13:25:50 CEST 2010


Okay, than I'll do it by myself.
Thanks for your explanation! If I had a little more time, I would like to
look at the code to improve it, but cause I don't know much about compiler
development this wouldn't be the best idea. I'm faster if I just translate
everything manually.


On Sun, 11 Jul 2010 23:13:31 +0200, Jonas Maebe <jonas.maebe at elis.ugent.be>
wrote:
> On 11 Jul 2010, at 21:15, Matthias Klumpp wrote:
> 
>> Is there a tool to generate C headers from Pascal library source files?
>> The
>> Delphi compiler can do this, but I would need a solution for Linux.
>> If there's not such a tool, I would have to do everything by hand, which
>> is
>> a lot of effort.
> 
> I was contracted a while ago to create a basis for this in FPC itself.
The
> code I wrote does *not* generate C headers, but it does offer all type
and
> symbol information in a generic way that would enable implementing
> generating C headers from it (the only implemented "backend" simply dumps
> all collected information in a plain text format). I haven't found time
yet
> to integrate it in FPC itself though.
> 
> Note that some of the extra work still necessary would be:
> a) generating FPC units containing procedural cdecl wrappers for all
> class/object methods (and for functions/procedures using non-cdecl
calling
> conventions on i386)
> b) munging all global symbol names (types, variables, procedures), since
in
> Pascal every unit has its own name space while in C everything exists in
> one single global name space (or at least doing that in case of conflicts
> -- but since such conflicts can arise as soon as your code depends on one
> more unit, it might seem prudent to do this from the start somehow, even
if
> the result won't be very pretty)
> c) actually generating C headers from the collected information (my code
> only extracts a bunch of information from internal compiler structures
and
> presents it in a generic tree structure)
> 
> I think that the compiler itself is the most appropriate place to
implement
> this exporting (rather than, e.g., fcl-passrc), because you need details
> from the code generator level to do it correctly, e.g.
> * you have to know whether to generate C prototypes with pointer or value
> parameter arguments, so you need to know how the compiler passes a
> particular parameter on the current platform (so keep in mind that the
> generated C headers would always be completely specific to a particular
> architecture/OS combination with this approach!)
> * what the offsets of individual fields in records are, so you can add
> padding in the C versions of the records where necessary
> 
> But in short: no, currently there is no way yet to do what you want.
> 
> 
> Jonas_______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal



More information about the fpc-pascal mailing list