cppfront icon indicating copy to clipboard operation
cppfront copied to clipboard

Feature to allow multiple translation unit compilations of generated pure headers

Open DrizztDoUrden opened this issue 1 year ago • 2 comments
trafficstars

The purpose of this PR is to allow including pure headers into multiple translation units without ODR violations.

First and foremost it splits phase2_func_defs into phase2_inline_defs and phase3_regular_defs. Produced .h file gets all declarations (as before), alias definitions and anything template-related, while the rest go to .hpp.

A flag -tu-compatible-h2 is added that stops generated hpp files from including other hpps as it is not necessary to produce a buildable source, but the default behaviour is unchanged. When using the flag it is important to include the resulting .hpp at least somewhere as it is never included automatically.

With a simple-ish cmake functions it makes it possible to produce automatically both header with declarations and inline definitions and a cpp with non-inline definitions. As an example, in my hobby project cmake parses h2s, finds #cppinclude lines and adds them to a new .cpp as regular #include, than includes the generated .hpp.

DrizztDoUrden avatar Jun 24 '24 00:06 DrizztDoUrden

Thanks for the suggestion and investing the time to provide code! I may have cycles to take a look at this but for now I'm putting it in bucket 4 in the current priorities (#1287) as I'm taking a pass to triage the outstanding PRs -- I think this is something desirable that we'll need to address somehow at some point. Thanks again.

hsutter avatar Sep 25 '24 00:09 hsutter

@DrizztDoUrden I would like to try this feature, would you mind sharing an example project with me? Thanks.

vincent-hui avatar Oct 31 '24 03:10 vincent-hui

Will this feature avoid having to do this? https://github.com/hsutter/cppfront/issues/594#issuecomment-2766300571

MatthieuHernandez avatar Mar 31 '25 13:03 MatthieuHernandez