> On 10/03/2011 09:18 AM, Yuri Timenkov wrote:
>> Hi Michael,
>>
>> On Sun, Oct 2, 2011 at 6:07 PM, Michael Hertling
>> <mhertl...@online.de>wrote:
>>
>>> On 10/01/2011 10:07 AM, Yuri Timenkov wrote:
>>>> that's the problem: you don't know neither file name nor it's
>>>> location,
>>>> especially in multi-configuration generators.
>>>
>>> You *do* know a debug file's name and location, either because you must
>>> generate it explicitly (objcopy approach) or via the concerned target's
>>> $<TARGET_FILE_DIR:...> generator expression in custom targets/commands
>>> (Visual approach). Otherwise, a debug file with unknown name and/or
>>> location would be rather useless.
>>>
>> I'm sorry that you misunderstood me, but I was concerned about install()
>> commands.
>>
>> CMake already does a lot of things to make different platforms and
>> generators work in same way. As it was noted before, install already
>> knows
>> about such subtleties between generators and platforms like export
>> libraries. So why not make it aware of separate debug information?
>
> Because, IMO, the platform/generator independent extraction and/or
> recognition of debug info files is significantly more difficult to
> specify than the handling of DLLs along with their import libraries
> in VS, e.g. AFAICS, the latter works well since the import libraries
> are generated next to their DLLs sharing the same base name, and both
> are covered by INSTALL()'s RUNTIME/ARCHIVE DESTINATION clauses which
> also have a defined meaning on *nix. For VS alone, the installation
> of debug info files would in fact be as easy as the installation of
> an import library, but how would you specify and parameterize this
> task on *nix? With the GNU toolchain, CMake can't know in advance if
> and how debug info files are generated, where they're written to etc.

I think you got something reverse here.

To actually get the debug information in a separate file with binutils you
need to run objcopy. You _specify_ to objcopy where to put the debug file.
So CMake would need to specify this, i.e. can always know where these
files end up.

The build-id thing is optional, and as far as I understand this the
primary use case is to find the debug symbols corresponding to an
executable. The usual thing with gnu-debug-link is still done on those
binaries, so the build-id thing is on top of that. This would only affect
the install stage at all, i.e. if CMake would install these debug symbols
in the global debug directory.

So, to make things short:

-call objcopy with target filename and the output filename -> both come
from CMake, no magic
-optionally, and only on installation, check if the file has a build-id
(using readelf, objdump or whatever) and place a link from
/usr/lib/debug/.build-id (or whereever) to the debug file

So AFAICT there is no magic knowledge or searching for something involved
at all.

Or am I getting something seriously wrong here?

Eike
--
Powered by www.kitware.com

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

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

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

Reply via email to