Page MenuHomeSerpent OS

Boulder: LTO by default
Open, HighPublic

Description

LTO makes a lot of sense, but gives a lot of scope for how to implement it across the board. It also creates issues with breaking some packages. Therefore, a method to minimise the chances of breakage is key to the implementation.

Actions

  • List of packages it's disabled on other distros (Ubuntu, Opensuse, Fedora)
  • LTO thin vs full (thin seems only useful on large packages from my experience)
  • Evaluate the impact on package size
  • Evaluate the impact on build times
  • Ensure clang/lld are tuned for this (LTO/PGO wise)
  • Have an ABI map before initially making it default
  • A process for validating lto is mangling/deprecating symbols in the library (nm with symbol versions)
  • Determine whether having it globally, or simply enable for the important packages

Notes
LTO isn't necessarily the way to make the smallest packages. -fdata-sections and -ffunction-sections with proper GC leads to smaller file sizes, but those flags can reduce performance (less inlining, but both GCC and Clang use them, so may be favoured to reduce duplication in larger C++ software.

Event Timeline

sunnyflunk created this task.

A rough list from Fedora where LTO has been disabled:

0ad
apt
argyllcms
arm-none-eabi-gcc-cs
avahi
bcc
cbmc
ceph
chromium
chrony
clang
clisp
community-mysql
crash
criu
dolphin-emu
dotnet3.1
dotnet5.0
dovecot
efivar
elfutils
espresso
firebird
firefox
flatpak
FlightGear
foo2zjs
fwts
gcl
gdb
giac
gnucobol
grpc
grub2
guitarix
hedgewars
hpx
hyperscan
icecat
iperf
java-11-openjdk
java-1.8.0-openjdk
java-latest-openjdk
js8call
kdepim-runtime
keepassxc
kernel
kernel-tools
libbpf
libcxxabi
libfplll
libguestfs
libint2
libkgapi
libomp
libreoffice
libvirt
libxc
lld
llvm
mame
mariadb
mesa
mlpack
mono
mozjs78
muffin
nest
NetworkManager
nheko
nodejs
nodejs
nss
oniguruma
openblas
opencv
ostree
papi
paraview
pdns-recursor
php
polly
polymake
postgresql
primecount
prusa-slicer
python-pyfastnoisesimd
python-pyside2
qemu
qsstv
qt5-qt3d
qt5-qtbase
qt5-qtlocation
qt5-qtscript
qt5-qtwebkit
rpm-ostree
rsync
ruby
scummvm
seabios
seamonkey
sleuthkit
systemd
texlive-base
texmaker
thunderbird
tkrzw
valgrind
webkit2gtk3
wine
wireshark
wsjtx
xen
xfconf
xrootd
zam-plugins