cmake -gsplit-dwarf dwp and install step

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

cmake -gsplit-dwarf dwp and install step

David Jobet
Hello,

in order to speed up our link step, I wanted to experiment with split dwarf.
See http://www.productive-cpp.com/improving-cpp-builds-with-split-dwarf/

Adding the compilation flag is easy, but I'm stumbling on the installation step.
In our current mode, we redirect the STRIP step to extract the symbols
and strip the binary.

With split dwarf, I want to use 'dwp' to collect all .dwo files and
assemble a symbol file. No need to strip I guess since symbols are
already put elsewhere.

So I figure I would just use dwp as the strip command in my custom
strip command.

Problem is .dwo files are recorded in the .o files relative to the
build directory and the strip command is executed on the installed
directory.
As a result, 'dwp' complains it cannot find the .dwo files.

I don't want to add a POST_BUILD step on each our binaries (we have
lots of binaries), and anyway I'd rather prefer to have the 'dwp' step
executed at install time so it's executed only when we want to
deliver.

Is there a way to either
- pass the build_dir to the strip command ?
- define a custom step of the install process that would execute on
the build dir previous to the install step itself ? (for the same
reason I don't want to manually define a POST_BUILD step on each
binaries, I don't want to manually define a custom INSTALL step that
would precede the INSTALL step of all our binaries)
- or another option ?

With regards

David
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: cmake -gsplit-dwarf dwp and install step

David Blaikie
Hi there - I'm not a CMake person, but a Clang/LLVM developer who helped in the implementation of Split DWARF in Clang/LLVM, so I know a bit about DWOs and DWPs, etc & thought I'd offer a few extra details...

On Fri, Dec 21, 2018 at 3:39 AM David Jobet <[hidden email]> wrote:
Hello,

in order to speed up our link step, I wanted to experiment with split dwarf.
See http://www.productive-cpp.com/improving-cpp-builds-with-split-dwarf/

Adding the compilation flag is easy, but I'm stumbling on the installation step.
In our current mode, we redirect the STRIP step to extract the symbols
and strip the binary.

When you say "symbols" - do you mean only debug info? Or other things (like the ELF symbol table (.symtab section) - since they're no longer needed if no one's calling into the binary (I guess maybe a symbol table that contains the entry point - 'main' would be needed? - this is the part of ELF I don't understand too well))
 
With split dwarf, I want to use 'dwp' to collect all .dwo files and
assemble a symbol file. No need to strip I guess since symbols are
already put elsewhere.

Actually there's probably still a desire to strip the executable - Split DWARF leaves some debug info in the .o/executable (& at least the GNU extension form of Split DWARF available in DWARFv4 leaves quiet a bit in the .o/executable, especially in an optimized build, unfortunately) that you can benefit from stripping out - along with the non-debug-related symbol table, if that's a thing you're stripping (see above).
 
So I figure I would just use dwp as the strip command in my custom
strip command.

Problem is .dwo files are recorded in the .o files relative to the
build directory and the strip command is executed on the installed
directory.

I think this depends on your build system - and might be resolvable relative to the comp_dir in the debug info remaining in the .o file? Though I haven't looked/checked closely (but yeah, moving debug info around when using Split DWARF is a bit tricky)
 
As a result, 'dwp' complains it cannot find the .dwo files.

I don't want to add a POST_BUILD step on each our binaries (we have
lots of binaries), and anyway I'd rather prefer to have the 'dwp' step
executed at install time so it's executed only when we want to
deliver.

Is there a way to either
- pass the build_dir to the strip command ?
- define a custom step of the install process that would execute on
the build dir previous to the install step itself ? (for the same
reason I don't want to manually define a POST_BUILD step on each
binaries, I don't want to manually define a custom INSTALL step that
would precede the INSTALL step of all our binaries)
- or another option ?

With regards

David
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake