hsutter / cppfront

A personal experimental C++ Syntax 2 -> Syntax 1 compiler
Other
5.23k stars 224 forks source link

Feature to allow multiple translation unit compilations of generated pure headers #1141

Open DrizztDoUrden opened 1 week ago

DrizztDoUrden commented 1 week ago

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.