1*4882a593Smuzhiyun# To enable LTO, add following in local.conf 2*4882a593Smuzhiyun# require conf/distro/include/lto.inc 3*4882a593Smuzhiyun# DISTRO_FEATURES:append = " lto" 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun# Disable LTO for following packages 7*4882a593SmuzhiyunLTO:pn-glibc = "" 8*4882a593SmuzhiyunLTO:pn-gcc-runtime = "" 9*4882a593SmuzhiyunLTO:pn-libgcc-initial = "" 10*4882a593SmuzhiyunLTO:pn-libgcc = "" 11*4882a593SmuzhiyunLTO:pn-libaio = "" 12*4882a593SmuzhiyunLTO:pn-libpam = "" 13*4882a593SmuzhiyunLTO:pn-elfutils = "" 14*4882a593SmuzhiyunLTO:pn-perl = "" 15*4882a593SmuzhiyunLTO:pn-busybox = "" 16*4882a593SmuzhiyunLTO:pn-libxcrypt = "" 17*4882a593SmuzhiyunLTO:pn-curl = "" 18*4882a593SmuzhiyunLTO:pn-libcap = "" 19*4882a593SmuzhiyunLTO:pn-libproxy = "" 20*4882a593SmuzhiyunLTO:pn-libbsd = "" 21*4882a593SmuzhiyunLTO:pn-perf = "" 22*4882a593Smuzhiyun# webkit is not linking properly with LTO, disable until next time 23*4882a593SmuzhiyunLTO:pn-webkitgtk = "" 24*4882a593SmuzhiyunLTO:pn-xserver-xorg = "" 25*4882a593SmuzhiyunLTO:pn-grub = "" 26*4882a593SmuzhiyunLTO:pn-grub-efi = "" 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun# Custom LTO flags 29*4882a593Smuzhiyun# disable partitioning/streaming algorithm since its uses ASM 30*4882a593Smuzhiyun# constructs not compatible with lto 31*4882a593SmuzhiyunLTOEXTRA:pn-alsa-lib = "-flto-partition=none" 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunLTOEXTRA ?= "" 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun# Override it for additional or different options if needed e.g. 36*4882a593Smuzhiyun# with clang thin-lto might be better for compile speed 37*4882a593Smuzhiyun# 38*4882a593Smuzhiyun# ffat-lto-objects 39*4882a593Smuzhiyun# object files that contain both the intermediate 40*4882a593Smuzhiyun# language and the object code. This makes them 41*4882a593Smuzhiyun# usable for both LTO linking and normal linking 42*4882a593Smuzhiyun# 43*4882a593Smuzhiyun# -fuse-linker-plugin 44*4882a593Smuzhiyun# ensures that libraries participate in LTO by supplying intermediate 45*4882a593Smuzhiyun# code from .a files to linker 46*4882a593SmuzhiyunLTO ?= "-flto -ffat-lto-objects -fuse-linker-plugin ${LTOEXTRA}" 47*4882a593Smuzhiyun 48*4882a593SmuzhiyunSELECTED_OPTIMIZATION:append = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}" 49*4882a593SmuzhiyunTARGET_LDFLAGS:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}" 50*4882a593Smuzhiyun 51*4882a593SmuzhiyunSELECTED_OPTIMIZATION[vardeps] += "LTO LTOEXTRA" 52