[
https://issues.apache.org/jira/browse/THRIFT-6326?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer resolved THRIFT-6326.
--------------------------------
Fix Version/s: 0.26.0
Assignee: Jens Geyer
Resolution: Fixed
> Compile the compiler sources once for the executable and the unit tests
> -----------------------------------------------------------------------
>
> Key: THRIFT-6326
> URL: https://issues.apache.org/jira/browse/THRIFT-6326
> Project: Thrift
> Issue Type: Improvement
> Components: Build Process
> Reporter: Jens Geyer
> Assignee: Jens Geyer
> Priority: Major
> Fix For: 0.26.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> h3. Problem
> {{compiler/cpp/CMakeLists.txt}} builds {{thrift-compiler}} from the generator
> sources, and {{compiler/cpp/tests/CMakeLists.txt}} builds a separate static
> library {{thrift_compiler}} from the same sources, gathered a second time,
> because the test executable links the generator code rather than running the
> built compiler.
> Measured on a Linux build configured with {{BUILD_COMPILER=ON
> BUILD_LIBRARIES=OFF BUILD_TESTING=ON}}:
> || target || object files ||
> | thrift-compiler (executable) | 37 |
> | thrift_compiler (static library) | 35 |
> | identical in both | 32 |
> 32 translation units are therefore compiled twice in every build. Only five
> objects are unique to the executable ({{main.cc}}, {{t_kotlin}},
> {{t_markdown}}, {{t_mmd}}, {{t_ocaml}}) and three to the library
> ({{logging.cc}} and the two test support files).
> On AppVeyor this is {{thrift-compiler.exe}} at 4 min 22 s and
> {{thrift_compiler.lib}} at roughly 4 min more, out of a 21 min 27 s build.
> h3. Change
> Compile the shared sources once into a CMake OBJECT library and let both
> targets consume the objects.
> {{t_ocaml_generator.cc}} stays out of the shared objects.
> {{tests/ocaml/t_ocaml_generator_tests.cc}} includes that translation unit
> directly, so linking a compiled copy alongside it would duplicate every
> definition in it. The executable compiles that one on its own.
> The standalone build of {{compiler/cpp/tests}}, which
> .github/workflows/cmake.yml exercises as a separate step, keeps its current
> source list. The object library is used only where that target exists, which
> is the combined build.
> h3. Note
> In the combined build the test library gains the kotlin, markdown and mermaid
> generators. {{tests/CMakeLists.txt}} carries no {{THRIFT_ADD_COMPILER}} entry
> for those three while the parent build does, so the library has been missing
> them; they register themselves like every other generator. The effect is a
> slightly larger test binary and one less way for the two lists to drift apart.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)