# To enable LTO, add following in local.conf # require conf/distro/include/lto.inc # DISTRO_FEATURES:append = " lto" # # Disable LTO for following packages LTO:pn-glibc = "" LTO:pn-gcc-runtime = "" LTO:pn-libgcc-initial = "" LTO:pn-libgcc = "" LTO:pn-libaio = "" LTO:pn-libpam = "" LTO:pn-elfutils = "" LTO:pn-perl = "" LTO:pn-busybox = "" LTO:pn-libxcrypt = "" LTO:pn-curl = "" LTO:pn-libcap = "" LTO:pn-libproxy = "" LTO:pn-libbsd = "" LTO:pn-perf = "" # webkit is not linking properly with LTO, disable until next time LTO:pn-webkitgtk = "" LTO:pn-xserver-xorg = "" # Custom LTO flags # disable partitioning/streaming algorithm since its uses ASM # constructs not compatible with lto LTOEXTRA:pn-alsa-lib = "-flto-partition=none" LTOEXTRA ?= "" # Override it for additional or different options if needed e.g. # with clang thin-lto might be better for compile speed # # ffat-lto-objects # object files that contain both the intermediate # language and the object code. This makes them # usable for both LTO linking and normal linking # # -fuse-linker-plugin # ensures that libraries participate in LTO by supplying intermediate # code from .a files to linker LTO ?= "-flto -ffat-lto-objects -fuse-linker-plugin ${LTOEXTRA}" SELECTED_OPTIMIZATION:append = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}" TARGET_LDFLAGS:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}" SELECTED_OPTIMIZATION[vardeps] += "LTO LTOEXTRA"