[Buildroot] BR2_ENABLE_DEBUG is (incorrectly) using `Debug` for CMAKE_BUILD_TYPE instead of `RelWithDebInfo`
Mehdi AMINI
joker.eph at gmail.com
Sun Sep 3 10:05:53 UTC 2017
Hi all,
Patch attached!
(Let me know if I should start a separate thread instead)
Best,
--
Mehdi
2017-08-24 18:47 GMT-07:00 Mehdi AMINI <joker.eph at gmail.com>:
>
>
> 2017-08-24 14:39 GMT-07:00 Arnout Vandecappelle <arnout at mind.be>:
>
>>
>>
>> On 23-08-17 11:45, Mehdi AMINI wrote:
>> [snip]
>> > Two practical examples of packages that shows what can go wrong:
>> >
>> > 1) ceres-solver ( https://github.com/ceres-solver/ceres-solver )
>> >
>> > When configured with CMAKE_BUILD_TYPE=Release, it'll generate:
>> >
>> > lib/libceres.a
>> >
>> > However with CMAKE_BUILD_TYPE=Debug we end up with:
>> >
>> > lib/libceres-debug.a
>> >
>> >
>> > 2) the LLVM compiler is doing special casing based on the value of
>> > CMAKE_BUILD_TYPE. For example:
>> >
>> > if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND
>> > NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
>> > add_flag_if_supported("-gline-tables-only" GLINE_TABLES_ONLY)
>> > endif()
>> > # Use -O1 even in debug mode, otherwise sanitizers slowdown is too
>> large.
>> > if (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
>> > add_flag_if_supported("-O1" O1)
>> > endif()
>> >
>> > Or also:
>> >
>> > if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
>> > option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF)
>> > else()
>> > option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
>> > endif()
>> >
>> >
>> > In my experience it has been quite common for CMake projects to use
>> > CMAKE_BUILD_TYPE to differentiate on more than just default
>> optimization level.
>>
>> I think this is exactly why we should use Debug/Release instead of
>> always using
>> Release: the CmakeLists.txt may enable some other things conditional on
>> debug,
>> and when you choose BR2_ENABLE_DEBUG, you typically want those other
>> things.
>> Like the assertions in LLVM.
>>
>
> This is not what the documentation / description of the option says I
> believe. I wouldn't expect the generated code to be any different when
> enabling BR2_ENABLE_DEBUG personally (other than the added DWARF section).
> My reading of the description is that I should be able to turn it on and
> the binaries in the target directory should be bit-to-bit identical
> (assuming the rest of the build and the compiler is deterministic).
>
> If that's not the intent behind BR2_ENABLE_DEBUG, it seems to me that
> another option could be useful to provide exactly this mode: getting debug
> info in the staging directory without affecting anything in the target.
>
> Hope this makes sense.
>
> Best,
>
> --
> Mehdi
>
>
>
>>
>> The ceres solver is something else. That package is just doing the wrong
>> thing.
>> It needs to be patched to remove that -debug suffix. We do something
>> similar for
>> synergy, for instance.
>>
>> Regards,
>> Arnout
>>
>>
>> --
>> Arnout Vandecappelle arnout at mind be
>> Senior Embedded Software Architect +32-16-286500
>> Essensium/Mind http://www.mind.be
>> G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
>> LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
>> GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.buildroot.org/pipermail/buildroot/attachments/20170903/9c383c56/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-BR2_ENABLE_DEBUG-handling-for-cmake-packages.patch
Type: application/octet-stream
Size: 2097 bytes
Desc: not available
URL: <http://lists.buildroot.org/pipermail/buildroot/attachments/20170903/9c383c56/attachment.obj>
More information about the buildroot
mailing list