Hi Jerome,
* Jerome BENOIT <
[email protected]> [2022-03-16 22:37]:
Hello,
One of my package builds with cmake.
All is fine except that the built static library gets the no-code-sections error complaint from lintian.
It appears [1,2] that /usr/share/cmake-3.22/Modules/Compiler/GNU.cmake enforces
-fno-fat-lto-objects unconditionally for GCC + IPO
What is the easiest way to revert the -fno-fat-lto-objects flags ?
I recommend you explicitly disable LTO for the static library with:
set_target_properties(staticlib PROPERTIES
INTERPROCEDURAL_OPTIMIZATION OFF)
LTO does not really achieve anything for static libraries: They are
merely an archive of object files, so the linker is never invoked on
them. You might think that LTO is useful when the static library is
linked with an executable eventually. Alas, the LTO intermediate
code is very compiler-specific, so it will not work with a different
compiler and most likely not even with a different version of the
same compiler.
Alternatively, you could add a snippet such as
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(staticlib PRIVATE -ffat-lto-objects)
endif()
This will work because the target-specific compile options happen to
end up after the LTO compile options on the command line right now.
However, dh_strip will remove the intermediate code anyway, for the
reasons outlined above.
Cheers
Timo
--
⢀⣴⠾⠻⢶⣦⠀ ╭────────────────────────────────────────────────────╮
⣾⠁⢠⠒⠀⣿⡁ │ Timo Röhling │
⢿⡄⠘⠷⠚⠋⠀ │ 9B03 EBB9 8300 DF97 C2B1 23BF CC8C 6BDD 1403 F4CA │
⠈⠳⣄⠀⠀⠀⠀ ╰────────────────────────────────────────────────────╯
-----BEGIN PGP SIGNATURE-----
iQGzBAABCgAdFiEEJvtDgpxjkjCIVtam+C8H+466LVkFAmIyYuEACgkQ+C8H+466 LVmF4QwA3dO7DEhJvQWiAOi/xOeGK/qUHdA1H2eOcbFmhhlA2CzVymCW4GqRt5sC LnGzeUgGG9hd1iyaO6oSghd5NU0J2IOwxnWHLRoULXV+vGhFu41zY5Vq2+QMAqt+ jRUiyWZywTcNgyofS5154q88herF5cCNyrIbhPk5zbgLdZW5PA+ss/ubEkC4AEzz VNP6bGtx6D9zFI/SZw1l4MZz7s5yX/HCHoDn8u45xh8kotjN1UEvqlLjIbfQyfEb inAryoHNhTuG6GE0qgirhOrN++1uULQ89GzNBw0ozs5XgOlPsdmmzwqlAJqGiXcY uSb91svLUEKtBRk61Gs9qX7ShSBDDG81uLQydiDhfRk