enabling link time optimizations in package builds

Matthias Klose <[email protected]> Fri, 17 Jun 2022 10:18:43 +0200
Newsgroups gmane.linux.debian.ports.bsd
Message-ID <ce949fbe-e894-6485-988c-39cb0aa9a09c__25259.944090952$1655454557$gmane$org@debian.org>
Link time optimizations are an optimization that helps with a single digit 
percent number optimizing both for smaller size, and better speed.  These 
optimizations are available for some time now in GCC.  Link time optimizations 
are also at least turned on in other distros like Fedora, OpenSuse (two years) 
and Ubuntu (one year).

Details at https://wiki.debian.org/ToolChain/LTO

The proposal is to turn on LTO by default on most 64bit release architectures. 
Not proposing to do this on 32bit architectures because of the limited address 
space at link time, and up to now nobody tested LTO on 32bit archs.  In test 
rebuilds, there were 373 packages (dd-list in the wiki page) found not to build 
with link time optimizations for various reasons.  These range from easily 
fixable issues in symbols files to some upstream issues.  The idea is to fix as 
many of these as possible, and then change the packaging for the others to just 
turn off LTO in the package build.

To explicitly turn on LTO for a package build:

   export DEB_BUILD_MAINT_OPTIONS=optimize=+lto

to explicitly disable LTO:

   export DEB_BUILD_MAINT_OPTIONS=optimize=-lto

The idea is to file wishlist bug reports for those 373 packages and then see how 
far we get, and if it's feasible to already turn on LTO for bookworm.  If not, 
it should be turned on by default for the following release.

Matthias